天天看点

数据库外网ip binlog主从配置

作者:Java小熊

故事起因

上文说到数据库挂了导致了订购业务生产事故。由于上次数据库挂了(物理上),领导需要我们搞一个数据库异地双活,其实本来广州多个机房就有做多活,可以用内网互相通讯,通过主从同步数据,但是异地机房没做,因为走互联网不稳定。但是还是怕整个广州停电了,把流量切到异地机房去。一开始他们是想着用logstash、mq等中间件同步mysql数据到异地机房的数据库,我越想越觉得不对劲,因为这样业务侵入性很强,比如下单接口插入一条数据,logstash就要收集插入的日志,更新一条数据就要收集更新的日志......这样业务拓展代码也要拓展。我也查了很多资料,基本上异地机房的数据库同步都是通过binlog同步,可以用canel中间件,也可以开启主从同步方式。然后我就开始在测试环境搞两个外网ip服务器搭建数据库主从。

准备工作

首先是搭建数据库主从,步骤都是百度按照大佬们的代码一步步敲的,但是偷懒踩了不少坑。。比如突然没了mysql.pid文件,后面发现是因为我省略了添加mysql用户组。。用root账号好像是会有这个问题,后面按照文档敲就没报错了。binlog同步默认是关闭的,开启binlog同步需要在/etc/my.cnf添加配置

ini复制代码log-bin=mysql-bin
binlog-format=Row
#两个数据库server-id不一样
server-id=100
           

登录主数据库,添加从库同步账号并赋予权限

csharp复制代码#第一个slave是账号  第二个slave是密码
grant replication slave on *.* to 'slave'@'%' identified by 'slave';
#查看主库binlog文件和下标
show master status;
           
数据库外网ip binlog主从配置

登录从库,添加同步

js复制代码#参数为ip 端口 账号 密码 binlog文件 下标
change master to master_host='主库ip', master_port=3306,master_user='root', master_password='root',master_log_file='binlog.000004',master_log_pos=156;
#查看从库同步状态
show slave status;
           

后面发现同步不上,日志报错了

数据库外网ip binlog主从配置

一开始以为是账号密码错误问题,后面发现是主库的端口设置白名单了,从库连不上主库的3306端口,然后我把主从两个库调转设置就可以了。

主从测试

同步表 test

备库锁表

数据库外网ip binlog主从配置

主库把count=6改成7,添加一条数据备库

数据库外网ip binlog主从配置

由于锁表了无法同步(模拟网络波动)

数据库外网ip binlog主从配置
数据库外网ip binlog主从配置

主库binlog下标更新到7814

数据库外网ip binlog主从配置

备库binlog同步到7284

数据库外网ip binlog主从配置

rollback解锁后,备库同步成功

数据库外网ip binlog主从配置

备库binlog下标同步到7814,与主库下标一致

数据库外网ip binlog主从配置

总结

接触了binlog主从同步配置,感觉对binlog有更熟悉的认识,还记得之前一个大佬面试官问我binlog能不能关闭,我说不能吧,原来默认就是关闭的= =还有就是做数据库数据同步和主从备份也是一定会用到binlog,因为可以直接同步dml操作。关于数据库的知识还有很多东西要学(八股文),比如说索引结构,redolog和undolog日志,刷盘等等,后面有机会接触的话也可以记录下来~

链接:https://juejin.cn/post/7231804086383214647

继续阅读