欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL主從復(fù)制的原理及配置方法(比較詳細(xì))

 更新時(shí)間:2014年05月13日 09:23:33   作者:  
MySQL 的數(shù)據(jù)庫(kù)的高可用性的架構(gòu)大概有以下幾種:集群,讀寫分離,主備。而后面兩種都是通過復(fù)制來實(shí)現(xiàn)的。下面將簡(jiǎn)單介紹復(fù)制的原理及配置,以及一些常見的問題

一、復(fù)制的原理

MySQL 復(fù)制基于主服務(wù)器在二進(jìn)制日志中跟蹤所有對(duì)數(shù)據(jù)庫(kù)的更改(更新、刪除等等)。每個(gè)從服務(wù)器從主服務(wù)器接收主服務(wù)器已經(jīng)記錄到其二進(jìn)制日志的保存的更新,以便從服務(wù)器可以對(duì)其數(shù)據(jù)拷貝執(zhí)行相同的更新。

將主服務(wù)器的數(shù)據(jù)拷貝到從服務(wù)器的一個(gè)途徑是使用LOAD DATA FROM MASTER語(yǔ)句。請(qǐng)注意LOAD DATA FROM MASTER目前只在所有表使用MyISAM存儲(chǔ)引擎的主服務(wù)器上工作。并且,該語(yǔ)句將獲得全局讀鎖定。

MySQL 使用3個(gè)線程來執(zhí)行復(fù)制功能,其中1個(gè)在主服務(wù)器上,另兩個(gè)在從服務(wù)器上。當(dāng)發(fā)出START SLAVE時(shí),從服務(wù)器創(chuàng)建一個(gè)I/O線程,以連接主服務(wù)器并讓它發(fā)送記錄在其二進(jìn)制日志中的語(yǔ)句。
主服務(wù)器創(chuàng)建一個(gè)線程將二進(jìn)制日志中的內(nèi)容發(fā)送到從服務(wù)器。該線程可以識(shí)別為主服務(wù)器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。
從服務(wù)器I/O線程讀取主服務(wù)器Binlog Dump線程發(fā)送的內(nèi)容并將該數(shù)據(jù)拷貝到從服務(wù)器數(shù)據(jù)目錄中的本地文件中,即中繼日志。   
第3個(gè)線程是SQL線程,是從服務(wù)器創(chuàng)建用于讀取中繼日志并執(zhí)行日志中包含的更新。
有多個(gè)從服務(wù)器的主服務(wù)器創(chuàng)建為每個(gè)當(dāng)前連接的從服務(wù)器創(chuàng)建一個(gè)線程;每個(gè)從服務(wù)器有自己的I/O和SQL線程。

二、復(fù)制線程的狀態(tài)

1.復(fù)制主線程的狀態(tài)

復(fù)制代碼 代碼如下:

Sending binlog event to slave
二進(jìn)制日志由各種事件組成,一個(gè)事件通常為一個(gè)更新加一些其它信息。線程已經(jīng)從二進(jìn)制日志讀取了一個(gè)事件并且正將它發(fā)送到從服務(wù)器。
Finished reading one binlog; switching to next binlog
線程已經(jīng)讀完二進(jìn)制日志文件并且正打開下一個(gè)要發(fā)送到從服務(wù)器的日志文件。
Has sent all binlog to slave; waiting for binlog to be updated
線程已經(jīng)從二進(jìn)制日志讀取所有主要的更新并已經(jīng)發(fā)送到了從服務(wù)器。線程現(xiàn)在正空閑,等待由主服務(wù)器上新的更新導(dǎo)致的出現(xiàn)在二進(jìn)制日志中的新事件。
Waiting to finalize termination
線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)。

2.復(fù)制從I/O線程狀態(tài)

復(fù)制代碼 代碼如下:
Connecting to master
線程正試圖連接主服務(wù)器。

Checking master version
建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)。

Registering slave on master
建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)。

Requesting binlog dump
建立同主服務(wù)器之間的連接后立即臨時(shí)出現(xiàn)的狀態(tài)。線程向主服務(wù)器發(fā)送一條請(qǐng)求,索取從請(qǐng)求的二進(jìn)制日志文件名和位置開始的二進(jìn)制日志的內(nèi)容。

Waiting to reconnect after a failed binlog dump request
如果二進(jìn)制日志轉(zhuǎn)儲(chǔ)請(qǐng)求失敗(由于沒有連接),線程進(jìn)入睡眠狀態(tài),然后定期嘗試重新連接??梢允褂猫Cmaster-connect-retry選項(xiàng)指定重試之間的間隔。

