MySQL 双向备份的实现方法

MySQL 双向备份也被称为 主主备份 ,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave。 准备 服务器 MySQL服务器 版本 IP地址 masterA 5.6.41 192.168.1.201 masterB 5.6.41 192.1

                        <p>MySQL 双向备份也被称为 主主备份 ,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave。</p>

准备

服务器

masterA 5.6.41 192.168.1.201 masterB 5.6.41 192.168.1.202

注:备份的 MySQL 服务器版本尽量保持一致,不同的版本可能二进制日志格式不兼容。

具体操作

注意

操作过程中注意两边数据的一致!!!

masterA 配置

my.cnf

[mysqld]

  1. 服务器唯一标识 server-id=1

  2. 二进制日志文件名 log-bin=mysql-bin

  3. 需要备份的数据库,多个数据库用 , 分隔 binlog-do-db=piumnl

  4. 需要复制的数据库,多个数据库用 , 分隔 replicate-do-db=piumnl

  5. 中继日志文件名 relay_log=mysqld-relay-bin

  6. 手动启动同步服务,避免突然宕机导致的数据日志不同步 skip-slave-start=ON

  7. 互为主从需要加入这一行 log-slave-updates=ON

  8. 禁用符号链接,防止安全风险,可不加 symbolic-links=0

  9. 可不加

  10. resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1

  11. 可不加

  12. 禁用 dns 解析,会使授权时使用的域名无效 skip-host-cache skip-name-resolve

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

masterB 配置

my.cnf

  1. 不再解释各个配置项 [mysqld] server-id=2 log-bin=mysql-bin

binlog-do-db=piumnl replicate-do-db=piumnl relay_log=mysql-relay-bin skip-slave-start=ON log-slave-updates=ON symbolic-links=0

  1. resolve - [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0 master-info-repository=table relay-log-info-repository=table relay-log-recovery=1

skip-host-cache skip-name-resolve

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

创建备份用户

masterA & masterB 都要创建备份用户:

create user 'rep'@'%' identified by 'rep'; # 创建一个账户 grant replication slave on . to 'rep'@'%'; # 授予该账户对任意数据库任意表的主从备份权限

备注:

Linux 下 MySQL 对 root@% 用户关闭了 grant_priv 权限,所以如果是远程登录会出现授权失败的情况 此处备份用户帐号和密码可不一致,此处为了简化操作使用一样的帐号和密码

重启服务器

重启服务器

开启备份

masterA

查看 masterB 状态

show master status\G;

  1. 此处需要关注 File 和 Position 值

开启备份

stop slave;

  1. master_log_file 就是第一步操作的 File 值
  2. master_log_pos 就是第一步操作的 Position 值 change master to master_host=, master_user=, master_port=, master_password=, master_log_file='mysql-log.000003', master_log_pos=154; start slave;

查看结果

show slave status\G;

  1. 查看最重要的两项,两个都必须为 Yes ,有一个为 No 都要去查看错误日志文件,看看什么地方存在问题
  2. Slave_IO_Running: Yes
  3. Slave_SQL_Running: Yes

masterB

反向重复 masterA 的操作

测试

分别在 masterA 和 masterB 中插入数据,并查看另一台服务器是否及时出现预期的数据

问题

MySQL Slave Failed to Open the Relay Log

这应该是中继日志出现问题,可尝试如下操作

stop slave; flush logs; start slave;

Got fatal error 1236 from master when reading data from binary log

从主库中拉取日志时,发现主库的 mysql_bin.index 文件中的第一个文件不存在。

  1. 进行如下操作重置
  2. 如果二进制日志或中继日志有其他作用,请勿进行如下操作 reset master; reset slave; flush logs;

.

使用 .

进行插入、更新和删除操作,将不会进行备份( 这是巨坑 )!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持每日运维。

相关推荐

站点声明:本站部分内容转载自网络,作品版权归原作者及来源网站所有,任何内容转载、商业用途等均须联系原作者并注明来源。

相关侵权、举报、投诉及建议等,请发邮件至E-mail:service@mryunwei.com

回到顶部