1. 程式人生 > 實用技巧 >3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)

3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)

  1. 伺服器 192.168.1.2 (master) ,伺服器 192.168.1.3 (old slave) 伺服器 192.168.1.4 (new slave)
  2. 您可以將另一個slave新增到現有複製配置,而無需停止master。為此,您可以通過複製現有slave的資料目錄併為新slave提供不同的server ID (由使用者指定)和伺服器UUID(在啟動時生成)來設定新slave。
  3. 在old slave
    • #停止複製
    • mysql> stop slave;
    • Query OK, 0 rows affected (0.00 sec)
    • #檢視主二進位制日誌檔案和中繼日誌檔案位置
    • mysql> show slave status\G
    • 3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)
    • #關閉old slave的mysql服務
    • [[email protected] ~]# service mysqld stop
    • Redirecting to /bin/systemctl stop mysqld.service
    • [[email protected] ~]# ps -ef |grep mysql
    • root 14618 14474 0 21:33 pts/0 00:00:00 grep --color=auto mysql
    • #將old slave的資料目錄打包
    • [[email protected] ~]# cat /etc/my.cnf | grep datadir
    • datadir=/var/lib/mysql
    • [[email protected] ~]# cd /var/lib/mysql
    • [[email protected] mysql]# tar -zcvf /tmp/file.tar.gz *
    • #啟動mysql
    • [[email protected] mysql]# service mysqld start
    • #開始複製
    • mysql> start slave;
    • Query OK, 0 rows affected, 1 warning (0.00 sec)
  4. 在new slave上
    • #先關閉mysql
    • [[email protected] ~]# service mysqld stop
    • Redirecting to /bin/systemctl stop mysqld.service
    • #複製old slave的資料目錄,進入本機的mysql資料目錄
    • [[email protected] ~]# cat /etc/my.cnf | grep datadir
    • datadir=/var/lib/mysql
    • [[email protected] ~]# cd /var/lib/mysql
    • #利用scp把資料給拿過來
    • [[email protected] mysql]# scp [email protected]:/tmp/file.tar.gz /tmp
    • #這時候我們需要先把本機的資料給備份一下
    • [[email protected] mysql]# tar -zcvf /tmp/mysql_back.tar.gz *
    • #然後將old slave的資料給壓縮
    • [[email protected] mysql]# tar -zxvf /tmp/file.tar.gz
    • #從當前機器上的資料目錄副本中刪除auto.cnf檔案,以便使用不同的生成server UUID啟動新slave伺服器。 server UUID必須是唯一的。
    • [[email protected] mysql]# rm auto.cnf
    • rm: remove regular file ‘auto.cnf’? y
    • #為伺服器配置server_id和--skip-slave-start選項,指定了--skip-slave-start的話,那麼mysql啟動的時候複製就不會啟動
    • 3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)
    • #啟動mysql伺服器並登陸,檢視有關資訊(這裡要注意,因為你直接複製的old slave的資料目錄,所以登入mysql的時候要輸入old slave對應的使用者密碼,最後需要修改過來)
    • mysql> show slave status\G
    • 3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)
    • #如果跟step4可以對應的上,那就沒有啥問題,然後啟動複製
    • mysql> start slave;
    • ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
    • #1872 錯誤 這個時候我們檢視一下錯誤日誌
    • [[email protected] ~]# tail -f /var/log/mysqld.log
    • 3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)
    • 意思是從./iZ2ze7skefrz53o5o1at5hZ-relay-bin.index找不到./iZ2zee8t2icu340bpmaw23Z-relay-bin.000004 relay log 檔案,原因是由於我使用的是冷備份檔案恢復的例項,在mysql庫中的slave_relay_log_info表中依然保留之前relay_log的資訊,所以導致啟動slave報錯。解決方法如下
    • mysql> reset slave;
    • Query OK, 0 rows affected (0.02 sec)
    • mysql> start slave;
    • Query OK, 0 rows affected (0.02 sec)
    • mysql> show slave status\G
      *3:新增一個slave到已有的複製環境(基於二進位制日誌檔案位置)
    • 那麼就說明成功了
  5. 新增一下測試資料,看下資料是否同步

注意事項

  • 在新的slave上,一定要檢視錯誤日誌以及對比新slave和現有slave的show slave status內容,檢視Master_Log_File和Read_Master_Log_Pos是否有差異
  • 因為你直接複製的old slave的資料目錄,所以登入new salve的mysql的時候要輸入old slave對應的使用者密碼,最後需要修改過來

reset slave講解:

  • 參考連結: https://dev.mysql.com/doc/refman/5.7/en/reset-slave.html
  • RESET SLAVE makes the slave forget its replication position in the master's binary log. This statement is meant to be used for a clean start: It clears the master info and relay log info repositories, deletes all the relay log files, and starts a new relay log file. It also resets to 0 the replication delay specified with the MASTER_DELAY option to CHANGE MASTER TO. RESET SLAVE does not change the values of gtid_executed or gtid_purged.
  • RESET SLAVE會讓slave忘記master的二進位制檔案的複製位置。主要用於乾淨的啟動一個複製,它會清除主資訊和中繼日誌資訊庫(就是清除mysql.slave_master_info和slave_relay_log_info這兩個表),刪除所有的中繼日誌檔案,並且啟動一個新的中繼日誌檔案。會將CHANGE MASTER TO的 MASTER_DELAY選項指定的值重置為0,RESET SLAVE 不會更改gtid_executed或gtid_purged的值。

參考連結:https://dev.mysql.com/doc/refman/5.7/en/binlog-replication-configuration-overview.html

PREV: 2:基於二進位制日誌檔案位置的複製 https://blog.51cto.com/itzhoujun/2351367
NEXT: 4:GTID簡單介紹 https://blog.51cto.com/itzhoujun/2352688

轉載於:https://blog.51cto.com/itzhoujun/2351567