Reconnecting after a failed binlog dump request
線程正嘗試重新連接主服務(wù)器。

Waiting for master to send event
線程已經(jīng)連接上主服務(wù)器,正等待二進(jìn)制日志事件到達(dá)。如果主服務(wù)器正空閑,會(huì)持續(xù)較長(zhǎng)的時(shí)間。如果等待持續(xù)slave_read_timeout秒,則發(fā)生超時(shí)。此時(shí),線程認(rèn)為連接被中斷并企圖重新連接。

Queueing master event to the relay log
線程已經(jīng)讀取一個(gè)事件,正將它復(fù)制到中繼日志供SQL線程來處理。

Waiting to reconnect after a failed master event read
讀取時(shí)(由于沒有連接)出現(xiàn)錯(cuò)誤。線程企圖重新連接前將睡眠master-connect-retry秒。

Reconnecting after a failed master event read
線程正嘗試重新連接主服務(wù)器。當(dāng)連接重新建立后,狀態(tài)變?yōu)閃aiting for master to send event。

Waiting for the slave SQL thread to free enough relay log space
正使用一個(gè)非零relay_log_space_limit值,中繼日志已經(jīng)增長(zhǎng)到其組合大小超過該值。I/O線程正等待直到SQL線程處理中繼日志內(nèi)容并刪除部分中繼日志文件來釋放足夠的空間。

Waiting for slave mutex on exit
線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)。

3.復(fù)制從SQL線程狀態(tài)

復(fù)制代碼 代碼如下:

Reading event from the relay log
線程已經(jīng)從中繼日志讀取一個(gè)事件,可以對(duì)事件進(jìn)行處理了。

Has read all relay log; waiting for the slave I/O thread to update it
線程已經(jīng)處理了中繼日志文件中的所有事件,現(xiàn)在正等待I/O線程將新事件寫入中繼日志。

Waiting for slave mutex on exit
線程停止時(shí)發(fā)生的一個(gè)很簡(jiǎn)單的狀態(tài)。

三、復(fù)制傳遞和狀態(tài)文件

從服務(wù)器靠中繼日志來接收從主服務(wù)器上傳回來的日志。并依靠狀態(tài)文件來記錄已經(jīng)從主服務(wù)器接收了哪些日志,已經(jīng)恢復(fù)了哪些日志。

中繼日志與二進(jìn)制日志的格式相同,并且可以用mysqlbinlog讀取。SQL線程執(zhí)行完中繼日志中的所有事件并且不再需要之后,立即自動(dòng)刪除它??梢圆捎猫Crelay-log和–relay-log-index服務(wù)器選項(xiàng)覆蓋默認(rèn)中繼日志和索引文件名。其中索引文件名的作用是記錄目前正在使用中繼日志。

在下面的條件下將創(chuàng)建新的中繼日志:
1.每次I/O線程啟動(dòng)時(shí)創(chuàng)建一個(gè)新的中繼日志。
2.當(dāng)日志被刷新時(shí);例如,用FLUSH LOGS或mysqladmin flush-logs。
3.當(dāng)當(dāng)前的中繼日志文件變得太大時(shí)?!疤蟆焙x的確定方法:
max_relay_log_size,如果max_relay_log_size > 0
max_binlog_size,如果max_relay_log_size = 0
狀態(tài)文件名默認(rèn)為master.info和relay-log.info。其中IO線程更新master.info文件,SQL線程更新relay-log.info文件。
文件中的行和SHOW SLAVE STATUS顯示的列的對(duì)應(yīng)關(guān)系為:
master.info文件:

復(fù)制代碼 代碼如下:
行 描述
1 文件中的行號(hào)
2 Master_Log_File
3 Read_Master_Log_Pos
4 Master_Host
5 Master_User
6 密碼(不由SHOW SLAVE STATUS顯示)
7 Master_Port
8 Connect_Retry
9 Master_SSL_Allowed
10 Master_SSL_CA_File
11 Master_SSL_CA_Path
12 Master_SSL_Cert
13 Master_SSL_Cipher
14 Master_SSL_Key

relay-log.info文件:

復(fù)制代碼 代碼如下:
行 描述
1 Relay_Log_File
2 Relay_Log_Pos
3 Relay_Master_Log_File
4 Exec_Master_Log_Pos

