mysql 主從復制change master to


CHANGE MASTER TO命令用於slave配置連接master的信息,例如master host、master port等。

關於CHANGE MASTER TO命令,總結幾點使用心得。

  • 在CHANGE MASTER TO之前,slave 的復制線程(I/O線程,SQL線程)必須停止,可以使用 STOP SLAVE 來停止。

  • 如果一些參數不指定,則其參數值使用以前設置的值。

  • 如果使用了參數RELAY_LOG_FILE 或者RELAY_LOG_POS,relay log文件會被保留, relay_log_purge全局變量被設置為0.
    否則,會刪除所有的relay log文件,創建一個新的relay log文件。

  • 在執行CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1使用gtid之前,
    gtid_mode必須開啟,否則會報錯。

  • 某個實例已經開啟GTID,如果指向新主庫,使用的命令
    CHANGE MASTER TO只帶MASTER_HOST、MASTER_PORT兩個參數,會根據GTID自動定位位置開始復制。

  • 5.7.4以前的版本,使用CHANGE MASTER TO時如果沒有帶參數MASTER_HEARTBEAT_PERIOD,默認會將MASTER_HEARTBEAT_PERIOD設置成slave_net_timeout的一半,並將Slave_received_heartbeats 設置為0.
    目前,只有使用RESET SLAVE才會將heartbeat周期重置。這個地方是有疑問的。

  • slave_net_timeout修改后, MASTER_HEARTBEAT_PERIOD不會自動跟着修改,需要重新change master to。

關於MASTER_HEARTBEAT_PERIOD的疑問

測試版本:5.7.21
兩種情況的測試:

  • CHANGE MASTER TO只帶MASTER_HOST、MASTER_PORT兩個參數時,
    MASTER_HEARTBEAT_PERIOD會變為slave_net_timeout的一半。符合預期。

  • CHANGE MASTER TO只帶參數MASTER_CONNECT_RETRY時,
    MASTER_HEARTBEAT_PERIOD不變。不符合預期。

測試過程

測試1

首先設置slave_net_timeout為50:

mysql> set global slave_net_timeout=50;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'slave_net_timeout';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_net_timeout | 50    |
+-------------------+-------+
1 row in set (0.00 sec)

接着change master to

change master to MASTER_HOST='127.0.0.1', MASTER_PORT=3306;

查看hearbeat,可以看到heartbeat變為了slave_net_timeout的一半,25:

mysql> select * from mysql.slave_master_info\G
*************************** 1. row ***************************
... ...
             Heartbeat: 25
... ...
1 row in set (0.00 sec)

測試2

首先設置slave_net_timeout為80:

mysql> set global slave_net_timeout=80;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'slave_net_timeout';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| slave_net_timeout | 80    |
+-------------------+-------+
1 row in set (0.00 sec)

接着change master to

change master to MASTER_CONNECT_RETRY=100;

查看heartbeat, 仍然是25,沒有變化:

mysql> select * from mysql.slave_master_info\G
*************************** 1. row ***************************
... ...
         Connect_retry: 100
... ...
         Heartbeat: 25
... ...

參考

CHANGE MASTER TO Syntax


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM