ubuntu18.04下 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,当然如果服务器多的话,还可以自定义算法,只要不同就可以了
在下面例子中,在两台主主服务器上加入参数,以实现奇偶插入!
记住:在做主主同步时需要设置自增长的两个相关配置,如下:
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

钻石价 50 折 永久钻石免费

已有10人支付

 

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

钻石价 50 折 永久钻石免费

已有10人支付

启动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’);

赞赏

微信赞赏支付宝赞赏

编程知识分享网,一个有趣的平台!
编程知识分享网|编程教程|资源下载|源码下载 » ubuntu18.04下 mysql 主主同步教程[亲测通过]

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
找不到素材资源介绍文章里的示例图片?
对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
关于编程知识分享网(www.ittce.com)
编程知识分享网,一个有趣的平台,小心有毒!

发表评论

  • 23会员总数(位)
  • 180资源总数(个)
  • 0本周发布(个)
  • 0 今日发布(个)
  • 1309稳定运行(天)

提供最优质的资源集合

立即查看 了解详情
升级SVIP尊享更多特权立即升级