環境: A、B兩台伺服器分別安裝mysql-5.7.18服務端,配置成互為主從同步。 linux系統版本為CentOS7 A伺服器ip:192.168.1.7 主機名:test1 B伺服器ip:192.168.1.8 主機名:test2 (同一區域網下) 一、準備 1.修改主機名 命令:hostna ...
環境:
A、B兩台伺服器分別安裝mysql-5.7.18服務端,配置成互為主從同步。
linux系統版本為CentOS7
A伺服器ip:192.168.1.7 主機名:test1
B伺服器ip:192.168.1.8 主機名:test2
(同一區域網下)
一、準備
1.修改主機名
命令:hostnamectl set-hostname xxx
(查看主機名 命令:hostname)
2.關閉防火牆
1)查看防火牆狀態
命令:firewall-cmd --state
結果:running
2)防火牆是運行狀態,先關閉防火牆服務
命令:systemctl mask firewalld
3)關閉防火牆
命令:systemctl stop firewalld
4)檢查防火牆狀態
命令:firewall-cmd --state
結果:not running
3.關閉selinux策略
1)查看selinux運行狀態
命令:getenforce
結果:Enforcing
2)永久性關閉(需重啟電腦),編輯selinux文件vi /etc/sysconfig/selinux修改SELINUX=disabled
3)為關閉狀態
二、配置主伺服器(master)從伺服器(slave)
1.打開A伺服器的my.cnf文件vi /etc/my.cnf,在文件的[mysqld]下添加如下內容
server-id=1 #必須與其他伺服器不同,且必須為1~232之間的正整數值
log-bin=mysql-bin
log-bin-index=mysql-bin
在B伺服器my.cnf文件中的[mysqld]下添加上圖內容,只更改server-id值即可。
server-id=2
log-bin=mysql-bin
log-bin-index=mysql-bin
2.在A伺服器中的mysql安裝路徑下(rpm安裝路徑為/var/lib/mysql)創建全庫備份文件all.sql。
創建命令:touch /var/lib/mysql/all.sql
備份命令:[root@test1 mysql]# mysqldump -uroot -p123 --all-databases > /var/lib/mysql/all.sql
把all.sql文件拷貝到B伺服器中的某個路徑下(以/var/lib/mysql路徑為例)進行恢復。
恢覆命令:[root@test2 /]# mysql -uroot -p123 < /var/lib/mysql/all.sql
3.在A、B伺服器的mysql中創建用戶用於同步。
創建用戶:mysql> create user 'tongbu'@'%' identified by 'tongbu';
授權:mysql> grant all on *.* to 'tongbu'@'%';
刪除用戶:mysql> drop user '用戶名'@'%';
A、B伺服器用戶創建完成後,測試用戶相互是否可以遠程登陸mysql。
[root@test1 /]# mysql -utongbu -ptongbu -h192.168.1.8
[root@test2 /]# mysql -utongbu -ptongbu -h192.168.1.7
測試無問題後重啟A、B伺服器中的mysql服務:[root@test /]# service mysqld restart
4.設置A為主伺服器,B為從伺服器。
1)查看A伺服器mysql中的二進位日誌名和偏移量值
命令:mysql> show master status\G
如下圖
2)在B伺服器中配置連接伺服器
mysql> stop slave;
mysql> change master to
-> master_host='192.168.1.7',
-> master_user='tongbu',
-> master_password='tongbu',
-> master_log_file='mysql-bin.000024',
-> master_log_pos=154;
mysql> start slave;
mysql> show slave status\G 輸入此命令查看Slave_IO_Running和Slave_SQL_Running的值是否為Yes,如下圖
5.設置B為主伺服器,A為從伺服器。
1)查看B伺服器mysql中的二進位日誌名和偏移量
命令:mysql> show master status\G
2)在A伺服器中配置連接伺服器。
mysql> stop slave;
mysql> change master to
-> master_host='192.168.1.8',
-> master_user='tongbu',
-> master_password='tongbu',
-> master_log_file='mysql-bin.000027',
-> master_log_pos=154;
mysql> start slave;
mysql> show slave status\G 查看Slave_IO_Running和Slave_SQL_Running的值是否為Yes
至此兩台mysql資料庫互為主從同步配置完成。
錯誤排查:
1.Slave_IO_Running狀態錯誤
檢查MySQL> show slave status\G;時,Slave_IO_Running狀態為Connecting錯誤,出現的原因主要分為三種,需要檢查配置:
1)網路不通
2)賬戶許可權配置錯誤,如密碼不對、賬號錯誤、地址錯誤
3)二進位文件位置不對
2.主備數據衝突或不同造成的異常
主鍵衝突、表已存在等錯誤代碼如1062,1032,1060等,可以在mysql配置文件指定略過此類異常並繼續下條sql同步,這樣可以避免很多主從同步的異常中斷。打開/etc/ mysql下的my.cnf文件,在[mysqld]後添加如下代碼:
slave-skip-errors = 1062,1032,1060
3. 跳過異常恢復同步
mysql >slave stop;
mysql >SET GLOBAL sql_slave_skip_counter = 1;
mysql >slave start;