MySQL5.7的多源復制

基本環(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;
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容