当前位置:网站首页 > SQL数据库编程 > 正文

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



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

到此这篇mysql主从主键冲突(mysql主从常见问题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • mysql导入sql文件(mysql导入sql文件过大自动断开)2025-01-28 22:00:07
  • jdbc连接数据库5个步骤mysql(jdbc连接数据库5个步骤代码)2025-01-28 22:00:07
  • mysql导入sql文件语句(mysql8.0导入sql文件)2025-01-28 22:00:07
  • mysql和oracle有什么区别(mysql和oracle的关系)2025-01-28 22:00:07
  • sqlyog打开sql文件(sql server怎么打开sql文件)2025-01-28 22:00:07
  • MySQL增删改查(MySQL增删改查命)2025-01-28 22:00:07
  • mysql主键设计原则(mysql主键原理)2025-01-28 22:00:07
  • 使用pymysql连接数据库(pymysql连接数据库失败)2025-01-28 22:00:07
  • mysql导入sql文件跳过错误(mysql导入sql文件报错)2025-01-28 22:00:07
  • sql写循环语句(sql循环函数)2025-01-28 22:00:07
  • 全屏图片