qwe3223678qwe 发表于 2018-10-5 12:37:12

MySQL双主(master-master)补充

mysqlA    172.18.252.221   CentOS 6.5  2.6.32-431.el6.x86_64
  mysqlB    172.18.252.222
  MySQL版本    mysql-community-server-5.7.5-0.6.m15.el6.x86_64
  MySQL双主+半同步架构搭建参考上一篇博文:http://blog.51cto.com/12947626/2125165
  本文做一点补充说明:如果mysqlA已经运行了一段时间,要添加一台新的mysqlB, 与mysqlA实现主主复制,就要先复制mysqlA上的数据导入到mysqlB,使数据保持一致;记录mysqlA上binlog的文件名和Position,在mysqlB上执行CHANGEMASTER TO ...;再记录mysqlB上的binlog的文件名和Position,在mysqlA上执行CHANGEMASTER.(导入到B的数据应该是使用mysqlA的全量备份+binlog)
  下面有两种实现方法:
  方法一、
  1)对mysqlA数据库锁表操作,不让数据再进行写入动作
  > flush tables withread lock;
  > 不要退出连接,另开一个终端执行备份操作.
  2)备份mysqlA的数据库
  mysqldump--uroot-p--single-transaction--opt--events--triggers    --routines--flush-logs--master-data=2   --databases db1db2>db.sql
  --flush-logs:选项用以生成新的二进制日志文件(滚动二进制文件使其起始位置完全)
  --mater-data :选项值等于2 ,备份后的sql文件里CHANGE MASTER语句被注释。
  --single-transaction:InnoDB表在备份时,通常启用选项--single-transaction来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为: REPEATABLEREAD,以确保本次会话(mysqldump)时,不会看到其他会话提交了的数据。
  3)看mysqlA数据库的状态,记录File和Position项的值后解锁;
  show   masterstatus;
  unlock   tables;
  4)在mysqlB上导入mysqlA的数据:
  >mysql   -uroot-p 'repl'< db.sql
  5)生成CHANGEMASTER 语句,然后在mysqlB上执行
  >STOPSLAVE;
  >CHANGEMASTERTO MASTER_HOST='172.18.252.221' , MASTER_USER='repl_user',MASTER_PASSWORD='repl' , MASTER_LOG_FIEL='mysql-bin.000002', MASTER_LOG_POS='120';
  > START   SLAVE;
  > SHOWSLAVESTATUS\G
  Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,从库mysqlB配置成功。
  6)记录mysqlB的binlogFile和Position项的值,生成CHANGEMASTER语句,然后在mysqlA上执行如上操作(先stopslave;...),最后启动slave.

页: [1]
查看完整版本: MySQL双主(master-master)补充