MySQL 双向备份的实现方法

 更新时间:2019年04月10日 15:14:17   作者:魏晋秋  
这篇文章主要介绍了MySQL 双向备份的实现方法,即两个 MySQL 服务都是 Master,其中任意一个服务又是另一个服务的 Slave,感兴趣的可以了解一下

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

准备

服务器

MySQL服务器 版本 IP地址
masterA 5.6.41 192.168.1.201
masterB 5.6.41 192.168.1.202

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

具体操作

注意

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

masterA 配置

my.cnf

[mysqld]
# 服务器唯一标识
server-id=1
# 二进制日志文件名
log-bin=mysql-bin

# 需要备份的数据库,多个数据库用 , 分隔
binlog-do-db=piumnl
# 需要复制的数据库,多个数据库用 , 分隔
replicate-do-db=piumnl
# 中继日志文件名
relay_log=mysqld-relay-bin
# 手动启动同步服务,避免突然宕机导致的数据日志不同步
skip-slave-start=ON
# 互为主从需要加入这一行
log-slave-updates=ON
# 禁用符号链接,防止安全风险,可不加
symbolic-links=0

# 可不加
# 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

# 可不加
# 禁用 dns 解析,会使授权时使用的域名无效
skip-host-cache
skip-name-resolve

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

masterB 配置

my.cnf

# 不再解释各个配置项
[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

# 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'@'%'; # 授予该账户对任意数据库任意表的主从备份权限

备注:

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

重启服务器

重启服务器

开启备份

masterA

查看 masterB 状态

show master status\G;
# 此处需要关注 File 和 Position 值

开启备份

stop slave;

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

查看结果

show slave status\G;
# 查看最重要的两项,两个都必须为 Yes ,有一个为 No 都要去查看错误日志文件,看看什么地方存在问题
# Slave_IO_Running: Yes
# 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 文件中的第一个文件不存在。

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

<database>.<table>

使用 <database>.<table> 进行插入、更新和删除操作,将不会进行备份( 这是巨坑 )!!!

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

您可能感兴趣的文章:

相关文章

  • MySQL ifnull()函数的具体使用

    MySQL ifnull()函数的具体使用

    本文主要介绍了MySQL ifnull()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • MySQL 声明变量及存储过程分析

    MySQL 声明变量及存储过程分析

    这篇文章主要介绍了MySQL 声明变量及存储过程的相关内容,小编觉得挺不错的,这里分享给大家,需要的朋友可以参考下。
    2017-10-10
  • mysql中如何用varchar字符串按照数字排序

    mysql中如何用varchar字符串按照数字排序

    这篇文章主要介绍了mysql中用varchar字符串按照数字排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 在MySQL中使用mysqlbinlog flashback的简单教程

    在MySQL中使用mysqlbinlog flashback的简单教程

    这篇文章主要介绍了在MySQL中使用mysqlbinlog flashback的简单教程,可以很方便地恢复数据,作者还列出了使用时一些需要注意的地方,需要的朋友可以参考下
    2015-05-05
  • Mysql 设置boolean类型的操作

    Mysql 设置boolean类型的操作

    这篇文章主要介绍了Mysql 设置boolean类型的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySQL中使用去重distinct方法的示例详解

    MySQL中使用去重distinct方法的示例详解

    这篇文章主要介绍了MySQL中使用去重distinct方法的示例详解。distinct用来查询不重复记录的条数,distinct表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的。地产感兴趣的可以了解一下
    2020-07-07
  • Mysql的列修改成行并显示数据的简单实现

    Mysql的列修改成行并显示数据的简单实现

    这篇文章主要介绍了Mysql的列修改成行并显示数据的简单实现,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • windows10下mysql 8.0 下载与安装配置图文教程

    windows10下mysql 8.0 下载与安装配置图文教程

    这篇文章主要介绍了windows10下mysql 8.0 下载与安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • mysql 全文检索中文解决方法及实例代码

    mysql 全文检索中文解决方法及实例代码

    这篇文章主要介绍了mysql 全文检索中文解决方法及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • MySQL字符集utf8修改为utf8mb4的方法步骤

    MySQL字符集utf8修改为utf8mb4的方法步骤

    这篇文章主要给大家介绍了关于MySQL字符集utf8修改为utf8mb4的方法步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07

最新评论