mysql 双主 SAN_mysql 双主互备<3>

双主互备的操作与主从互备基本相同,只是重复了一次而已

双主互备的ID冲突处理:

Mysql双主自增长冲突处理

多主互备和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题

出现的问题(多主自增长ID重复)

1:首先我们通过A,B的test表结构

2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1

3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1

4:然后 我们同时启动A,B,就会出现主键ID重复

解决方法:

我们只要保证两台服务器上插入的自增长数据不同就可以了

如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了

在这里我们在A,B上加入参数,以实现奇偶插入

A:my.cnf上加入参数

auto_increment_offset = 1

auto_increment_increment = 2

这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了

B:my.cnf上加入参数

auto_increment_offset = 2

auto_increment_increment = 2

这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了

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

1、配置文件修改

主服务器1修改(master)

修改mysql配置

找到主数据库的配置文件my.cnf(或者my.ini),开启二进制日志,和server-id

vi  my.cnf

[mysqld]

log-bin=mysql-bin              #记录二进制日志

server-id = 1

auto_increment_increment=2

expire_logs_days = 3              #binlog过期时间,超过三天未修改的清楚

binlog-do-db=kvdata             #master需要记录日志的同步库,多个写多行

binlog-ignore-db=mysql        #master不需要记录日志的同步库

replicate-ignore-db=mysql     #复制时需要排除的数据库

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

实际操作设置:

33061端口的

主server-id  1      从server-id 101

33062端口的

主server-id  2      从server-id 102

33063端口的

主server-id  3      从server-id 103

33064端口的

主server-id  4      从server-id 104

主服务器2修改(master)

找到主数据库的配置文件my.cnf(或者my.ini),开启二进制日志,和server-id

vi  my.cnf

[mysqld]

log-bin=mysql-bin              #记录二进制日志

server-id = 2

auto_increment_increment=2

expire_logs_days = 3              #binlog过期时间,超过三天未修改的清楚

binlog-do-db=kvdata             #master需要记录日志的同步库,多个写多行

binlog-ignore-db=mysql        #master不需要记录日志的同步库

replicate-ignore-db=mysql     #复制时需要排除的数据库

replicate-ignore-db=information_schema

replicate-ignore-db=performance_schema

2、启动mysql

修改mysql启动密码:

vi  /lsl/cluster/mysql/33061/log/mysqld_safe.log

在该文件中找到数据库第一次启动时创建的密码

A temporary password is generated for root@localhost:xxxxxx

使用该密码登录数据库:

/opt/JMKVCloud/MessageSoft/Mysql/bin/mysql  -uroot  -P33061 -S /lsl/cluster/mysql/33061/mysql.sock   -p

>alter user 'root'@'localhost' identified by 'jmuser';

>flush privileges;

>grant all privileges on *.* to 'root'@'%' identified by 'jmuser';

>flush privileges;

3、在两台服务器上各自创建主从同步账户和权限

以下操作,在两个mysql都执行

>create user jm@192.168.10.56 identified by 'jmuser';

>GRANT  REPLICATION SLAVE ON *.* TO jm@192.168.10.56 identified by 'jmuser';

> flush privileges;

4、各自配置对方的同步信息

33061mysql

mysql> change master to master_host='192.168.10.56',master_port=33062, master_user='jm', master_password='jmuser',master_log_file='mysql-bin.000004',master_log_pos=852;

33062mysql

mysql> change master to master_host='192.168.10.56',master_port=33061, master_user='jm', master_password='jmuser',master_log_file='mysql-bin.000004',master_log_pos=899;

5、各自打开同步

以下操作,在两个mysql都执行

> start slave;

6、查看slave状态

以下操作,在两个mysql都执行

mysql> show slave status \G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.10.56                              master的相关信息,出问题了,可以从这里查看分析

Master_User: jm

Master_Port: 33061

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 92397

Relay_Log_File: localhost-relay-bin.000002

Relay_Log_Pos: 91865

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes           #此处两个yes,表示主从同步成功

Slave_SQL_Running: Yes

Replicate_Do_DB: kvdata

Replicate_Ignore_DB: mysql

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0                #出问题了,可以从这里找参考信息

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 92397

Relay_Log_Space: 92076

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: 572d771a-0f6a-11ea-96c4-484d7ec7da58

Master_Info_File: /home/mysql/33061/data/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值