當(dāng)備份從服務(wù)器的數(shù)據(jù)時(shí),你還應(yīng)備份這兩個(gè)小文件以及中繼日志文件。它們用來在恢復(fù)從服務(wù)器的數(shù)據(jù)后繼續(xù)進(jìn)行復(fù)制。如果丟失了中繼日志但仍然有 relay-log.info文件,你可以通過檢查該文件來確定SQL線程已經(jīng)執(zhí)行的主服務(wù)器中二進(jìn)制日志的程度。然后可以用 Master_Log_File和Master_LOG_POS選項(xiàng)執(zhí)行CHANGE MASTER TO來告訴從服務(wù)器重新從該點(diǎn)讀取二進(jìn)制日志。當(dāng)然,要求二進(jìn)制日志仍然在主服務(wù)器上。所以最好建議將自動(dòng)刪除中繼日志的特性關(guān)閉,手工寫shell角本來防止空間滿的問題。

四、復(fù)制的配置步驟

1.創(chuàng)建專門用于復(fù)制的用戶(建議這樣做),從服務(wù)器采用該帳戶登陸主服務(wù)器:

復(fù)制代碼 代碼如下:

GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY 'logzgh' ;


如果你計(jì)劃從從屬服務(wù)器主機(jī)使用LOAD TABLE FROM MASTER或LOAD DATA FROM MASTER語(yǔ)句,你需要授予該賬戶其它權(quán)限:

授予賬戶SUPER和RELOAD全局權(quán)限。
為所有想要裝載的表授予SELECT權(quán)限。任何該 賬戶不能SELECT的主服務(wù)器上的表被LOAD DATA FROM MASTER忽略掉。

2.將數(shù)據(jù)庫(kù)文件移到從服務(wù)器上

情況一:若只用到MyISAM表

復(fù)制代碼 代碼如下:
mysql> FLUSH TABLES WITH READ LOCK;

(刷新所有表并且阻止其它寫入,不要退出該客戶端,以保持讀鎖有效。若退出,讀鎖就會(huì)釋放。)
比較簡(jiǎn)單的辦法就是把數(shù)據(jù)目錄打包壓縮。

復(fù)制代碼 代碼如下:
$ tar -cvf /home/mysql/snapshot.tar ./data (在master上)
$ tar -xvf /home/mysql/snapshot.tar (在slave上)

可能不需要同步 mysql 數(shù)據(jù)庫(kù),因?yàn)樵趕lave上的權(quán)限表和master不一樣。這時(shí),解開壓縮包的時(shí)候要排除它。
同時(shí)在壓縮包中也不要包含任何日志文件,和狀態(tài)文件master.info、relay-log.info。

復(fù)制代碼 代碼如下:
mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000058 | 45036137 | | |
+——————+———-+————–+——————+

mysql> UNLOCK TABLES;

情況二:若用到InnoDB表

方法一:使用InnoDB Hot Backup工具。它無(wú)需在master上請(qǐng)求任何鎖就能做到快照的一致性,并且在后面中在slave上要用到的快照中已經(jīng)記錄了日志文件名以及偏移位置。

方法二:記錄當(dāng)前日志文件及偏移位置,在master關(guān)閉前執(zhí)行:

復(fù)制代碼 代碼如下:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;


盡快記下顯示結(jié)果中的日志文件及偏移位置。然后,在不解鎖的情況下關(guān)閉master,確保master上的快照和記錄的結(jié)果一致。

關(guān)閉master服務(wù)器,$ mysqladmin -u root shutdown
拷貝 InnoDB 數(shù)據(jù)文件,日志文件,以及表結(jié)構(gòu)定義文件(.frm文件)。

情況三:可以同時(shí)用于MyISAM和InnoDB表
在master上做SQL轉(zhuǎn)儲(chǔ)而無(wú)需如上所述備份二進(jìn)制日志。運(yùn)行mysqldump –master-data命令,然后把結(jié)果文件轉(zhuǎn)儲(chǔ)到slave上。
不過,這比拷貝二進(jìn)制日志慢點(diǎn)。

3.修改my.cnf文件
在master上my.cnf文件:(重啟生效)

復(fù)制代碼 代碼如下:
[mysqld]
log_bin
server_id=1 (值是 1 到 2^32-1 之間的正整數(shù))

在slave上my.cnf文件:
復(fù)制代碼 代碼如下:
[mysqld]
server_id=2 (ID必須和master的ID不同。若有多個(gè)slave,則每個(gè)slave都必須有唯一的id。)

