MySQL双向备份的方法介绍(附代码)


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于MySQL双向备份的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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

准备

服务器

MySQL服务器版本IP地址
masterA5.6.41192.168.1.201
masterB5.6.41192.168.1.202

注:

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

具体操作

注意

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

masterA 配置

my.cnf

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# 不再解释各个配置项

[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 都要创建备份用户:

1

2

create user 'rep'@'%' identified by 'rep';    # 创建一个账户

grant replication slave on *.* to 'rep'@'%';  # 授予该账户对任意数据库任意表的主从备份权限

备注:

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

重启服务器

重启服务器

开启备份

masterA

查看 masterB 状态

1

2

show master status\G;

# 此处需要关注 File 和 Position 值

开启备份

1

2

3

4

5

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;

查看结果

1

2

3

4

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

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

1

2

3

stop slave;

flush logs;

start slave;

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

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

1

2

3

4

5

# 进行如下操作重置

# 如果二进制日志或中继日志有其他作用,请勿进行如下操作

reset master;

reset slave;

flush logs;

<database>.<table>

使用 <database>.<table> 进行插入、更新和删除操作,将不会进行备份( 这是巨坑 )!!!【相关推荐:MySQL教程】

以上就是MySQL双向备份的方法介绍(附代码)的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql怎么优化修复数据库表

cpu资源和可用内存大小对数据库性能有何影响?

如何在mac上安装mysql?

学习mysql不是内部命令的错误解决方案

mysql 如何写循环语句

mysql支持的数据类型的详细介绍

mysql数据库在centos7下无法远程连接的原因以及解决详解

mysql二进制日志相关问题详解

mysql基于日志的主从复制详解

mysql8.0修改密码的正确姿势分享

更多相关阅读请进入《备份恢复》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...