主從部署文檔
主服務器IP: 192.168.8.35
從服務器IP: 192.168.8.130
1.主服務器和從服務器上安裝的MySQL最好版本一致,從版本可以高於主.
mysql> select version();
+------------+
| version() |
+------------+
| 5.5.12-log |
+------------+
1 row in set (0.00 sec)
2.在主服務器上爲從服務器設置一個連接賬戶
mysql> grant replication slave,replication client on *.* to rep@"192.168.8.130" identified by "rep";
3. 執行FLUSH TABLES WITH READ LOCK 進行鎖表
mysql> FLUSH TABLES WITH READ LOCK;
4. 讓客戶程序保持運行,發出FLUSH TABLES語句讓讀鎖定保持有效。(如果退出客戶程序,鎖被釋放)。進入主服務器的數據目錄,然後執行命令:
在主上操作:
shell> tar zcf /tmp/mysql.tgz /data/mysql/data
shell> scp /tmp/mysql.tgz 192.168.8.130:/tmp/
在從上操作:
shell> tar zxf /tmp/mysql.tgz /data/mysql/data
讀取主服務器上當前的二進制日誌名(File)和偏移量值(Position),並記錄下來:
mysql > SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000011 | 349 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.03 sec)
取得快照並記錄日誌名和偏移量後(POS),可以在主服務器上重新啓用寫活動:
mysql> UNLOCK TABLES;
5. 確保主服務器主機上my.cnf文件的[mysqld]部分包括一個log_bin選項
[mysqld]
log_bin=mysql-bin
server-id=1
6. 停止用於從服務器的服務器並在其my.cnf文件中添加下面的行:
[mysqld]
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
server-id=2
7.如果對主服務器的數據進行二進制備份,啓動從服務器之前將它複製到從服務器的數據目錄中。
確保對這些文件和目錄的權限正確。服務器 MySQL運行的用戶必須能夠讀寫文件,如同在主服務器上一樣。
8. 用--skip-slave-start選項啓動從服務器,以便它不立即嘗試連接主服務器。(可選操作)
9. 在從服務器上執行下面的語句:
change master to MASTER_HOST='192.168.8.35', MASTER_USER='rep', MASTER_PASSWORD='rep', MASTER_LOG_FILE='binlog.000011', MASTER_LOG_POS=349;
9. 啓動從服務器線程:
mysql> START SLAVE;
10.驗證部署是否成功
mysql> SHOW slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.8.35
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000011
Read_Master_Log_Pos: 349
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 250
Relay_Master_Log_File: binlog.000011
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,test,information_schema
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: 349
Relay_Log_Space: 399
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:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.03 sec)
當Slave_IO_Running和Slave_SQL_Running都顯示Yes的時候,表示同步成功。
二、切換文檔
1.確保從服務器已經處理了中繼日誌中的所有語句。
mysql> stop slave IO_THREAD
2.然後檢查SHOW PROCESSLIST語句的輸出,直到你看到Has read all relay log。
mysql> show processlist;
3.當從服務器都執行完這些,它們可以被重新配置爲一個新的設置。
4.在被提升爲主服務器的從服務器上,發出 STOP SLAVE和RESET MASTER和RESET SLAVE操作。
mysql> stop slave;
mysql> reset master;
mysql> reset slave;
5. 然後重啓mysql服務
Shell> service mysqld restart
6.在主服務器上RESET MASTER。然後CHANGE MASTER TO MASTER_HOST='192.168.8.130',MASTER_USER='rep',MASTER_PASSWORD=rep';切換完成。
mysql> reset master;
mysql>change master to MASTER_HOST='192.168.8.130', MASTER_USER='rep', MASTER_PASSWORD='rep';