mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...
目錄:
【0】實驗需求
級聯(lián)復制,201為主庫,202為從庫/同時為203的主庫,203為202的從庫
【1】實驗環(huán)境
級聯(lián):A->B->C
實踐思路:
(1)直接拿A的xtrabackup的全備到 B和C 還遠即可
(2)然后設置gtid_purged,最后change master 即可;
【2】操作
【2.0】配置文件 my.cnf
【2.1】在主庫201創(chuàng)建復制用戶
【2.2】在主庫201創(chuàng)建測試數(shù)據(jù)
【2.3】備份與還原
【2.4】構(gòu)建級聯(lián)主從復制
【2.5】核驗
【3】多主一從
正文:
【0】實驗需求
級聯(lián)復制,201為主庫,202為從庫/同時為203的主庫,203為202的從庫
一般建議2級級聯(lián),如上描述,不建議更多層次。
【1】實驗環(huán)境
操作系統(tǒng):CentOS 7.5
數(shù)據(jù)庫版本:MySQL 5.7.24
數(shù)據(jù)庫架構(gòu):主從復制,基于主庫搭建3個從庫,采用Xtrabackup + GTID + 無損同步復制
A:主庫IP:192.168.1.201 port:3306
B:主庫/從庫IP:192.168.1.202 port:3306
C:從庫IP:192.168.1.203 port:3306
級聯(lián):A->B->C
簡單思路:
(1)B用A的全備初始化,然后B先作為從庫連上主庫A。
(2)等B至少產(chǎn)生一個gtid事務后,停止B的 io線程,然后全備B 以初始化C。
(3)C用B的全備來初始化后,再配置B->C的主從
實踐思路:
(1)直接拿A的xtrabackup的全備到 B和C 還遠即可
(2)然后設置gtid_purged,最后change master 即可;
【2】操作
【2.0】配置文件 my.cnf
#replication_new
log_bin=/mysql/log/3306/mysql-bin #開啟binlog
log_bin_index=/mysql/log/3306/mysql-bin.index
binlog_format=row
binlog_rows_query_log_events=on
max_binlog_size=2048bind-address=0.0.0.0server_id=2013306#從庫務必記得修改
expire_logs_days=7#超過7天的binlog清理
innodb_support_xa=1binlog_cache_size=1M
log_bin_trust_function_creators=1#同步存儲過程、函數(shù)、觸發(fā)器
innodb_flush_log_at_trx_commit=1sync_binlog=1transaction-isolation=read-committed
#slave parameter 如果是從庫,務必放開
#relay_log=/mysql/log/3306/relaylog/mysql-relay.log
#read_only=1#slave-parallel-type=LOGICAL_CLOCK
#slave-parallel-workers=4#master_info_repository=table #master_info 會記錄到 mysql.slave_master_info
#relay_log_info_repository=table #relay_log 會記錄到,mysql.slave_relay_log_info
#relay_log_recovery=1#slave_skip_errors=ddl_exist_errors
#slave_preserve_commit_order=1#5.7的增強半同步
#如果是5.7,參數(shù)前面加上loose_,如下列,如果是5.6 則直接使用 rpl_semi_sync_master_enabled=1之類的就好了。
#我這里是5.7就直接做增強半同步了(loseless Semisynchronous )
plugin_dir=/mysql/app/mysql/lib/plugin/plugin_load=rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so
loose_rpl_semi_sync_master_enabled=1#MySQL開啟主的半同步復制(rpl_semi_sync_master_enabled)
loose_rpl_semi_sync_slave_enabled=1#MySQL5.6開啟從的半同步復制
loose_rpl_semi_sync_master_timeout=5000#超時5秒,切回異步
rpl_semi_sync_master_wait_for_slave_count=1#至少收到1個slave發(fā)會的ack
rpl_semi_sync_master_wait_point=AFTER_SYNC #MySQL 5.7的方法,AFTER_SYNC(default value,增強半同步) &AFTER_COMMIT(傳統(tǒng)半同步)
#GTID mode
gtid_mode=on
enforce_gtid_consistency=1log-slave-updates=1
【2.1】在主庫201創(chuàng)建復制用戶
create user 'rpl'@'192.168.1.%' identified by '123456';grant replication slave on *.* to 'rpl'@'192.168.1.%';
flushprivileges;select user,host from mysql.user;
【2.2】在主庫201創(chuàng)建測試數(shù)據(jù)
--【2.2.1】構(gòu)造test庫和test庫下的test1,test2,test3表。test4表用于模擬業(yè)務一直在運行
create databasetest;usetest;create table test1(id int);insert into test1 values(1);create table test2(id int);insert into test2 values(2);create table test3(id int);insert into test3 values(3);commit;create table test4(id int);insert into test4 values(4);commit;--【2.2.2】構(gòu)造存儲過程sp_test4來循環(huán)插入test4表,模擬業(yè)務運行
usetest;drop procedure if existssp_test4;
delimiter $$create proceduresp_test4()begin
declare n int;set n=11;while(n<=20)
doinsert into test.test4 values(n);commit;set n=n+1;end while;end$$
delimiter ;--【2.2.3】構(gòu)造事件,來調(diào)度sp_test4過程
usetest;set global event_scheduler=1;
delimiter $$create event if not existsevent_test4on schedule every 5secondoncompletion preserve
enable
dobegincall sp_test4();end$$
delimiter ;--為了防止測試數(shù)據(jù)量累計導致卡頓,我這里5小時做一次truncate
delimiter $$create event if not existsevent_truncate_test4on schedule every 5houroncompletion preserve
enable
dobegin
truncate tabletest.test4;end$$
delimiter ;
【2.3】備份與還原
#在主庫A:201
innobackupex--defaults-file=/etc/my.cnf -uroot -p123456 --no-timestamp /mysql/backup/full.bak
#在從庫B/C:202,203
scp -r root@192.168.1.201:/mysql/backup/full.bak /mysql/backup/
innobackupex --apply-log --user-memory=800M /mysql/backup/full.bak #應用redo/undo
mv data data1
mkdir data
innobackupex --defaults-file=/etc/my.cnf --copy-back /mysql/backup/full.bak/ #復制還原
chown -R mysql:mysql /mysql
chmod -R 755 /mysql
【2.4】構(gòu)建級聯(lián)主從復制
#從xtrabackup備份中的,info文件 or binlog_info文件中找到 gtid;
stop slave;
reset master;
reset slave all;
set session sql_log_bin=0;set global gtid_purged='de853101-b165-11e9-900a-000c291f4171:1-1697';set session sql_log_bin=1;
change mastertomaster_host='192.168.1.202',
master_user='rpl',
master_password='123456',
master_auto_position=1;
#核驗主從,在從庫執(zhí)行
show slave status\G
show processlist;
select count(1) from test.test4;
【2.5】核驗
#在主庫A:201 執(zhí)行
create database test1;
create table test1.test1(id int);
insert into test1.test1 values(1);
commit;
select * from test1.test1;
#核驗三個庫
select * from test1.test1;
【3】多主一從(多源復制)
【3.1】實驗環(huán)境
操作系統(tǒng):CentOS 7.5
數(shù)據(jù)庫版本:MySQL 5.7.24
數(shù)據(jù)庫架構(gòu):主從復制,基于主庫搭建3個從庫,采用Xtrabackup + GTID + 無損同步復制
A:主庫IP:192.168.1.201 port:3306
B:主庫IP:192.168.1.202 port:3306
C:從庫IP:192.168.1.203 port:3306\
A服務器之復制 test庫,B服務器之復制test1庫
【3.2】主從庫參數(shù) my.cnf
#【3.2.1】A服務器參數(shù)額外配置
binlog-do-db=test #binlog只把該庫的操作記錄到binlog,每一行一個數(shù)據(jù)庫,多個數(shù)據(jù)庫需要另起行
binlog-ignore-db=sys #表示忽略某個數(shù)據(jù)庫,除了這個數(shù)據(jù)庫之外都復制,每一行一個數(shù)據(jù)庫,多個數(shù)據(jù)庫需要另起行
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#【3.2.2】B服務器參數(shù)額外配置
binlog-do-db=test1 #binlog只把該庫的操作記錄到binlog,每一行一個數(shù)據(jù)庫,多個數(shù)據(jù)庫需要另起行
binlog-ignore-db=sys #表示忽略某個數(shù)據(jù)庫,除了這個數(shù)據(jù)庫之外都復制,每一行一個數(shù)據(jù)庫,多個數(shù)據(jù)庫需要另起行
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#【3.2.3】C服務器參數(shù)額外配置
replicate_do_db=test
replicate_do_db=test1
replicate_wild_do_table=test.%replicate_wild_do_table=test1.%replicate_ignore_db=mysql
replicate_ignore_db=sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
【3.3】配置主從(channel)
#在從庫C操作
#核心就是channel 加頻道,以便可以接收多個主庫的復制
stop slave;
reset master;
reset slaveall;
change mastertomaster_host='192.168.1.201',
master_port=3306,
master_user='rpl',
master_password='123456',
master_auto_position=1
for channel 'master_201';
change mastertomaster_host='192.168.1.202',
master_port=3306,
master_user='rpl',
master_password='123456',
master_auto_position=1
for channel 'master_202';
【3.4】關(guān)于channel的管理與維護
【3.4.1】關(guān)于channel 的常規(guī)操作
show slavefor 'master_201'\G --查看單個channel 的狀態(tài)
stop slave for channel 'master_201'; --停止單個channel的同步
start slave for channel 'master_202'; --開始單個channel的同步
reset slave all for channel 'master_201'; --重置單個channel
--如果是關(guān)于全部的,那么和正常的主從一樣
stop slave; reset slave all; show slave status\G-- 跳過一個channel 的報錯show slave statusfor channel 'master_201'\G--處理辦法,先停止所有的channel(stop slave;),處理錯誤,接著開啟報錯所在的 channel ,最后開啟所有的channel
--啟用GTID 模式時
stop slave; -- stop slave for channel 'master_201';set session gtid_next='de853101-b165-11e9-900a-000c291f4171:1-1697';
begin;
commit;
set session gtid_next='automatic';
start slave;
-- 未啟用GTID模式時
stop slave; -- stop slave for channel 'master_201';
set global sql_slave_skip_counter=N --N為數(shù)字,表示跳過N個事件
start slave;
【3.4.2】監(jiān)控通道channel 信息,在performance_schema 增加了一些 replication 的監(jiān)控表;
use performance_schema;
show tables like 'replicat%';
select * from performance_schema.replication_connection_status\G
總結(jié)
以上是生活随笔為你收集整理的mysql 多主一从备份_(5.14)mysql高可用系列——级联复制与多主一从(多源复制)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 扁桃体发炎能吃桃子吗?需要注意什么?
- 下一篇: 做鼻中隔手术要多少钱