汇聚数据:尤其是在分库分表的一些场景中,数据集中统计分析操作可以在1台从库服务器上实现。
节省成本:数据集中存放可避免服务器等软硬件资源浪费,5.7之前1主1从或者1主多从的方案需要为每个主机都安置一台备机;5.7推出多源复制之后,可以将多个从库进行合并,至于是合并存放在高端还是低端服务器上,取决于分析、统计等业务在整体业务中的优先级、繁忙程度等因素。
集中备份:方便在一台服务器备份所有已收到的数据库数据。
异地灾备:将从库放在距离远的地方,可用于异地备份项目。
Master1:10.0.80.199
Master2:10.0.80.200
Slave:10.0.80.201
#每台mysql 服务器都需要加
#my.cnf要加两个参数才可以在GTID多源复制
master-info-repository=TABLE
relay-log-info-repository=TABLE
#从库启用enhanced multi-threaded slave (多线程复制)
slave-parallel-type=LOGICAL_CLOCK
#复制并发数设置
slave-parallel-workers=8
relay_log_recovery=ON
log-slave-updates = ON
#复制的库,只接受下面两种数据库,这两种数据来源不同的通道,不指定默认备份全部库
replicate-do-db = master1
replicate-do-db = master2
#不复制的库
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys
#GTID模式(使用GTID就可以不用记录备份位置点)
gtid-mode=on
enforce-gtid-consistency
[master1]#mysql>grant replication slave on *.* to 'root'@'10.0.80.201' identified by '123456';
[master2]#mysql>grant replication slave on *.* to 'root'@'10.0.80.201' identified by '123456';
#导出
[master1]#mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases --add-drop-database master1 >master1.sql
#导入
[slave]#mysql -uroot -p <./master1.sql
#分别找出Master1和Master2的binlog位置和Pos位置
[slave]#cat master1.sql |grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='Master_1-bin.000001', MASTER_LOG_POS=1539;
#Binlog模式
[slave]#mysql> change master to master_host='10.0.80.199',master_user='root',master_password='123456',master_port=3306,master_log_file='Master_1-bin.000001',master_log_pos=1539 for channel 'master1';
#GTID模式配置,(推荐使用GTID模式)
[slave]#mysql> change master to master_host='10.0.80.200',master_user='root',master_password='123456',master_port=3306,master_auto_position=1 for channel 'master2';
#启动slave
[slave]#mysql>start slave for channel "master1";
[slave]#mysql>start slave for channel "master2";
#两个通道一起起动了
[slave]#mysql> start slave;
#显示通道状态
[slave]#mysql>SHOW SLAVE STATUS FOR CHANNEL 'master1'
#停止批定通道的IO_THREAD [slave]#mysql> stop slave io_thread for channel 'master1';
主库设置从库跳过错误设置:
解决方案: 让从库跳过这一步操作,继续执行其它的操作
方法一: 命令行实现,跳过这一步;
[slave]#mysql> stop slave;
[slave]#mysql> set global sql_slave_skip_counter =1;
[slave]#mysql> start slave;
方法二: 配置文件中,指定忽略的错误;
vi my.cnf
#添加可忽略错误状态
slave-skip-errors = 1032,1062,1007
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES