• mysql 主从,主主,主主复制时的主键冲突解决


    原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据

    把主服务器所有的数据复制给从服务器

     

    slave_sql_running 主从的sql进程

    slave_io_running 主从的io进程

    seconds_behind_master 主从的数据延时

    主从步骤

    1.数据库2边同步,设置my.cnf

    [mysqld]

    log-bin=mysql-bin
    binlog_format=mixed
    server-id = 1
    expire_logs_days = 10
    log-bin=master-bin
    log-bin-index=master-bin.index
    binlog_ignore_db=mysql
    binlog_ignore_db=infomation_schema
    binlog_ignore_db=performance_schema

    2.在master上建立mysql用户,给slave用

    created user 'ruser'@'%' indentified by 'ruserpwd'  建立用户

    grant replication slave on *.* to 'ruser'@'%' 用户授权

    第二种方法:grant replication client,replication slave on *.* to 'ruser'@'192.168.%.%' identified by '密码123'

    格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”;

    grant all privileges on *.* to 'root'@'%' identified by 'wangxiaohu';  所有权限

    flush privileges

    reset master; 清空master

    reset slave; 清空slave

    show master logs; 查看日志

    show master status G  查看master状态,当前日志,及位置master_log_file,master_log_pos

    3.从服务器my.ini 配置

     [mysqld]

    server-id = 2
    expire_logs_days = 10
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin

    slave 从服务器上登录mysql运行change master 命令

    show slave status G 查看slave状态

    change master to 

    MASTER_HOST='192.168.1.1'  ,

    MASTER_USER='' , //主服务器的帐号

    MASTER_PASSWORD='',

    MASTER_PORT=3306,

     MASTER_LOG_FILE='mysql-bin.000001',

     MASTER_LOG_POS=0;

    4.start slave;

    主主复制时的主键冲突解决

    设置my.cnf里面的2个参数auto_increment_increment,auto_increment_offset

    让1台服务器  1,3,5,7来增长

    另1台服务器  2,4,6,8来增长

    一台服务器:

    set global auto_increment_increment = 2;  // 全局

    set global auto_increment_offset = 1;

    set session auto_increment_increment = 2; //当次连接

    set session auto_increment_offset = 1;

    另一台服务器:

    set global auto_increment_increment = 2;

    set global auto_increment_offset = 2;

    set session auto_increment_increment=2;

    set session auto_increment_offset = 2;

    注:auto-increment-increment 和 auto-increment-offset 要写到配置文件 中,防止下次重启后失效.

    有几台服务器,auto_increment_increment就设置几,比如3台服务器,auto_increment_increment=3,  3台服务器的auto_increment_offset依次开始为,1,2,3

    备注:
    log-slave-updates是为从库的写操作记录binlog
    多主互备和主从复制有一些区别,因为多主中的各个库,都可以对服务器有写权限,所以设计到自增长重复问题

    可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。

    在这里我们说的是2台MYSQL服务器,你也可以扩展到多台,实现方法类似
    A -> B -> C-> D ->A
    这样一个环形的备份结构就形成了,最后可要记住 自增长ID(主键)要设计好哦,否则会出错的。

  • 相关阅读:
    base64 c/c++实现
    分段,分页图 http://www.joenchen.com
    CPUID讲解
    密码HASH特点
    C++ 编译器的函数名修饰规则
    exploit已完成,但没有创建会话exploit completed, but no session was created
    获取批处理文件所在路径
    dos/bat批处理教程——第四部分:完整案例
    第三部分:批处理与变量
    第二部分:特殊的符号与批处理
  • 原文地址:https://www.cnblogs.com/microtiger/p/7459321.html
Copyright © 2020-2023  润新知