配置MySQL主從復(fù)制(Replication)服務(wù)
如果你遇到了類似上面的問(wèn)題,你就可 以使用建立 MySQL 主從服務(wù)器的復(fù)制方式來(lái)解決,MySQL 的復(fù)制有以下幾個(gè)優(yōu)勢(shì):主服務(wù)器/從服務(wù)器設(shè)置增加了健壯性,主服務(wù)器出現(xiàn)問(wèn)題時(shí),你可以切換到從服務(wù)器繼續(xù)提供服務(wù)。通過(guò)在從服務(wù)器上執(zhí)行查詢操作來(lái)降 低客戶查詢的負(fù)荷,可以得到更好的客戶響應(yīng)時(shí)間,但是不要同時(shí)在主從服務(wù)器上進(jìn)行更新,這樣可能引起沖突。使用復(fù)制的另一個(gè)好處是可以使用一個(gè)從服務(wù)器執(zhí) 行備份,而不會(huì)干擾主服務(wù)器。在備份過(guò)程中主服務(wù)器可以繼續(xù)處理更新。
MySQL 復(fù)制的原理:
MySQL使用3個(gè) 線程來(lái)執(zhí)行復(fù)制功能,其中1個(gè)在主服務(wù)器上,另兩個(gè)在從服務(wù)器上。當(dāng)發(fā)出START SLAVE時(shí),從服務(wù)器創(chuàng)建一個(gè)I/O線程,以連接主服務(wù)器并讓主服務(wù)器發(fā)送二進(jìn)制日志。主服務(wù)器創(chuàng)建一個(gè)線程將二進(jìn)制日志中的內(nèi)容發(fā)送到從服務(wù)器。從服 務(wù)器I/O線程讀取主服務(wù)器Binlog Dump線程發(fā)送的內(nèi)容并將該數(shù)據(jù)拷貝到從服務(wù)器數(shù)據(jù)目錄中的本地文件中,即中繼日志。第3個(gè)線程是SQL線程,從服務(wù)器使用此線程讀取中繼日志并執(zhí)行日 志中包含的更新。SHOW PROCESSLIST語(yǔ)句可以查詢?cè)谥鞣⻊?wù)器上和從服務(wù)器上發(fā)生的關(guān)于復(fù)制的信息。
默認(rèn)中繼日志使用 host_name-relay-bin.nnnnnn形式的文件名,其中host_name是從服務(wù)器主機(jī)名,nnnnnn是序列號(hào)。用連續(xù)序列號(hào)來(lái)創(chuàng) 建連續(xù)中繼日志文件,從000001開始。從服務(wù)器跟蹤中繼日志索引文件來(lái)識(shí)別目前正使用的中繼日志。默認(rèn)中繼日志索引文件名為 host_name-relay-bin.index。在默認(rèn)情況,這些文件在從服務(wù)器的數(shù)據(jù)目錄中被創(chuàng)建。中繼日志與二進(jìn)制日志的格式相同,并且可以用 mysqlbinlog讀取。當(dāng)SQL線程執(zhí)行完中繼日志中的所有事件后,中繼日志將會(huì)被自動(dòng)刪除。
設(shè)置 MySQL 主從復(fù)制:
注意:MySQL 主從服務(wù)器最好使用相同的軟件版本,以避免不不可預(yù)期的故障。
軟件環(huán)境:系統(tǒng) rhel4u8,MySQL-5.1.44,
主服務(wù)器ip:192.168.0.1 hostname:node1
從服務(wù)器ip:192.168.0.2 hostname:node2
設(shè)置主服務(wù)器
1、編輯 /etc/hosts (此步非必須)
增加以下內(nèi)容:
192.168.0.2 node2
2、在主服務(wù)器上建立一個(gè)為從服務(wù)器進(jìn)行復(fù)制使用的用戶。該賬戶必須授予 REPLICATION SLAVE 權(quán)限,由于僅僅是進(jìn)行復(fù)制使用所以不需要再授予任何其它權(quán)限。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'192.168.0.2' IDENTIFIED BY 'slavepasswd';
mysql> FLUSH PRIVILEGES;
3、編輯主服務(wù)器的配置文件:/etc/my.cnf的[ mysqld ] 部分:
server-id = 本機(jī)數(shù)據(jù)庫(kù) ID 標(biāo)示,該部分還應(yīng)有一個(gè)server-id=Master_id選項(xiàng),其中master_id必須為1到232之間的一個(gè)正整數(shù)值
log-bin = 二進(jìn)制日志的位置和名稱
binlog-do-db = 需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
binlog-ignore-db = 不需要備份的數(shù)據(jù)庫(kù)苦命,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
我的主服務(wù)器設(shè)置為:
server-id = 1
log-bin=/usr/local/mysql/data/mysql-bin.000001
binlog-do-db = wapnews
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
4、主服務(wù)器執(zhí)行FLUSH TABLES WITH READ LOCK語(yǔ)句清空所有表和塊寫入語(yǔ)句:
mysql> FLUSH TABLES WITH READ LOCK;
5、保持mysql客戶端程序不要退出。開啟另一個(gè)終端對(duì)主服務(wù)器數(shù)據(jù)目錄做備份。
[root@node1 ~]# cd /usr/local/mysql/data
[root@node1 ~]# tar -zcvf /tmp/mysql-wapnews.tar.gz ./wapnews
把備份完畢的數(shù)據(jù)庫(kù)備份復(fù)制到從服務(wù)器上。
6、當(dāng)FLUSH TABLES WITH READ LOCK所置讀鎖定有效時(shí)(即mysql客戶端程序不退出),讀取主服務(wù)器上當(dāng)前的二進(jìn)制日志名和偏移量值:
mysql > SHOW MASTER STATUS;
+-----------------------------+---------------+-------------------------+--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------------+---------------+-------------------------+--------------------------------------------+
| mysql-bin.000001 | 73 | wapnews | test,mysql,information_schema |
+------------------------------+---------------+-------------------------+--------------------------------------------+
File列顯示日志名,而Position顯示偏移量。在該例子中,二進(jìn)制日志值為mysql-bin.000001,偏移量為73。記錄該值。以后設(shè)置從服務(wù)器時(shí)需要使用這些值。它們表示復(fù)制坐標(biāo),從服務(wù)器應(yīng)從該點(diǎn)開始從主服務(wù)器上進(jìn)行新的更新。
取得快照并記錄日志名和偏移量后,回到前一中端重新啟用寫活動(dòng):
mysql> UNLOCK TABLES;
設(shè)置從服務(wù)器:
1、編輯/etc/hosts (此步非必要)
增加以下內(nèi)容:
192.168.0.1 node1
2、停止從服務(wù)器上的mysqld服務(wù)并編輯從服務(wù)器的配置文件:/etc/my.cnf 的[ mysqld ] 部分:
server-id = 本機(jī)數(shù)據(jù)庫(kù) ID 標(biāo)示,該部分還應(yīng)有一個(gè)server-id=Master_id選項(xiàng),其中master_id必須為1到232之間的一個(gè)正整數(shù)值
[root@node2 ~]# service mysqld stop
我的從服務(wù)器配置
server-id=2
3、將主服務(wù)器數(shù)據(jù)庫(kù)備份恢復(fù)到從服務(wù)器的數(shù)據(jù)目錄中。確保對(duì)這些文件和目錄的權(quán)限正確。服務(wù)器 MySQL運(yùn)行的用戶必須能夠讀寫文件,如同在主服務(wù)器上一樣。
[root@node2 ~]# cd /usr/local/mysql/data
[root@node2 ~]# tar -zxvf mysql-wapnews.tar.gz
[root@node2 ~]# chown -R mysql:mysql /usr/local/mysql/data/wapnews
4、啟動(dòng)從服務(wù)器。在從服務(wù)器上執(zhí)行下面的語(yǔ)句,用你的系統(tǒng)的實(shí)際值替換選項(xiàng)值:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
我的從服務(wù)器設(shè)置:
mysql> change master to
-> master_host='192.168.0.1',
-> master_user='replication',
-> master_password='slavepass',
-> master_port=3306
-> master_log_file='mysql-bin.000001',
-> master_log_pos=73,
-> master_connect_retry=30;
5、啟動(dòng)從服務(wù)器線程:
mysql> START SLAVE;
執(zhí)行這些程序后,從服務(wù)器應(yīng)連接主服務(wù)器,并補(bǔ)充自從快照以來(lái)發(fā)生的任何更新。
檢查主從復(fù)制是否正常運(yùn)行
在從服務(wù)器上運(yùn)行 show processlist 命令,檢查是否啟動(dòng)兩個(gè)復(fù)制進(jìn)程。
mysql> show processlist \G;
*************************** 1. row ***************************
Id: 44
User: system user
Host:
db: NULL
Command: Connect
Time: 490
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 45
User: system user
Host:
db: NULL
Command: Connect
Time: 390
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL
3 rows in set (0.00 sec)
在從服務(wù)器上運(yùn)行 show slave status 命令,檢查復(fù)制進(jìn)程是否正確。
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.1
Master_User: replication
Master_Port: 3306
Connect_Retry: 30
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 73
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 410
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
1 row in set (0.00 sec)
上面出現(xiàn): Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 表示復(fù)制正常,如果有一個(gè)顯示是NO,請(qǐng)檢查以上的主從設(shè)置步驟是否正確。如果出現(xiàn)復(fù)制錯(cuò)誤,從服務(wù)器的錯(cuò)誤日志(HOSTNAME.err)中也會(huì)出現(xiàn) 錯(cuò)誤消息。出處:http://7056824.blog.51cto.com/69854/400642
注意:從服務(wù)器復(fù)制時(shí),會(huì)在其數(shù)據(jù)目錄中發(fā)現(xiàn)文件master.info和HOSTNAME-relay- log.info。狀態(tài)文件保存在硬盤上,從服務(wù)器關(guān)閉時(shí)不會(huì)丟失。下次從服務(wù)器啟動(dòng)時(shí),讀取這些文件以確定它已經(jīng)從主服務(wù)器讀取了多少二進(jìn)制日志,以及 處理自己的中繼日志的程度。不要移除或編輯這些文件,除非你確切知你正在做什么并完全理解其意義。即使這樣,最好是使用CHANGE MASTER TO語(yǔ)句。
關(guān)鍵字:服務(wù)器、MySQL、日志
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解