基於二進制日誌文件位置的復制
阿新 • • 發佈:2019-02-18
遠程 重啟 二進制文件 如果 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
在master上,創建復制使用的用戶(每個slave都使用MySQL用戶名和密碼連接到master,因此master必須有一個用戶帳戶可以讓slave用來連接。任何帳戶都可以用於此操作,只要授予它REPLICATION SLAVE特權。)
在slave上,設置server_id,然後重啟slave的mysql
在slave上,在slave上設置master配置
在slave上,啟動復制
在master上
下面就是在mysql中的數據庫中隨便操作一下數據,看下是否同步,如果同步則表示沒有問題,有問題,請及時查看slave的mysql錯誤日誌
- 重啟mysql,進入mysql,查看對應的server_id是否設置成功
- mysql> show variables like ‘server_id‘;
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | server_id | 1 |
- +---------------+-------+
- 1 row in set (0.00 sec)
- 表示設置是成功的
- 進入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)
- 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> start slave;
- Query OK, 0 rows affected (0.00 sec)
- 查看slave狀態
- mysql> show slave status\G
- 可以查看這兩個是Yes那就說明成功了
- mysql> UNLOCK TABLES;
- Query OK, 0 rows affected (0.00 sec)
註意:
- 需要驗證一下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。
基於二進制日誌文件位置的復制