配置slave的擴(kuò)展選項(xiàng)

復(fù)制代碼 代碼如下:
master_host=db-master.mycompany.com
master_port=3306
master_user=rep
master_password=freitag
master_connect_retry=60 (若master宕機(jī)或者slave連接斷開,slave會(huì)定期嘗試連接到master上,重試的間隔由該選項(xiàng)來控制,默認(rèn)值是60秒。)
report_host=db-slave.mycompany.com
slave_net_timeout=3600 (slave默認(rèn)會(huì)在3600秒后,若還沒收到來自master的數(shù)據(jù),則會(huì)當(dāng)作網(wǎng)絡(luò)斷開的情況來處理。)

服務(wù)器認(rèn)為master.info的優(yōu)先級(jí)比配置文件my.cnf高,
第一次啟動(dòng)slave時(shí),master.info不存在,它從my.cnf中讀取選項(xiàng)值,然后把它們保存在master.info中。
下次重啟slave時(shí),它只讀取master.info的內(nèi)容,而不會(huì)讀取my.cnf中的選項(xiàng)值。
想要使用不同的選項(xiàng)值,可以刪除master.info后重啟slave,或者使用CHANGE MASTER TO語(yǔ)句(推薦)重置選項(xiàng)值。

4.啟動(dòng)從服務(wù)器線程

復(fù)制代碼 代碼如下:
mysqld_safe –user=mysql –skip-slave-start & (啟動(dòng)MySQL服務(wù)器,但不啟動(dòng)slave)
設(shè)置master_log_file等參數(shù)
mysql> CHANGE MASTER TO MASTER_HOST='qa-sandbox-1′,
MASTER_USER='rep',
MASTER_PASSWORD='logzgh',
MASTER_LOG_FILE='mysql-bin.000007′,
MASTER_LOG_POS=471632;

mysql> START SLAVE;


執(zhí)行這些程序后,從服務(wù)器應(yīng)連接主服務(wù)器,并補(bǔ)充自從快照以來發(fā)生的任何更新。
如果你忘記設(shè)置主服務(wù)器的server-id值,從服務(wù)器不能連接主服務(wù)器。

注釋:為了保證事務(wù)InnoDB復(fù)制設(shè)置的最大可能的耐受性和一致性,
應(yīng)在主服務(wù)器的my.cnf文件中使用innodb_flush_log_at_trx_commit=1和sync-binlog=1。

復(fù)制代碼 代碼如下:

mysql> show variables; (檢查是否read-only,該選項(xiàng)令slave除了slave線程或者擁有SUPER權(quán)限用戶之外的都不能更新數(shù)據(jù),確保slave不會(huì)接受來自其他客戶端的更新。)
mysql> show processlist; (檢查是否slave-start)

在啟動(dòng)mysql的同時(shí)啟動(dòng)slave:

復(fù)制代碼 代碼如下:
mysqld_safe –user=mysql –read-only & (啟動(dòng)MySQL服務(wù)器,同時(shí)啟動(dòng)slave的I/O線程)

mysql> SHOW SLAVE STATUSG;

5.切換slave為master,在slave上:

復(fù)制代碼 代碼如下:
mysql> STOP SLAVE;
mysql> RESET MASTER;


五.復(fù)制啟動(dòng)選項(xiàng)

–read_only
該選項(xiàng)讓從服務(wù)器只允許來自從服務(wù)器線程或具有SUPER權(quán)限的用戶的更新??梢源_保從服務(wù)器不接受來自客戶的更新。

–replicate_do_db=db_name
告訴從服務(wù)器只做默認(rèn)數(shù)據(jù)庫(kù)(由USE所選擇)為db_name的語(yǔ)句的復(fù)制。要指定多個(gè)數(shù)據(jù)庫(kù),應(yīng)多次使用該選項(xiàng),每個(gè)數(shù)據(jù)庫(kù)使用一次。請(qǐng)注意不復(fù)制跨數(shù)據(jù)庫(kù)的語(yǔ)句

–replicate_do_table=db_name.tbl_name
告訴從服務(wù)器線程只做對(duì)指定表的復(fù)制。要指定多個(gè)表,應(yīng)多次使用該選項(xiàng),每個(gè)表使用一次。同–replicate-do-db對(duì)比,允許跨數(shù)據(jù)庫(kù)更新。

