2:基於二進制日誌文件位置的複製

  1. 服務器 192.168.1.2 (master) ,服務器 192.168.1.3 (slave)
  2. 要將master配置爲使用基於二進制日誌文件位置的複製,必須啓用二進制日誌記錄並建立唯一的server-id。要配置二進制日誌和server ID選項,請關閉MySQL服務器並編輯my.cnf或my.ini文件。在配置文件的[mysqld]部分中,添加log-bin和server-id選項。如果這些選項已經存在,但是註釋掉了,取消註釋並根據您的需要修改它們。
  3. 在master上,打開對應的my.cnf
    2:基於二進制日誌文件位置的複製
    • 重啓mysql,進入mysql,查看對應的server_id是否設置成功
    • mysql> show variables like 'server_id';
    • +---------------+-------+
    • | Variable_name | Value |
    • +---------------+-------+
    • | server_id | 1 |
    • +---------------+-------+
    • 1 row in set (0.00 sec)
    • 表示設置是成功的
  4. 在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)
  5. 在slave上,設置server_id,然後重啓slave的mysql
    • 2:基於二進制日誌文件位置的複製
  6. 在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的二進制文件位置
  7. 在slave上,啓動複製
    • mysql> start slave;
    • Query OK, 0 rows affected (0.00 sec)
    • 查看slave狀態
    • mysql> show slave status\G
    • 2:基於二進制日誌文件位置的複製
    • 可以查看這兩個是Yes那就說明成功了
  8. 在master上
    • mysql> UNLOCK TABLES;
    • Query OK, 0 rows affected (0.00 sec)
  9. 下面就是在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端口給關了,那麼就要在防火牆把這個端口給放開
  • 2:基於二進制日誌文件位置的複製
  • 或者進入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是下圖
    *2:基於二進制日誌文件位置的複製
  • A:查看錯誤日誌
  • 2:基於二進制日誌文件位置的複製
  • 2026是ssl錯誤,說明我們啓動了ssl連接
  • 這時候需要在master和slave上的my.conf文件加上以下行
  • 2:基於二進制日誌文件位置的複製
  • 然後重啓mysql,如果在mysql中看到以下結果,就說明ssl被關閉了
  • 2:基於二進制日誌文件位置的複製
  • 這時候如果slave還是連接不上master的話,我們再看一下show slave status的信息
  • 2:基於二進制日誌文件位置的複製
  • 如果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。

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

PREV:1:MySQL的複製原理 https://blog.51cto.com/itzhoujun/2352587

NEXT:3:添加一個slave到已有的複製環境 https://blog.51cto.com/itzhoujun/2351567

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章