MySQL主從複製——異步方式(binlog+position、GTID)

如需轉載請註明出處https://my.oschina.net/feistel/blog/2995251mysql

 

異步方式,是MySQL的默認方式sql

 

我醜 話說在前頭:shell

192.168.1.116 主masterA Windows MySQL8.0
192.168.1.200 備庫B,VMUbuntu18 MySQL8.0
vip:192.168.1.201數據庫

shell表明Ubuntu終端
cmd表明Windows終端
異步

----------------------------------------------------------------------------------------------------------------ide

1spa

修改B的server-id爲2,兩個庫的server-id不能相同
在B etc/mysqld.cnf裏的[mysqld]添加:
# Server Id.
server-id=2
.net

#開啓binlog寫二進制日誌文件:
log_slave_updates=1
rest

保存日誌

----------------------------------------------------------------------------------------------------------------

2

每次修改配置文件須要重啓服務以便載入
shell>service mysql restart

B mysql>show variables like "%id";
B mysql>show variables like "%slave";
查看相應值是否修改爲功,不然說明配置文件不對
說明:若是etc/mysqld.cnf裏新加的參數不對或打錯什麼的,重啓數據庫服務會出錯

關閉AB防火牆,Windows控制面板,Ubuntu爲:
shell>service iptables stop

----------------------------------------------------------------------------------------------------------------

3

建立主從複製帳號並受權:
A mysql>create user 'lgl'@'%' identified by '123456';
A mysql>grant replication slave on *.* to 'lgl'@'%';
A mysql>flush privileges;

----------------------------------------------------------------------------------------------------------------

4

使用mysqldump備份,保證主從庫裏的數據庫、表和數據一致
cmd>mysqldump --single-transaction -u root -p --master-data=2 -A >E:\all_20181229.sql
--master-data=2爲了獲取sql文件裏的binlog文件與position號:
-- CHANGE MASTER TO MASTER_LOG_FILE='LGL-PC-bin.000025', MASTER_LOG_POS=1153426;

shell>mysql -u root -p < /home/lgl/公共的/MySQL/all_20181229.sql
相關:MySQL 8.0 mysqldump備份與恢復

----------------------------------------------------------------------------------------------------------------

5

B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.116',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='LGL-PC-bin.000025',
MASTER_LOG_POS=1153426;

開始主從同步:
B mysql>start slave;

B mysql>show slave status\G;

看到以下,表示成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

----------------------------------------------------------------------------------------------------------------

5'(附加)

上面是使用binlog+position的搭建方式,這裏介紹更快的方式:GTID

在B etc/mysqld.cnf裏的[mysqld]添加:

#開啓GTID
gtid-mode=on
enforce_gtid_consistency=on

在A mysql.ini裏的[mysqld]添加:

#開啓GTID
gtid-mode=on
enforce_gtid_consistency=on

都須要重啓服務!


B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.116',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1;

對於須要多主一從狀況(假設另外一主庫爲115,帳號爲lgk):
B mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.1.116',
MASTER_USER='lgl',
MASTER_PASSWORD='123456',
master_auto_position=1 for CHANNEL 'm1';

CHANGE MASTER TO
MASTER_HOST='192.168.1.115',
MASTER_USER='lgk',
MASTER_PASSWORD='123456',
master_auto_position=1 for CHANNEL 'm2';

----------------------------------------------------------------------------------------------------------------

6

若是Slave_IO_Running: No
參考:mysql主從複製之異常解決--- Slave_IO_Running: NO 之三大緣由

 

若是Slave_SQL_Running: No
B mysql>
stop slave; 
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

----------------------------------------------------------------------------------------------------------------

7

在A新建表

B會與A執行相同的操做

----------------------------------------------------------------------------------------------------------------

至此,共勉,如需轉載請註明出處https://my.oschina.net/feistel/blog/2995251

相關文章
相關標籤/搜索