写点什么

数据库外网 ip binlog 主从配置

作者:Java你猿哥
  • 2023-05-12
    湖南
  • 本文字数:1100 字

    阅读完需:约 4 分钟

故事起因

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

准备工作

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


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

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

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


登录从库,添加同步

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;
复制代码

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


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

主从测试

同步表 test

备库锁表


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


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



主库 binlog 下标更新到 7814


备库 binlog 同步到 7284


rollback 解锁后,备库同步成功


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


总结

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

用户头像

Java你猿哥

关注

一只在编程路上渐行渐远的程序猿 2023-03-09 加入

关注我,了解更多Java、架构、Spring等知识

评论

发布
暂无评论
数据库外网ip binlog主从配置_Java_Java你猿哥_InfoQ写作社区