


配置MySQL主從復制(Replication)服務
如果你遇到了類似上面的問題,你就可 以使用建立 MySQL 主從服務器的復制方式來解決,MySQL 的復制有以下幾個優勢:主服務器/從服務器設置增加了健壯性,主服務器出現問題時,你可以切換到從服務器繼續提供服務。通過在從服務器上執行查詢操作來降 低客戶查詢的負荷,可以得到更好的客戶響應時間,但是不要同時在主從服務器上進行更新,這樣可能引起沖突。使用復制的另一個好處是可以使用一個從服務器執 行備份,而不會干擾主服務器。在備份過程中主服務器可以繼續處理更新。
MySQL 復制的原理:
MySQL使用3個 線程來執行復制功能,其中1個在主服務器上,另兩個在從服務器上。當發出START SLAVE時,從服務器創建一個I/O線程,以連接主服務器并讓主服務器發送二進制日志。主服務器創建一個線程將二進制日志中的內容發送到從服務器。從服 務器I/O線程讀取主服務器Binlog Dump線程發送的內容并將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日志。第3個線程是SQL線程,從服務器使用此線程讀取中繼日志并執行日 志中包含的更新。SHOW PROCESSLIST語句可以查詢在主服務器上和從服務器上發生的關于復制的信息。
默認中繼日志使用 host_name-relay-bin.nnnnnn形式的文件名,其中host_name是從服務器主機名,nnnnnn是序列號。用連續序列號來創 建連續中繼日志文件,從000001開始。從服務器跟蹤中繼日志索引文件來識別目前正使用的中繼日志。默認中繼日志索引文件名為 host_name-relay-bin.index。在默認情況,這些文件在從服務器的數據目錄中被創建。中繼日志與二進制日志的格式相同,并且可以用 mysqlbinlog讀取。當SQL線程執行完中繼日志中的所有事件后,中繼日志將會被自動刪除。
設置 MySQL 主從復制:
注意:MySQL 主從服務器最好使用相同的軟件版本,以避免不不可預期的故障。
軟件環境:系統 rhel4u8,MySQL-5.1.44,
主服務器ip:192.168.0.1 hostname:node1
從服務器ip:192.168.0.2 hostname:node2
設置主服務器
1、編輯 /etc/hosts (此步非必須)
增加以下內容:
192.168.0.2 node2
2、在主服務器上建立一個為從服務器進行復制使用的用戶。該賬戶必須授予 REPLICATION SLAVE 權限,由于僅僅是進行復制使用所以不需要再授予任何其它權限。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'192.168.0.2' IDENTIFIED BY 'slavepasswd';
mysql> FLUSH PRIVILEGES;
3、編輯主服務器的配置文件:/etc/my.cnf的[ mysqld ] 部分:
server-id = 本機數據庫 ID 標示,該部分還應有一個server-id=Master_id選項,其中master_id必須為1到232之間的一個正整數值
log-bin = 二進制日志的位置和名稱
binlog-do-db = 需要備份的數據庫名,如果備份多個數據庫,重復設置這個選項即可
binlog-ignore-db = 不需要備份的數據庫苦命,如果備份多個數據庫,重復設置這個選項即可
我的主服務器設置為:
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、主服務器執行FLUSH TABLES WITH READ LOCK語句清空所有表和塊寫入語句:
mysql> FLUSH TABLES WITH READ LOCK;
5、保持mysql客戶端程序不要退出。開啟另一個終端對主服務器數據目錄做備份。
[root@node1 ~]# cd /usr/local/mysql/data
[root@node1 ~]# tar -zcvf /tmp/mysql-wapnews.tar.gz ./wapnews
把備份完畢的數據庫備份復制到從服務器上。
6、當FLUSH TABLES WITH READ LOCK所置讀鎖定有效時(即mysql客戶端程序不退出),讀取主服務器上當前的二進制日志名和偏移量值:
mysql > SHOW MASTER STATUS;
+-----------------------------+---------------+-------------------------+--------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------------+---------------+-------------------------+--------------------------------------------+
| mysql-bin.000001 | 73 | wapnews | test,mysql,information_schema |
+------------------------------+---------------+-------------------------+--------------------------------------------+
File列顯示日志名,而Position顯示偏移量。在該例子中,二進制日志值為mysql-bin.000001,偏移量為73。記錄該值。以后設置從服務器時需要使用這些值。它們表示復制坐標,從服務器應從該點開始從主服務器上進行新的更新。
取得快照并記錄日志名和偏移量后,回到前一中端重新啟用寫活動:
mysql> UNLOCK TABLES;
設置從服務器:
1、編輯/etc/hosts (此步非必要)
增加以下內容:
192.168.0.1 node1
2、停止從服務器上的mysqld服務并編輯從服務器的配置文件:/etc/my.cnf 的[ mysqld ] 部分:
server-id = 本機數據庫 ID 標示,該部分還應有一個server-id=Master_id選項,其中master_id必須為1到232之間的一個正整數值
[root@node2 ~]# service mysqld stop
我的從服務器配置
server-id=2
3、將主服務器數據庫備份恢復到從服務器的數據目錄中。確保對這些文件和目錄的權限正確。服務器 MySQL運行的用戶必須能夠讀寫文件,如同在主服務器上一樣。
[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、啟動從服務器。在從服務器上執行下面的語句,用你的系統的實際值替換選項值:
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;
我的從服務器設置:
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、啟動從服務器線程:
mysql> START SLAVE;
執行這些程序后,從服務器應連接主服務器,并補充自從快照以來發生的任何更新。
檢查主從復制是否正常運行
在從服務器上運行 show processlist 命令,檢查是否啟動兩個復制進程。
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)
在從服務器上運行 show slave status 命令,檢查復制進程是否正確。
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)
上面出現: Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 表示復制正常,如果有一個顯示是NO,請檢查以上的主從設置步驟是否正確。如果出現復制錯誤,從服務器的錯誤日志(HOSTNAME.err)中也會出現 錯誤消息。出處:http://7056824.blog.51cto.com/69854/400642
注意:從服務器復制時,會在其數據目錄中發現文件master.info和HOSTNAME-relay- log.info。狀態文件保存在硬盤上,從服務器關閉時不會丟失。下次從服務器啟動時,讀取這些文件以確定它已經從主服務器讀取了多少二進制日志,以及 處理自己的中繼日志的程度。不要移除或編輯這些文件,除非你確切知你正在做什么并完全理解其意義。即使這樣,最好是使用CHANGE MASTER TO語句。
關鍵字:服務器、MySQL、日志
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解