• 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(主键)要设计好哦,否则会出错的。

  • 相关阅读:
    【JavaWeb项目】一个众筹网站的开发(四)后台用户注册功能
    【JavaWeb项目】一个众筹网站的开发(三)第一个网页
    【JavaWeb项目】一个众筹网站的开发(二)架构搭建之架构测试
    【JavaWeb项目】一个众筹网站的开发(一)架构搭建
    Eclipse安装SVN插件方式简明介绍
    Struts result param详细设置
    第三次寒假作业
    寒假作业二
    我的寒假C(C++)学习计划
    1001. A+B Format (20)的解题思路以及多源代码文件的尝试编写
  • 原文地址:https://www.cnblogs.com/microtiger/p/7459321.html
Copyright © 2020-2023  润新知