本文摘自PHP中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于MySQL双向备份的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
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
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' @ '%' ; # 授予该账户对任意数据库任意表的主从备份权限
|
备注:
- Linux 下 MySQL 对
root@%
用户关闭了 grant_priv
权限,所以如果是远程登录会出现授权失败的情况 - 此处备份用户帐号和密码可不一致,此处为了简化操作使用一样的帐号和密码
重启服务器
重启服务器
开启备份
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修改密码的正确姿势分享
更多相关阅读请进入《备份恢复》频道 >>
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL双向备份的方法介绍(附代码)