目录
2.1:在master01和master02的MySQL上创建复制账号
2.3:在master01和master02中分别使用mysqldump备份出demo 和test 数据库,把传输到node01从节点
2.3.3: 在node01从库上进行恢复操作,需要先创建数据库
2.4: 在从库上分别配置master01->node01 和master02->node01的同步过程
MySQL 主从复制搭建过程_平凡的小旋风的博客-CSDN博客
MySQL5.7 主从复制GTID复制配置搭建过程_平凡的小旋风的博客-CSDN博客
MySQL主从同步之半同步复制配置_平凡的小旋风的博客-CSDN博客
前言
多源复制的使用场景
- 需要对各个业务部门的数据进行数据分析,这时候可以使用多源复制,把各个主数据库的数据复制到统一的数据库中。
- 在软件开发的时候,使用到了分库分表的情况下,为了实现后期的数据统计功能,这时候可以使用多源复制。
- 想把多个数据库的数据同步到一台服务器,可以使用多源复制。
一、多源复制搭建过程
备注:master01 和 master02 是主库,node01是从库;两个主库服务器不能有相同的数据库名字,不然会在从库中出现数据覆盖的现象。
3台服务器之间的数据库参数配置要保证开启GTID复制功能(gtid_mode=on 和 enforce_gtid_consistency=on)
1.1: master01主节点的服务器my.cnf配置
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables#多源复制-master01
############### start ####################server-id=100
log-bin=mysql-bin
binlog_format=row#开启GTID复制功能
gtid_mode=on
enforce_gtid_consistency=on
############### end ####################
1.2: master02主节点的服务器my.cnf配置
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables#多源复制-master02
############### start ####################server-id=101
log-bin=mysql-bin
binlog_format=row#开启GTID复制功能
gtid_mode=on
enforce_gtid_consistency=on
############### end ####################
1.3: node01从节点的服务器my.cnf配置
[mysqld]
port=33306
datadir=/datah/data/mysqldata/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144
#skip-grant-tables#多源复制-node01
############### start ####################server-id=103
log-bin=mysql-bin
binlog_format=row#开启GTID复制功能
gtid_mode=on
enforce_gtid_consistency=onmaster_info_repository=TABLE
relay_log_info_repository=TABLE
############### end ####################
二、细节配置过程
2.1:在master01和master02的MySQL上创建复制账号
create user 'mysync'@'172.16.25.%' identified by 'Abc123456';
grant replication slave on *.* to 'mysync'@'172.16.25.%';
flush privileges;
2.1.1:主节点上查看创建的用户信息
use mysql;
select a.User,a.host from user as a;
2.2: 在node01的MySQL的数据上创建复制账号
create user 'mysqlrepl'@'172.16.25.%' identified by 'Abc123456';
grant replication slave on *.* to 'mysqlrepl'@'172.16.25.%';
flush privileges;
2.2.1:从节点上查看创建的用户信息
use mysql;
select a.User,a.host from user as a;
2.3:在master01和master02中分别使用mysqldump备份出demo 和test 数据库,把传输到node01从节点
2.3.1:master01上备份导出demo数据库
mysqldump -uroot -pAbc123456 --master-data=2 --single-transaction --set-gtid-purged=off demo>/tmp/demo.dmp
cd /tmp/
scp /tmp/demo.dmp root@node01:/tmp/
2.3.2:master02上备份导出test数据库
mysqldump -uroot -pAbc123456 --master-data=2 --single-transaction --set-gtid-purged=off test>/tmp/test.dmp
cd /tmp/
scp /tmp/test.dmp root@node01:/tmp/
2.3.3: 在node01从库上进行恢复操作,需要先创建数据库
mysql -uroot -pAbc123456 demo </tmp/demo.dmp
mysql -uroot -pAbc123456 test </tmp/test.dmp
这时候报错,说明GTID配置未配置。
ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
提示:两主一从的架构基于MySQL5.7版本的GTID多源复制。
解决办法:在dump导出时,添加--set-gtid-purged=off参数,避免将gtid信息导出
2.4: 在从库上分别配置master01->node01 和master02->node01的同步过程
change master to master_host='172.16.25.205',
master_user='mysync',
master_password='Abc123456',
master_port=33306,
master_auto_position=1 for channel 'm1';
change master to master_host='172.16.25.206',
master_user='mysync',
master_password='Abc123456',
master_port=33306,
master_auto_position=1 for channel 'm2';
2.5:开启主从复制
start slave for channel 'm1';
start slave for channel 'm2';
2.6:最后一步很关键的步骤,重启从库的mysql服务
systemctl restart mysqld
2.7:如何清除主从同步配置,从库执行
reset slave all
系列文章目录
MySQL 主从复制搭建过程_平凡的小旋风的博客-CSDN博客
MySQL5.7 主从复制GTID复制配置搭建过程_平凡的小旋风的博客-CSDN博客
MySQL主从同步之半同步复制配置_平凡的小旋风的博客-CSDN博客
温馨提示:如果小编分享的对你有所帮助的话,麻烦点个赞,鼓励一下,小编也不容易。