MySQL基于GTID的主从复制
没开启 GTID 的 MySQL 数据库增加从库请看:优雅地给正在运行的MySQL添加从库
自动同步连接主库 (方法一)
适用于 master 也是新建不久的情况,如果你的 master 所有的 binlog 还在,可以安装 slave,slave 直接 change master to 到 master 端。原理是直接获取 master 所有的 GTID 并执行。
优点:简单方便。不需要备份主库再在从库还原。
缺点:如果 binlog 太多,数据完全同步需要时间较长。如果旧的 binlog 已经被清理了,则不能正常同步。
在从库执行:
1 | CHANGE MASTER TO |
master_auto_position=1
从库自动找同步点
备份导入连接主库 (方法二)
适用于拥有较大数据的情况。(推荐)
通过 master 或者其他 slave 的备份搭建新的 slave。
原理:获取 master 的数据和这些数据对应的 GTID 范围,然后通过 slave 设置 master_auto_position=1
,自动同步,跳过备份包含的 gtid。
缺点:相对来说有点麻烦。
主库使用 mysqldump 导出
1 | mysqldump -uroot -pVb6CAEJqqtcmKndiAkEl -hlocalhost -P3306 --triggers --routines --events --hex-blob --single-transaction --skip-tz-utc --all-databases > backup.sql |
SQL 文件最后有一条:
1 | SET @@GLOBAL.GTID_PURGED='aab83329-fb19-11ee-85e8-4e5363c108f2:1-689'; |
这是记录了当前的 SQL 对应的 GTID 位置?
从库数据导入数据
1 | mysql -uroot -pVb6CAEJqqtcmKndiAkEl -hlocalhost -P3306 < backup.sql |
如果导入报错 @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty
, 需要在从库执行:
1 | -- 查看当前的GTID |
从库连接主库
1 | CHANGE MASTER TO |
从库启动复制线程
1 | mysql> start slave; |
从库查看复制状态
1 | mysql> show slave status \G; |
主库查看状态
1 | show master status; |
其他命令
1 | show binlog events; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 杂烩饭!
评论