zoukankan      html  css  js  c++  java
  • mysql双主互备

    mysql主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave),备服务器从主服务器同步数据,完成数据的备份。

    【异步同步】

    前提:2台服务器,主 192.168.1.101 备 192.168.1.102

    1.首先主 备 服务的mysql配置的server的id必须不同,server_id是为了标识binlog,防止同步死循环。

    #服务器ID,同个集群必须不同
    server_id=1
    #端口
    port=63751
    
    skip-name-resolve
    #binlog 过期时间,超过3天未修改的清除
    expire_logs_days = 3
    #binlog 的名称
    log-bin=mysql-bin.log
    #同步的库排除mysql
    binlog-ignore-db=mysql
    #同步的库排除mysql
    replicate-ignore-db=mysql
    slave-skip-errors=all
    
    #id 的自增量
    auto_increment_increment=2
    #id 的开始
    auto_increment_offset=1
    #最大连接数
    max_connections=1000
    #编码
    collation-server=utf8_unicode_ci
    init-connect='SET NAMES utf8;'
    character-set-server=utf8
    

    2.重启mysql

    3.创建主备同步的账户和权限

    grant replication slave on *.* to 'replication'@'192.168.1.101' identified by 'test'; //再备服务器上执行
    grant replication slave on *.* to 'replication'@'192.168.1.102' identified by 'test'; //再主服务器上执行
     
    4.查看mysql当前机器的binlog信息,show master statusG,例如我安装完之后,主备查看的binlog均为如下图所示。

    5.则配置同步信息。

    change master to master_host='192.168.1.102',master_port=3306,master_user='replication',master_password='test',master_log_file='binlog.000002',master_log_pos=565; //主服务器上执行

    change master to master_host='192.168.1.101',master_port=3306,master_user='replication',master_password='test',master_log_file='binlog.000002',master_log_pos=565;//备服务器上执行

    6.打开同步 start slave

    7.查看slave的状态show slave status G看到如下,说明成功

    【半同步机制】

    1.进入mysql执行如下:

    INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

    同时配置文件增加如下配置,重启mysql即可。

    #半同步,10s超时
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=10000
    rpl_semi_sync_slave_enabled=1

    总结:半同步复制个人感觉是维持数据完整性,安全性的的一个策略,虽会损失一点性能,还是值得的。配置很简单,关键是理解其工作机制。

    三个问题:

    1.为什么server_id是必须的,而且配置主从同步的server_id不允许重复。

    答:mysql写入到binlog时候会携带上server_id,所以在主从同步时候,通过server_id 防止死循环。

    假设 server_id的1001 为A,server_id 的 1002 为B,在A机器写入数据的时候binlog带上 1001 信息,通过binlog同步到B机器上,B机器上的binlog会记录的会携带上1001的信息,这时候如果是双主形式的互备,A同步B的时候通过server_id会忽略该数据,防止死循环。

    2.异步机制是什么与半同步机制有何差异。

    答:简单来讲

          a.异步机制任务执行到1即结束事务。

          b.半同步机制是执行到3结束事务,如果在2或者3超时时候,会采用半同步机制。

    综述,半同步机制更能保障数据的一致性问题,而异步机制的性能更优。

    3.双主同步如果字段key是自增长的如何保证不冲突?

     答:如果双主互备的情况下,通过auto_increment_increment,即id的自增为2,然后双主两台的id起始值不同,来保障两台机器的id完全不相同,这样在互相切换过程中不会导致id冲突而丢失数据。

  • 相关阅读:
    Spring异常重试框架Spring Retry
    Ubuntu 16.04无法在WPS中输入中文的问题解决
    Ubuntu 16.04使用百度云的方案
    Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)
    Ubuntu下Deb软件包相关安装与卸载
    Spring在Java Filter注入Bean为Null的问题解决
    MyBatis 3在Insert之后返回主键
    MySQL JDBC URL参数(转)
    MySQL索引原理及慢查询优化
    Markdown 语法整理大集合2017
  • 原文地址:https://www.cnblogs.com/HA-Tinker/p/10970967.html
Copyright © 2011-2022 走看看