ITPub博客

首页 > 数据库 > MySQL > 【Mysql】Mysql5.7的多源复制搭建

【Mysql】Mysql5.7的多源复制搭建

MySQL 作者:小亮520cl 时间:2017-04-19 17:12:28 0 删除 编辑

一.基本环境
主库1: 10.24.65.30  3306 MySQL 5.7.14
主库2: 10.24.65.30  3307 mysql 5.7.14
从库:10.24.65.33  3306 mysql 5.7.14
基于gtid复制

二.搭建注意事项
1.每个实例上DB名字不能一样。
2.创建或是复制用户时名字不能一样,如果经常遇到一样的帐号若是为了规范创建的帐
号是一样的,考虑在slave的过滤规则把mysql复制忽略掉。
[stop slave sql_thread;change replication filter replicate_ignore_db=mysql;]

3307启停:
mysqld_safe --defaults-file=/data/mysql/mysql3307/data/my3307.cnf &
mysqladmin shutdown -S /tmp/mysql3307.sock
mysql  -S /tmp/mysql3307.sock

三.主库配置
1.master1参数设置
gtid-mode=on
enforce-gtid-consistency=1
skip_slave_start=1
2.master2参数设置
gtid-mode=on
enforce-gtid-consistency=1
skip_slave_start=1
3.复制帐号建立
grant replication slave on *.* to repl@'10.24%' identified by 'replsafe';
flush privileges;
4.slave参数设置
gtid-mode=on
enforce-gtid-consistency=1
skip_slave_start=1
master-info-repository=table
relay-log-info-repository=table
5.slave配置连接主库
change master to
master_host='10.24.65.30',
master_port=3306,
master_user='repl',
master_password='replsafe',
master_auto_position=1 for channel 'master-65303306';

change master to
master_host='10.24.65.30',
master_port=3307,
master_user='repl',
master_password='replsafe',
master_auto_position=1 for channel 'master-65303307';

四.常用命令:
1.开关复制
start slave io_thread|sql_thread for channel 'master-65303306';
stop slave io_thread|sql_thread for channel 'master-65303306'

2.监控复制
show slave status for channel 'master-65303306';

五.校验
master1:
create database mdb1;
use mdb1;
create table t1(id int);

master2:
create database mdb2;
use mdb2;
create table t2(id int);

slave:
(product)root@localhost [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mdb1               |
| mdb2               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

(product)root@localhost [(none)]> use mdb1;
Database changed
(product)root@localhost [mdb1]> show tables;
+----------------+
| Tables_in_mdb1 |
+----------------+
| t1             |
+----------------+
1 row in set (0.00 sec)

(product)root@localhost [mdb1]> use mdb2;
Database changed
(product)root@localhost [mdb2]> show tables;
+----------------+
| Tables_in_mdb2 |
+----------------+
| t2             |
+----------------+
1 row in set (0.00 sec)

六.相关问题
1.多源复制处理之一:
binlog+position:
stop slave sql_thread for channel 'master-65303306';
set sql_slave_skip_counter=n;
start slave sql_thread for channel 'master-65303306';

gtid:
stop slave sql_thread for channel 'master-65303306';
set gtid_next='uuid-N';
begin;commit;
set gtid_next='automatic';
start slave sql_thread for channel 'master-65303306';
2.从多源复制处理之二:
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'A slave with the same server_uuid/server_id as this slave has connected to the master; 
the first event 'mysql-bin.000181' at 154, the last event read from '/data/mysql/mysql3306/logs/mysql-bin.000181' at 123, the last byte read from '/data/mysql/mysql3306/logs/mysql-bin.000181' at 154.'

解决方法:
a.由于两主库的server-uuid相同,更改其中一个auto.cnf中的server-uuid号
b.并在从库上执行reset slave all清除slave信息
c.重新change master


补充:

  1. 初始化搭建无话可说,毕竟是无业务接入,无数据实时写入的情况下!
  2. 接下来要考虑的是数据实时写入。模拟线上热搭建多源slave的情况,master1和master2是实时写入的
  3. 一:master_auto=1的方式
  4. 1.dump master1 master2 数据文件(master-data=2),注释掉set_gtid——purged
  5. 2.拷贝master1.sql master2.sql至slave,将master1 和 master2的gtid_purge合并在一起
  6. 3.导入master1.sql 和 master2.sql  并 set global gtid_purged='master1 合并master2的'
  7. 4.搭建复制通道
  8. change master to master_host='127.0.0.1',master_user='repluser',master_password='replpass',master_port=3307,master_auto_position=1 for channel 'master_3307'; 
  9. change master to master_host='127.0.0.1',master_user='repluser',master_password='replpass',master_port=3308,master_auto_position=1 for channel 'master_3308';
  10. 5.检查无误
  11.     

二:master_auto=0的方式
  1. 1.dump master1 master2 数据文件(master-data=2)注释掉set_gtid——purged
  2. 2.scp master1.sql 至slave  ,reset master 并且导入master1.sql,master_auto=0搭建复制步骤
  3. 3.scp master2.sql 至slave  ,reset master 并且导入master2.sql,master_auto=0搭建复制步骤
 4.搭建复制通道
change master to master_host='127.0.0.1',master_user='repluser',master_password='replpass',master_port=3308,MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=9460 for channel 'master_3308';

5.检查无误


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29096438/viewspace-2137612/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,草书笔记,仅供参考!

注册时间:2013-09-12

  • 博文量
    529
  • 访问量
    1126944