基本環(huán)境
- 全部基于GTID復制
- Master
- 在192.168.1.102上面搭建多實例,端口分別是3306,3307
- Slave
- 在192.168.1.103上面搭建3306端口的實例
約束
- 每個實例上DB名字不能一樣
- 創(chuàng)建用戶或是復制用戶名時名字不能一樣,如果經(jīng)常遇到一樣的賬號或是為了規(guī)范常見的賬號是一樣的,考慮在Slave的過濾規(guī)則把mysql庫復制忽略掉
主庫配置
Master1
- gtid-mode=on
- enforce-gtid-consistency=1
- binlog_format=row
- server-id=3306102
- log-bin=/data/mysql/mysql3306/logs/mysql-bin
- skip-slave-start=1
Master2
- gtid-mode=on
- enforce-gtid-consistency=1
- binlog_format=row
- server-id=3307102
- log-bin=/data/mysql/mysql3307/logs/mysql-bin
- skip-slave-start=1
創(chuàng)建復制用的賬號
從庫配置
Slave
- gtid-mode=on
- enforce-gtid-consistency=1
- binlog_format=row
- server-id=3306103
- log-bin=/data/mysql/mysql3307/logs/mysql-bin
- skip-slave-start=1
- master-info-repository=TABLE
- relay-log-info-repository=TABLE
change master to master_host='192.168.1.102',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1 for channel 'master-3306102';
change master to master_host='192.168.1.102',master_port=3307,master_user='repl',master_password='repl4slave',master_auto_position=1 for channel 'master-3307102';
常用管理命令
- 開關復制
- start slave [tread_type][for channel ...]
- 監(jiān)控
- show slave status [for channel...]
- select * from performance_schema.replication_connection_configuration
- select * from performance_schema.replication_connection_status
多源復制出錯處理
- binlog+position
- stop slave sql_thread for channel 'master-3307102';
- set global sql_slave_skip_counter=1;
- start slave sql_tread for channel 'master-3307102';
- GTID
- stop slave sql thread for channel 'master-3307102';
- set gtid_next='uuid:N';
- begin;commit;
- set gtid_next='automatic';
- start slave sql_tread for channel 'master-3307102';
復制賬號重復問題
set sql_log_bin=0;
create user ...
grant ...
set sql_log_bin=1;
stop slave sql_thread;
change replication filter Replicate_Ignore_DB=(mysql);
start slave sql_thread;
對一個運行很久的庫做備份恢復建同步
環(huán)境
- Master
- 在192.168.1.102上面搭建多實例,端口分別是3306,3307
- Slave
- 在192.168.1.103上面搭建3306端口的實例
- 前提條件
- 3306102和3306103是運行很久的一對主從復制,現(xiàn)在想把3307102加進來,變成多源復制
- 先將3307102數(shù)據(jù)備份出來hetan3307.sql
- 這個時候?qū)霐?shù)據(jù)會報錯,就是gtid_purged沒有清空的原因
- 在從庫上執(zhí)行
- stop slave;
- show master status;
- 記錄下Executed_Gtid_Set的值
- more hetan3307.sql
- 記錄下它的gtid的值
- mysql -f -S /tmp/mysql.sock -p < /path/hetan3307.sql #強制導入一下
- reset master; #清空從庫的purge信息
- set gtid_purged='上面兩個的gtid值,逗號隔開';
- 執(zhí)行change master to語句,先執(zhí)行3307102的,看一下能不能正常復制,可以就不用再執(zhí)行3306102的,不行就將3306102的也change一下
- start slave;