–replicate_ignore_db=db_name
告訴從服務(wù)器不要復(fù)制默認(rèn)數(shù)據(jù)庫(kù)(由USE所選擇)為db_name的語(yǔ)句。要想忽略多個(gè)數(shù)據(jù)庫(kù),應(yīng)多次使用該選項(xiàng),每個(gè)數(shù)據(jù)庫(kù)使用一次。

–replicate-ignore-table=db_name.tbl_name
告訴從服務(wù)器線程不要復(fù)制更新指定表的任何語(yǔ)句(即使該語(yǔ)句可能更新其它的表)。要想忽略多個(gè)表,應(yīng)多次使用該選項(xiàng),每個(gè)表使用一次。

–replicate_wild_do_table=db_name.tbl_name
告訴從服務(wù)器線程限制復(fù)制更新的表匹配指定的數(shù)據(jù)庫(kù)和表名模式的語(yǔ)句。模式可以包含‘%'和‘_'通配符,與LIKE模式匹配操作符具有相同的含義。要指定多個(gè)表,應(yīng)多次使用該選項(xiàng),每個(gè)表使用一次。該選項(xiàng)可以跨數(shù)據(jù)庫(kù)進(jìn)行更新。

–replicate_wild_ignore_table=db_name.tbl_name
告訴從服務(wù)器線程不要復(fù)制表匹配給出的通配符模式的語(yǔ)句。要想忽略多個(gè)表,應(yīng)多次使用該選項(xiàng),每個(gè)表使用一次。該選項(xiàng)可以跨數(shù)據(jù)庫(kù)進(jìn)行更新。

–replicate_rewrite_db=from_name->to_name
告訴從服務(wù)器如果默認(rèn)數(shù)據(jù)庫(kù)(由USE所選擇)為主服務(wù)器上的from_name,則翻譯為to_name。只影響含有表的語(yǔ)句

–report_host=slave_name
從服務(wù)器注冊(cè)過程中報(bào)告給主服務(wù)器的主機(jī)名或IP地址。該值出現(xiàn)在主服務(wù)器上SHOW SLAVE HOSTS的輸出中。如果不想讓從服務(wù)器自己在主服務(wù)器上注冊(cè),則不設(shè)置該值。

–report_port=slave_port
連接從服務(wù)器的TCP/IP端口號(hào),從服務(wù)器注冊(cè)過程中報(bào)告給主服務(wù)器。

–skip_slave_start
告訴從服務(wù)器當(dāng)服務(wù)器啟動(dòng)時(shí)不啟動(dòng)從服務(wù)器線程。使用START SLAVE語(yǔ)句在以后啟動(dòng)線程。

–slave_skip_errors=[err_code1,err_code2,… | all]
通常情況,當(dāng)出現(xiàn)錯(cuò)誤時(shí)復(fù)制停止,這樣給你一個(gè)機(jī)會(huì)手動(dòng)解決數(shù)據(jù)中的不一致性問題。該選項(xiàng)告訴從服務(wù)器SQL線程當(dāng)語(yǔ)句返回任何選項(xiàng)值中所列的錯(cuò)誤時(shí)繼續(xù)復(fù)制。
例如:
–slave-skip-errors=1062,1053
–slave-skip-errors=all

六、不停機(jī)配置復(fù)制的方法

方法一:

如果你在某時(shí)間點(diǎn)做過主服務(wù)器備份并且記錄了相應(yīng)快照的二進(jìn)制日志名和偏移量(通過SHOW MASTER STATUS命令的輸出),采用下面的步驟:

1. 確保從服務(wù)器分配了一個(gè)唯一的服務(wù)器ID號(hào)。
2. 將備份文件拷到從服務(wù)器上。
3. 在從服務(wù)器上執(zhí)行下面的語(yǔ)句,為每個(gè)選項(xiàng)填入適當(dāng)?shù)闹担?BR>

復(fù)制代碼 代碼如下:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='master_user_name',
-> MASTER_PASSWORD='master_pass',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;

4.在從服務(wù)器上執(zhí)行START SLAVE語(yǔ)句。

如果你沒有備份主服務(wù)器,這里是一個(gè)創(chuàng)建備份的快速程序。所有步驟都應(yīng)該在主服務(wù)器主機(jī)上執(zhí)行。

1. 發(fā)出該語(yǔ)句:

復(fù)制代碼 代碼如下:
mysql> FLUSH TABLES WITH READ LOCK;

