日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

3:添加一个slave到已有的复制环境(基于二进制日志文件位置)

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3:添加一个slave到已有的复制环境(基于二进制日志文件位置) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 服務器 192.168.1.2 (master) ,服務器 192.168.1.3 (old slave) 服務器 192.168.1.4 (new slave)
  • 您可以將另一個slave添加到現有復制配置,而無需停止master。為此,您可以通過復制現有slave的數據目錄并為新slave提供不同的server ID (由用戶指定)和服務器UUID(在啟動時生成)來設置新slave。
  • 在old slave
    • #停止復制
    • mysql> stop slave;
    • Query OK, 0 rows affected (0.00 sec)
    • #查看主二進制日志文件和中繼日志文件位置
    • mysql> show slave status\G
    • #關閉old slave的mysql服務
    • [root@iZ2zee8t2icu340bpmaw23Z ~]# service mysqld stop
    • Redirecting to /bin/systemctl stop mysqld.service
    • [root@iZ2zee8t2icu340bpmaw23Z ~]# ps -ef |grep mysql
    • root 14618 14474 0 21:33 pts/0 00:00:00 grep --color=auto mysql
    • #將old slave的數據目錄打包
    • [root@iZ2zee8t2icu340bpmaw23Z ~]# cat /etc/my.cnf | grep datadir
    • datadir=/var/lib/mysql
    • [root@iZ2zee8t2icu340bpmaw23Z ~]# cd /var/lib/mysql
    • [root@iZ2zee8t2icu340bpmaw23Z mysql]# tar -zcvf /tmp/file.tar.gz *
    • #啟動mysql
    • [root@iZ2zee8t2icu340bpmaw23Z mysql]# service mysqld start
    • #開始復制
    • mysql> start slave;
    • Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 在new slave上
    • #先關閉mysql
    • [root@iZ2ze7skefrz53o5o1at5hZ ~]# service mysqld stop
    • Redirecting to /bin/systemctl stop mysqld.service
    • #復制old slave的數據目錄,進入本機的mysql數據目錄
    • [root@iZ2ze7skefrz53o5o1at5hZ ~]# cat /etc/my.cnf | grep datadir
    • datadir=/var/lib/mysql
    • [root@iZ2ze7skefrz53o5o1at5hZ ~]# cd /var/lib/mysql
    • #利用scp把數據給拿過來
    • [root@iZ2ze7skefrz53o5o1at5hZ mysql]# scp root@192.168.1.3:/tmp/file.tar.gz /tmp
    • #這時候我們需要先把本機的數據給備份一下
    • [root@iZ2ze7skefrz53o5o1at5hZ mysql]# tar -zcvf /tmp/mysql_back.tar.gz *
    • #然后將old slave的數據給壓縮
    • [root@iZ2ze7skefrz53o5o1at5hZ mysql]# tar -zxvf /tmp/file.tar.gz
    • #從當前機器上的數據目錄副本中刪除auto.cnf文件,以便使用不同的生成server UUID啟動新slave服務器。 server UUID必須是唯一的。
    • [root@iZ2ze7skefrz53o5o1at5hZ mysql]# rm auto.cnf
    • rm: remove regular file ‘auto.cnf’? y
    • #為服務器配置server_id和--skip-slave-start選項,指定了--skip-slave-start的話,那么mysql啟動的時候復制就不會啟動
    • #啟動mysql服務器并登陸,查看有關信息(這里要注意,因為你直接復制的old slave的數據目錄,所以登錄mysql的時候要輸入old slave對應的用戶密碼,最后需要修改過來)
    • mysql> show slave status\G
    • #如果跟step4可以對應的上,那就沒有啥問題,然后啟動復制
    • mysql> start slave;
    • ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
    • #1872 錯誤 這個時候我們查看一下錯誤日志
    • [root@iZ2ze7skefrz53o5o1at5hZ ~]# tail -f /var/log/mysqld.log
    • 意思是從./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
      *
    • 那么就說明成功了
  • 添加一下測試數據,看下數據是否同步
  • 注意事項

    • 在新的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

    總結

    以上是生活随笔為你收集整理的3:添加一个slave到已有的复制环境(基于二进制日志文件位置)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。