您的当前位置:首页正文

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

2024-08-08 来源:客趣旅游网
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-binbinlog_format=mixedserver-id = 1

expire_logs_days = 10log-bin=master-bin

log-bin-index=master-bin.indexbinlog_ignore_db=mysql

binlog_ignore_db=infomation_schemabinlog_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; 清空masterreset slave; 清空slaveshow master logs; 查看⽇志

show master status \\G 查看master状态,当前⽇志,及位置master_log_file,master_log_pos3.从服务器my.ini 配置 [mysqld]

server-id = 2

expire_logs_days = 10

relay-log-index=slave-relay-bin.indexrelay-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(主键)要设计好哦,否则会出错的。

因篇幅问题不能全部显示,请点此查看更多更全内容