ubuntu18.04下 mysql5.7.35 主主同步教程[亲测通过]

在做主主同步前,提醒下需要特别注意的一个问题:
主主复制和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题,例如:
出现的问题(多主自增长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,当然如果服务器多的话,还可以自定义算法,只要不同就可以了
在下面例子中,在两台主主服务器上加入参数,以实现奇偶插入!
记住:在做主主同步时需要设置自增长的两个相关配置,如下:
auto_increment_offset 表示自增长字段从那个数开始,取值范围是1 .. 65535。这个就是序号。如果有n台mysql机器,则从第一台开始分为设1,2…n
auto_increment_increment 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535。如果有n台mysql机器,这个值就设置为n。

在主主同步配置时,需要将两台服务器的:
auto_increment_increment 增长量都配置为2
auto_increment_offset 分别配置为1和2。这是序号,第一台从1开始,第二台就是2,以此类推…..
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。(针对的是有自增长属性的字段)

先初始化数据库的data目录
mysqld –initialize –console

停止mysql服务
systemctl stop mysql.service

主1库设置
vi /etc/mysql/mysql.conf.d/mysqld.cnf

隐藏内容

此处内容需要权限查看

  • 普通20金币
  • 会员200金币
  • 永久会员免费推荐

 

主2库设置
vi /etc/mysql/mysql.conf.d/mysqld.cnf

隐藏内容

此处内容需要权限查看

  • 普通20金币
  • 会员200金币
  • 永久会员免费推荐

启动MySQL服务
systemctl start mysql.service

获取log-bin操作:
show master status;
File:binglog 文件名,每次重启 mysql 服务都会生成一个新的 binlog 文件(序号递增),当文件大小超过限制(默认1G)时也会生产一个新的 binlog 文件。
Position:binlog 文件偏移量,等于binglog文件大小(字节数)
Binlog_Do_DB:要同步的数据库。不设置的话默认同步所有的数据库,包括 mysql 默认的数据库。
Binlog_Ignore_DB:不需要同步的数据库。

主1操作:
mysql -uroot -pMysql5.7@Abc
# 停止正在进行的slave(如果有,此方法也用于修改slave的值(如果参数不对))
stop slave;
# 需要主机名,上面步骤的账户密码以及日志文件名字和位置(请根据实际情况自行修改)
change master to
master_host=’172.26.31.148′,
master_user=’root’,
master_port=3306,
master_password=’xxxx’,
master_log_file=’server2-bin.000001′,
master_log_pos=154;
# 启动
start slave;
# 查看状态
show slave status\G

 

主2操作:
mysql -uroot -pMysql5.7@Abc
# 停止正在进行的slave(如果有,此方法也用于修改slave的值(如果参数不对))
stop slave;
# 需要主机名,上面步骤的账户密码以及日志文件名字和位置(请根据实际情况自行修改)
change master to
master_host=’172.26.31.147′,
master_user=’root’,
master_port=3306,
master_password=’xxxxx’,
master_log_file=’server1-bin.000001′,
master_log_pos=154;
# 启动
start slave;
# 查看状态
show slave status\G

数据测试:
CREATE TABLE `person` (
` id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int NOT NULL,
PRIMARY KEY (` id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `person` (` id`, `name`, `age`) VALUES (‘1’, ‘小明’, ’28’);
INSERT INTO `person` (` id`, `name`, `age`) VALUES (‘2’, ‘李华’, ’30’);

 

 

附server1配置:

隐藏内容

此处内容需要权限查看

  • 普通20金币
  • 会员200金币
  • 永久会员免费推荐

 

server2配置:

隐藏内容

此处内容需要权限查看

  • 普通20金币
  • 会员200金币
  • 永久会员免费推荐
扫码领红包

微信赞赏支付宝扫码领红包

发表回复

后才能评论