数据库外网 ip binlog 主从配置
故事起因
上文说到数据库挂了导致了订购业务生产事故。由于上次数据库挂了(物理上),领导需要我们搞一个数据库异地双活,其实本来广州多个机房就有做多活,可以用内网互相通讯,通过主从同步数据,但是异地机房没做,因为走互联网不稳定。但是还是怕整个广州停电了,把流量切到异地机房去。一开始他们是想着用 logstash、mq 等中间件同步 mysql 数据到异地机房的数据库,我越想越觉得不对劲,因为这样业务侵入性很强,比如下单接口插入一条数据,logstash 就要收集插入的日志,更新一条数据就要收集更新的日志......这样业务拓展代码也要拓展。我也查了很多资料,基本上异地机房的数据库同步都是通过 binlog 同步,可以用 canel 中间件,也可以开启主从同步方式。然后我就开始在测试环境搞两个外网 ip 服务器搭建数据库主从。
准备工作
首先是搭建数据库主从,步骤都是百度按照大佬们的代码一步步敲的,但是偷懒踩了不少坑。。比如突然没了 mysql.pid 文件,后面发现是因为我省略了添加 mysql 用户组。。用 root 账号好像是会有这个问题,后面按照文档敲就没报错了。binlog 同步默认是关闭的,开启 binlog 同步需要在/etc/my.cnf 添加配置
登录主数据库,添加从库同步账号并赋予权限
登录从库,添加同步
后面发现同步不上,日志报错了
一开始以为是账号密码错误问题,后面发现是主库的端口设置白名单了,从库连不上主库的 3306 端口,然后我把主从两个库调转设置就可以了。
主从测试
同步表 test
备库锁表
主库把 count=6 改成 7,添加一条数据备库
由于锁表了无法同步(模拟网络波动)
主库 binlog 下标更新到 7814
备库 binlog 同步到 7284
rollback 解锁后,备库同步成功
备库 binlog 下标同步到 7814,与主库下标一致
总结
接触了 binlog 主从同步配置,感觉对 binlog 有更熟悉的认识,还记得之前一个大佬面试官问我 binlog 能不能关闭,我说不能吧,原来默认就是关闭的= =还有就是做数据库数据同步和主从备份也是一定会用到 binlog,因为可以直接同步 dml 操作。关于数据库的知识还有很多东西要学(八股文),比如说索引结构,redolog 和 undolog 日志,刷盘等等,后面有机会接触的话也可以记录下来~
评论