1. 程式人生 > >基於二進制日誌文件位置的復制

基於二進制日誌文件位置的復制

遠程 重啟 二進制文件 如果 replica my.conf p地址 file ext

  • MySQL官網鏈接:https://dev.mysql.com/doc/refman/5.7/en/binlog-replication-configuration-overview.html
  • 服務器 192.168.1.2 (master) ,服務器 192.168.1.3 (slave)
  • 要將master配置為使用基於二進制日誌文件位置的復制,必須啟用二進制日誌記錄並建立唯一的server-id。要配置二進制日誌和server ID選項,請關閉MySQL服務器並編輯my.cnf或my.ini文件。在配置文件的[mysqld]部分中,添加log-bin和server-id選項。如果這些選項已經存在,但是註釋掉了,取消註釋並根據您的需要修改它們。
  • 在master上,打開對應的my.cnf
    技術分享圖片
    • 重啟mysql,進入mysql,查看對應的server_id是否設置成功
    • mysql> show variables like ‘server_id‘;
    • +---------------+-------+
    • | Variable_name | Value |
    • +---------------+-------+
    • | server_id | 1 |
    • +---------------+-------+
    • 1 row in set (0.00 sec)
    • 表示設置是成功的
  • 在master上,創建復制使用的用戶(每個slave都使用MySQL用戶名和密碼連接到master,因此master必須有一個用戶帳戶可以讓slave用來連接。任何帳戶都可以用於此操作,只要授予它REPLICATION SLAVE特權。)
    • 進入mysql,執行以下命令
    • mysql> CREATE USER ‘lisi‘@‘%‘ IDENTIFIED BY ‘Lisi@123456‘;
    • Query OK, 0 rows affected (0.00 sec)
    • mysql> GRANT REPLICATION SLAVE ON . TO ‘lisi‘@‘%‘;
    • Query OK, 0 rows affected (0.00 sec)
    • 接下來通過FLUSH刷新所有表和塊寫入語句
    • mysql> FLUSH TABLES WITH READ LOCK;
    • Query OK, 0 rows affected (0.00 sec)
    • 然後確定當前的二進制日誌文件名稱和位置:
    • mysql> show master status;
    • +------------------+----------+--------------+------------------+-------------------+
    • | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    • +------------------+----------+--------------+------------------+-------------------+
    • | mysql-bin.000005 | 802858 | | | |
    • +------------------+----------+--------------+------------------+-------------------+
    • 1 row in set (0.00 sec)
  • 在slave上,設置server_id,然後重啟slave的mysql
    • 技術分享圖片
  • 在slave上,在slave上設置master配置
    • mysql> CHANGE MASTER TO MASTER_HOST=‘192.168.1.2‘, MASTER_USER=‘lisi‘, MASTER_PASSWORD=‘Lisi@123456‘, MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=802858;
      • 參數講解
      • MASTER_HOST master的ip地址
      • MASTER_USER master的復制用戶名
      • MASTER_PASSWORD master的復制用戶的密碼
      • MASTER_LOG_FILE master的二進制文件
      • MASTER_LOG_POS master的二進制文件位置
  • 在slave上,啟動復制
    • mysql> start slave;
    • Query OK, 0 rows affected (0.00 sec)
    • 查看slave狀態
    • mysql> show slave status\G
    • 技術分享圖片
    • 可以查看這兩個是Yes那就說明成功了
  • 在master上
    • mysql> UNLOCK TABLES;
    • Query OK, 0 rows affected (0.00 sec)
  • 下面就是在mysql中的數據庫中隨便操作一下數據,看下是否同步,如果同步則表示沒有問題,有問題,請及時查看slave的mysql錯誤日誌
  • 註意:

    • 需要驗證一下master的復制賬號是否能遠程登錄
    • 復制組中的每個服務器必須配置唯一的server ID

    這次操作踩的坑:

    • Q: Can‘t connect to MySQL server on ‘server’ 在當前主機上 mysql -uUserName -p -h localhost 可以連接上 mysql -uUserName -p -h ‘ip地址‘ 連接不上
    • A:先按照https://dev.mysql.com/doc/refman/8.0/en/can-not-connect-to-server.html介紹的方法進行排查,最後還發現連接不上,如果是阿裏雲的服務器,那麽可能就是防火墻把3306d端口給關了,那麽就要在防火墻把這個端口給放開
    • 技術分享圖片
    • 或者進入https://help.aliyun.com/document_detail/25471.html?spm=a2c4e.11153987.0.0.2de65a75vopCz7進行設置
    • Q:在slave機器上mysql -uUserName -p -h ‘master的ip地址’ 可以連接上,但show slave status是下圖
    • 技術分享圖片
    • A:查看錯誤日誌
    • 技術分享圖片
    • 2026是ssl錯誤,說明我們啟動了ssl連接
    • 這時候需要在master和slave上的my.conf文件加上以下行
    • 技術分享圖片
    • 然後重啟mysql,如果在mysql中看到以下結果,就說明ssl被關閉了
    • 技術分享圖片
    • 這時候如果slave還是連接不上master的話,我們再看一下show slave status的信息
    • 技術分享圖片
    • 如果Master_SSL_Allowed為Yes,那麽就要改為No,具體修改在change master語句裏面改,本次我們的修改例子為
      CHANGE MASTER TO MASTER_HOST=‘192.168.1.2‘, MASTER_USER=‘lisi‘, MASTER_PASSWORD=‘Lisi@123456‘, MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=802858,master_ssl=0; 主要是master_ssl=0然後在執行一下start slave。

    基於二進制日誌文件位置的復制