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

  • 相关阅读:
    剑指offer-二维数组中的查找
    TF-IDF(term frequency–inverse document frequency)
    Java实现中文字符串的排序功能
    当前课程
    【R】资源整理
    CentOS相关
    【转】Setting up SDL Extension Libraries on MinGW
    【转】Setting up SDL Extension Libraries on Visual Studio 2010 Ultimate
    【转】Setting up SDL Extension Libraries on Code::Blocks 12.11
    【转】Setting up SDL Extension Libraries on Visual Studio 2019 Community
  • 原文地址:https://www.cnblogs.com/andrew209/p/10851874.html
Copyright © 2011-2022 走看看