假设我正在设置一个新的奴隶。运行 mysql -e "STOP SLAVE" 后,我从 mysqldump 开始,将其传输并将其恢复到新服务器。
如果我没有在 STOP SLAVE 之后和运行 mysqldump 之前捕获 BINLOG 文件名和位置,那么如果我只是使用以前的/旧的 binlog 文件名(已验证存在于主服务器上并且比备份更早),会发生什么零位置?
它似乎只是强制新的主服务器将所有事件重播到新的从服务器,显然包括一些已经在备份中表示的插入、更新和删除(发生在重叠时间段内的事件)。
这有什么不对或有风险吗?除了浪费额外的时间和 CPU 周期(可能重放一天的重叠事务)之外,还有其他缺点吗?
我有个惊喜给你
二进制日志中的每个位置都基于写入 SQL 语句时二进制日志的文件大小。
这个概念更有趣的是二进制日志的头在开始位置上不同(没有文字位置 0 这样的东西)
这些是从 Master 的空二进制日志复制的起点
我第一次写这篇文章是在 2011 年 2 月 4 日
这是建议的操作步骤
mysqlbinlog
针对该中继日志运行CHANGE MASTER TO
无论您选择什么主二进制日志,请在从属服务器上的命令中使用该二进制日志CHANGE MASTER TO
命令中使用该位置这是最大程度地减少由于双密钥引起的任何数据冲突的最佳方法
可以肯定的是,在 Slave 上将其添加到 my.cnf
然后重启mysql。这将绕过运行后的所有重复键冲突
START SLAVE;
。当 Seconds_Behind_Master 达到 0 时,删除该行并在 Slave 上重新启动 mysql。从那里开始,MySQL 复制方面的一切都应该没问题。风险/缺点,尤其是在使用基于语句的复制时: