• 技术文章 >数据库 >mysql教程

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

    不言不言2019-04-11 11:52:33转载1548

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

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

    准备

    服务器

    MySQL服务器版本IP地址
    masterA5.6.41192.168.1.201
    masterB5.6.41192.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教程

    以上就是MySQL双向备份的方法介绍(附代码)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:备份恢复 mysql
    上一篇:SQL语句在MySQL中如何执行? 下一篇:Redis实现秒杀的方法介绍(附代码)
    千万级数据并发解决方案

    相关文章推荐

    • Ubuntu命令行下MySQL数据导出与导入语句• 对于MySQL在保存时间信息上的建议• Centos7.6安装MySQL和Redis的教程• SQL语句在MySQL中如何执行?
    1/1

    PHP中文网