zoukankan      html  css  js  c++  java
  • MySQL主从双向同步

    最近部署测试环境,涉及到MySQL数据库主从双向同步的部署,记录一下部署过程,正常读写都发生在主库,从库作为备选数据库(热备份),当主库发生异常,数据库自动切换到从库,这里面是怎么监控数据库异常并触发自动切换,就不在这里研究记录了(公司用的自研中间件,这里可以使用heartbeat实现,暂不做研究);另外,主库和从库都还可以配置一个只读模式的备库,可以实现读写分离(使用mycat实现),这个看实际业务性能需求是否需要配置。下面只简单介绍主从双向同步的配置:

    1. 原理:网上找的一张图解,应该是比较清晰的画出了组网中各个关键部件和作用,这张图解是主从复制,并不是双向同步,不过双向同步也是差不多了,只不过主库既是master也是slave,从库也即是master也是slave。

                  

    2. 环境准备,主从库的MySQL版本装同一个版本(5.6.38),避免出现未知的异常

    主库:192.168.245.130:3306

    从库:192.168.245.131:3306

    3. 主库和从库的配置保持一致,除了server-id

    # 设置server_id,主从服务器配置不同的值
    server-id = 1
    # 开启二进制日志功能,最好是绝对路径
    log_bin = /opt/database/mysql/mysql-bin.log
    # 中继日志路径
    relay_log = /opt/database/mysql/mysql-relay-bin.log
    # 允许从库将其重放的事件也记录到自身的二进制日志中
    log_slave_updates = 1
    # 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days = 7
    # slave重放的事件时忽略的错误,all是忽略所有错误
    # ddl_exist_errors:1007,1008,1050,1051,1054,1060,1061,1068,1094,1146
    slave-skip-errors = ddl_exist_errors

     4. 主从服务均创建帐号并授权:

    # 在131机器执行下面SQL,在130机器上面把130换成131后执行,密码自定义
    # 创建用户repl
    CREATE USER 'repl'@'192.168.245.130' IDENTIFIED BY '123456';
    # 授权
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.245.130';
    # 刷新权限
    flush privileges;

    5. 主从服务器上均查看slave状态:SHOW MASTER STATUS;

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 | 154 | | | |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)

    分别记录主从服务器的File 和 Position,后面有用

    6. 主从服务均执行slave同步语句,MASTER_LOG_FILE和MASTER_LOG_POS填写上一步查询的值,MASTER_HOST,MASTER_USER,MASTER_PASSWORD根据实际情况填写,当使用 MASTER_AUTO_POSITION 参数的时候,MASTER_LOG_FILE,MASTER_LOG_POS参数不能使用

    CHANGE MASTER TO MASTER_HOST='192.168.245.130', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

    7. 主从服务器均启动slave:START SLAVE;

    8. 主从服务器均查看slave状态:SHOW SLAVE STATUSG;

    mysql> SHOW SLAVE STATUSG;
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.245.130
    Master_User: rep
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000001
    Read_Master_Log_Pos: 154
    Relay_Log_File: mysqld-relay-bin.000001
    Relay_Log_Pos: 117
    Relay_Master_Log_File: mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ...

    状态中显示Slave_IO_Running和Slave_SQL_Running状态均为YES,说明主从同步已经配置完成,其中Seconds_Behind_Master显示比master落后的数据时延,通过这个数据可以查看主从的数据时差,判断主从同步的性能压力。

    9. 常见问题:

    a. 主从复制的时候,SQL线程执行的时候出现异常,Slave_SQL_Running状态编程NO,该怎么解决?

    目前本人也没有比较好的办法解决,在配置参数里面添加了slave-skip-errors参数进行忽略错误,实际生产环境该参数如何添加要实际评估,如果不加该参数,出现SQL执行异常的时候,主从同步其实是会阻塞的,只能手动恢复,重新指定pos,stop salve -》change master to -》start slave

    b. 怎么删除bin日志

    stop salve -》reset slave -》start slave

    c. 怎么开始GTID(全局事务ID)

    在my.cfg配置文件添加如下参数,然后重启MySQL:

    gtid_mode = on
    enforce_gtid_consistency = 1
    log_slave_updates = 1

  • 相关阅读:
    Java内部类与异常类
    Java 继承和接口
    134. 加油站
    P1567 统计天数
    P2141 珠心算测验
    P1428 小鱼比可爱
    P1427 小鱼的数字游戏
    python中使用xlrd、xlwt操作excel表格详解
    同步机制
    CSS学习
  • 原文地址:https://www.cnblogs.com/andrew209/p/10851874.html
Copyright © 2011-2022 走看看