- 服務器 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的二進制文件位置
- 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;
- 在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。
參考資料: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