2. 仍然加鎖時(shí),執(zhí)行該命令(或它的變體):
復(fù)制代碼 代碼如下:
shell> tar zcf /tmp/backup.tar.gz /var/lib/mysql

并拷到從服務(wù)器上。
3. 發(fā)出該語(yǔ)句并且確保記錄了以后用到的輸出:
復(fù)制代碼 代碼如下:
mysql>SHOW MASTER STATUS;

4. 釋放鎖:
復(fù)制代碼 代碼如下:
mysql> UNLOCK TABLES;

方法二:

一個(gè)可選擇的方法是,轉(zhuǎn)儲(chǔ)主服務(wù)器的SQL來代替前面步驟中的二進(jìn)制復(fù)制。要這樣做,你可以在主服務(wù)器上使用mysqldump –master-data,以后裝載SQL轉(zhuǎn)儲(chǔ)到到你的從服務(wù)器。然而,這比進(jìn)行二進(jìn)制復(fù)制速度慢。

七、其他

1.不能從使用新二進(jìn)制日志格式的主服務(wù)器向使用舊二進(jìn)制日志格式的從服務(wù)器復(fù)制。

2.升級(jí)從服務(wù)器時(shí),應(yīng)先關(guān)閉從服務(wù)器,升級(jí)到相應(yīng)5.1.x版本,然后重啟從服務(wù)器并重新開始復(fù)制。5.1版本的從服務(wù)器能夠讀取升級(jí)前寫入的舊的中繼日志并執(zhí)行日志中包含的語(yǔ)句。升級(jí)后從服務(wù)器創(chuàng)建的中繼日志為5.1格式。

3.必須在主服務(wù)器和從服務(wù)器上總是使用相同的全局字符集和校對(duì)規(guī)則(–default-character-set、–default- collation)。否則,會(huì)在從服務(wù)器上遇到復(fù)制鍵值錯(cuò)誤,因?yàn)樵谥鞣?wù)器的字符集中被認(rèn)為是唯一的鍵值在從服務(wù)器的字符集中可能不是唯一的。

4.Q:從服務(wù)器需要始終連接到主服務(wù)器嗎?
A:不,不需要。從服務(wù)器可以宕機(jī)或斷開連接幾個(gè)小時(shí)甚至幾天,重新連接后獲得更新信息。

5.Q:我怎樣知道從服務(wù)器與主服務(wù)器的最新比較? 換句話說,我怎樣知道從服務(wù)器復(fù)制的最后一個(gè)查詢的日期?
A:你可以查看SHOW SLAVE STATUS語(yǔ)句的Seconds_Behind_Master列的結(jié)果。

6. Q:我怎樣強(qiáng)制主服務(wù)器阻塞更新直到從服務(wù)器同步?
A:使用下面的步驟:
1. 在主服務(wù)器上,執(zhí)行這些語(yǔ)句:

復(fù)制代碼 代碼如下:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

記錄SHOW語(yǔ)句的輸出的日志名和偏移量。這些是復(fù)制坐標(biāo)。

2.在從服務(wù)器上,發(fā)出下面的語(yǔ)句,其中Master_POS_WAIT()函數(shù)的參量是前面步驟中的得到的復(fù)制坐標(biāo)值:
mysql> SELECT MASTER_POS_WAIT('log_name', log_offset);
SELECT語(yǔ)句阻塞直到從服務(wù)器達(dá)到指定的日志文件和偏移量。此時(shí),從服務(wù)器與主服務(wù)器同步,語(yǔ)句返回。

3.在主服務(wù)器上,發(fā)出下面的語(yǔ)句允許主服務(wù)器重新開始處理更新:

復(fù)制代碼 代碼如下:
mysql> UNLOCK TABLES;

7.Q:怎樣通過復(fù)制來提高系統(tǒng)的性能?
A:你應(yīng)將一個(gè)服務(wù)器設(shè)置為主服務(wù)器并且將所有寫指向該服務(wù)器。然后根據(jù)預(yù)算配置盡可能多的從服務(wù)器以及??臻g,并且在主服務(wù)器和從服務(wù)器之間分發(fā)讀取操作。你也可以用–skip-innodb、–skip-bdb、–low-priority-updates以及–delay-key- write=ALL選項(xiàng)啟動(dòng)從服務(wù)器,以便在從服務(wù)器端提高速度。在這種情況下,為了提高速度,從服務(wù)器使用非事務(wù)MyISAM表來代替InnoDB和 BDB表。

相關(guān)文章

最新評(píng)論