2025年mysql主从主键冲突(mysql主从常见问题)

mysql主从主键冲突(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

大家好,我是讯享网,很高兴认识大家。



e5906cab63cab5e0a49612e09721e8e4.png
讯享网

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

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

28ce4cfc2f29978ea1be7a3b92501415.png

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

60a2e779257c6783c5f11ab7e1286c7d.png

备注:

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

小讯
上一篇 2025-05-23 19:42
下一篇 2025-04-22 15:38

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183757.html