手動搭建MySQL主從同步
本次搭建主從同步的環境:阿里雲CentOS 7.6 ,MySQL5.7
。
服務器安裝數據庫,請參考我博客裏的Centos安裝mysql那篇文章。
場景介紹
本次將會搭建MySQL的主從同步,其中一臺Master
,一臺Slave
。
Master: IP:112.124.1.1 Port:3306
Slave1: IP:112.54.1.2 Port:3306
開始搭建
修改配置文件
當你在服務器安裝完MySQL後,在系統的etc文件下有個my.cnf
配置文件。
打開文件,加入如下內容(別忘了修改之前做好備份):
#Master
#該配置爲Master的配置
server-id=201 #Server id 每臺MySQL的必須不同
log-bin=/var/lib/mysql/mysql-bin.log #代表開啓binlog日誌
expire_logs_days=10 #日誌過期時間
max_binlog_size=200M #日誌最大容量
binlog_ignore_db=mysql #忽略mysql庫,表示不同步此庫
#該配置爲Slave的配置,第二臺Slave也是這麼配置,不過要修改一下server-id
server-id=202
expire_logs_days=10 #日誌的緩存時間
max_binlog_size=200M #日誌的最大大小
replicate_ignore_db=mysql #忽略同步的數據庫
在Master庫中新增Slave用戶
打開Master節點的客戶端 ,**mysql -u root -p** 密碼
創建用戶 create user 'Slave'@'%' identified by '123456';
給新創建的用戶賦權:grant replication slave on *.* to 'Slave'@'%';
查看Master節點狀態
以上操作都沒有問題後,我們在客戶端中輸入show master status
查看master的binlog日誌。
File是指主節點的備份文件名稱,Position是定位內容位置,從節點備份是會根據這個地方來備份。
配置Slave節點
打開Slave節點客戶端,在我們的Slave節點中輸入如下命令:
change master to master_user='Slave',master_password='123456',master_host='你自己服務器的IP地址',master_log_file='mysql-bin.000001',master_log_pos=1422627;
#注意,這裏的master_log_file,就是binlog的文件名,輸入上圖中的mysql-bin.000001,每個人的都可能不一樣。
#注意,這裏的master_log_pos是binlog偏移量,輸入上圖中的1422627,每個人的都可能不一樣。
配置完成後,輸入 start slave;
啓動從節點後,輸入 show slave status;
來查看從節點狀態
當返回結果中,Slave_Master_Log_File 和 Slave_IO_Running都是YES; 說明主從同步開啓成功。
搭建完成
通過上述步驟,就完成了MySQL主從同步的搭建。下面我們可以進行測試。
這時候你在Master庫中新建表或者操作表中的數據,Slave庫都會備份下來。
注意事項
如果出現IO線程一直在Connecting狀態,可以看看是不是兩臺機器無法相互連接。
如果可以相互連接,那麼有可能是Slave賬號密碼寫錯了,重新關閉Slave然後輸入上面的配置命令再打開Slave即可。
如果出現SQL線程爲NO狀態,那麼有可能是從數據庫和主數據庫的數據不一致造成的,或者事務回滾,如果是後者,先關閉Slave,然後先查看 Master
的 binlog
和 position
,然後輸入配置命令,再輸入set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
,再重新start slave;
即可.
如果問題是前者,那麼就排查一下是不是存在哪張表沒有被同步,是否存在主庫存在而從庫不存在的表,自己同步一下再重新配置一遍即可。