Chinaunix首页 | 论坛 | 博客
  • 博客访问: 609123
  • 博文数量: 142
  • 博客积分: 116
  • 博客等级: 入伍新兵
  • 技术积分: 1445
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-28 08:37
文章分类

全部博文(142)

文章存档

2017年(7)

2016年(57)

2015年(48)

2014年(30)

我的朋友

分类: Mysql/postgreSQL

2015-12-02 20:10:50

5.7新增了GTID特性,导致主从复制配置有些变化。

my.cnf配置
  1. # replication for master and slave
  2. server_id = 1
  3. log_bin=mysql-bin
  4. binlog_format=mixed

  5. # enable GTID
  6. gtid-mode = on
  7. enforce-gtid-consistency = true
  8. log_slave_updates=1

  9. # replication for slave
  10. relay_log=new-relay-bin
  11. relay_log_info_file=new-relay-info
  12. read_only=1

在主从库中增加用户
  1. create user repl@'%' identified by 'xxxx';
    grant replication slave, replication client on *.* to repl@'%';
  2. flush priveleges;

锁定主库,导出数据
  1. mysqldump.exe -u root -h 127.0.0.1 -p --set-gtid-purged=OFF --all-databases --triggers --routines --events > ..\xxx.dmp

以--skip-slave-start方式启动从库,把主库数据导入从库
  1. mysql -u root -h slave -p < ..\xxx.dmp

在从库设置master
  1. change master to master_host='master',
  2. master_user='repl',
  3. master_password='xxxx',
  4. MASTER_AUTO_POSITION = 1;

因为是从dump恢复的从库,所以启动复制前,
先要设置好从库的gtid_purged,这是为了告诉从库,以前的数据已经不需要同步了,
以避免启动复制时,从库仍然试图重新执行binlog,发生sql错误。

  1. stop slave;
  2. reset slave;

  3. -- 为了设置gtid_purged,必须先清除gtid_executed。
  4. reset master;
  5. -- 这个gtid set是主库的gtid_executed。
  6. set global gtid_purged='146ca884-97f0-11e5-aa16-50e54948b96b:1-472';

  7. show global variables like '%GTID%';
  8. show master status;

  1. -- 好像不用再执行change master了。。。
  2. change master to master_host='master',
  3. master_user='repl',
  4. master_password='xxx',
  5. MASTER_AUTO_POSITION = 1;
  6. SHOW SLAVE STATUS;
  7. start slave;
当IO_thread和SQL_thread都是running的时候,就说明从库启动正常了。


如果从库上需要跳过个别gtid的时候,可以通过插入空事务的方法来做。如果需要跳过的事务太多,就得循环了。。。
  1. set GTID_NEXT='7b970848-a23c-11e5-af70-005056892477:44288'
  2. begin;
  3. commit;
  4. SET GTID_NEXT='AUTOMATIC';

最后,可以通过mysqlbinlog命令来查看bin-log,以便定位复制出错的sql所对应的gtid。



阅读(3070) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~