標籤:mysql centos 主從複製
環境: centos6.5 mysql-5.6.22 master 192.168.3.11
centos6.5 mysql-56.22 slave 192.168.3.150
MySQL支援單向、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入二進位記錄檔,並維護記錄檔的一個索引以追蹤記錄檔迴圈。當一個從伺服器串連到主伺服器時,它通知主伺服器從伺服器在日誌中讀取的最後一次成功更新的位置。從伺服器接收從那時起發生的任何更新,然後封鎖並等待主伺服器通知下一次更新。
為什麼使用主從複製?
1、主伺服器/從伺服器設定增加了健壯性。主伺服器出現問題時,你可以切換到從伺服器作為備份。
2、通過在主伺服器和從伺服器之間切分處理客戶查詢的負荷,可以得到更好的客戶回應時間。但是不要同時在主從伺服器上進行更新,這樣可能引起衝突。
3、使用複製的另一個好處是可以使用一個從伺服器執行備份,而不會干擾主伺服器。在備份過程中主伺服器可以繼續處理更新。
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線程執行完中繼日誌中的所有事件後,中繼日誌將會被自動刪除。
從伺服器在資料目錄中另外建立兩個狀態檔案--master.info和relay-log.info。狀態檔案儲存在硬碟上,從伺服器關閉時不會丟失。下次從伺服器啟動時,讀取這些檔案以確定它已經從主伺服器讀取了多少二進位日誌,以及處理自己的中繼日誌的程度。
第一步:安裝好mysql,源碼安裝,或者rpm包安裝或者yum安裝網路都有說明。
第二步:設定檔修改
1、修改主伺服器master:
#vi /etc/my.cnf
[mysqld]
log_bin=mysql_bin //[必須]啟用二進位日誌
server-id=222 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
2、修改從伺服器slave:
#vi /etc/my.cnf
[mysqld]
log_bin=mysql_bin //[必須]啟用二進位日誌
server_id=226 //[必須]伺服器唯一ID,預設是1,一般取IP最後一段
3、重啟兩台伺服器的mysql
service mysqld restart (使用源碼安裝,請將support-files/mysql.server複製到/etc/init.d/mysql 並用chkconfig --add mysql 添加)
第三步:在master添加授權帳號並授權給slave
#/usr/local/mysql/bin/mysql -u root -p 123456
mysql>GRANT REPLICATION SLAVE ON *.* to ‘rep1‘@‘192.168.3.150‘ identified by ‘123456‘; //一般不用root帳號,192.168.3.150是slave的ip也可以使用%代表所有ip都可以使用
第四步:登入主伺服器的mysql,查詢master的狀態
mysql> show master status\G
*************************** 1. row ***************************
File: mysql_bin.000006
Position: 2187
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
註:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化
第五步:配置從伺服器Slave
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘192.168.3.11‘,
-> MASTER_PORT=3306,
-> MASTER_USER=‘rep1‘,
-> MASTER_PASSWORD=‘123456‘,
-> MASTER_LOG_FILE=‘mysql_bin.000006‘,
-> MASTER_LOG_POS=2187;
Query OK, 0 rows affected, 2 warnings (0.05 sec)
第六步:檢查從伺服器複製功能狀態:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.3.11
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.000006
Read_Master_Log_Pos: 2187
Relay_Log_File: lvs-master-relay-bin.000002
Relay_Log_Pos: 1244
Relay_Master_Log_File: mysql_bin.000006
Slave_IO_Running: Yes //Yes表示串連正常
Slave_SQL_Running: Yes //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: 2187
Relay_Log_Space: 1422
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
.......................................
Auto_Position: 0
1 row in set (0.00 sec)
mysql>
第七步 常見錯誤
1:slave狀態 Slave_IO_Running: connecting
ping master ip
關閉防火牆 service iptables stop
關閉sentenforce 0
檢查pos是否一致
檢查授權使用者密碼
遠程連結master mysql mysql -u rep1 -p -h 192.168.3.11 顯示myql ERROR 1045 (28000): Access denied for user (using password: YES) 則刪除master密碼為空白的 帳號delete from user where user=‘‘; FLUSH PRIVILEGES;//重新整理資料庫
第八步、從伺服器複製時,會在其資料目錄中發現檔案master.info和HOSTNAME-relay-log.info。從伺服器使用這兩個檔案跟蹤已經處理了多少主伺服器的二進位日誌。
centos mysql-5.6.22 主從複製