如何在不转储主服务器的情况下重建 MySQL 复制?

如何在不转储主服务器的情况下重建 MySQL 复制?

我们的 MySQL 数据库已经变得相当大,我正在运行主复制。复制已中断。我正在尝试重建第二个主服务器,而不会在执行 mysqldump 时冻结第一个主服务器。数据库足够大,转储需要几个小时,而我无法让数据库离线那么长时间。

如何在不转储主服务器的情况下重建 MySQL 复制?

答案1

看看Percona 工具包.pt-table-checksum可以帮助您找出不同步的表格,pt-table-sync然后可以使用。

答案2

补充@quanta的回答,如果你在尝试比较和修复复制时没有成功,你可以使用随附的innobackupex工具percona xtra-备份工具可以快速复制主服务器,然后可以将其还原到从服务器。(运行需要一段时间,但锁定表的时间比mysqldump

基本上,innobackupex 可与 innodb 和 myisam 表一起使用,并利用底层实现来大幅改善导出时间,从而仅以最短的锁定时间生成一致的备份。

网站上有一个从主服务器创建从服务器的演示示例; http://www.percona.com/doc/percona-xtrabackup/howtos/setting_up_replication.html

答案3

Tom H 的建议也很棒。如果你能让 Xtra 恢复工作,那就太好了。我不确定在这种情况下什么是最好的,了解以下内容会有所帮助:

MySQL 版本 全部 InnoDB?全部 MyISAM?还是混合使用?如果是 InnoDB,您是否使用每个表一个文件?多大才算大?(50 GB 还是 500 GB?)

如果由于某种原因您无法让 Xtrabackup 工作,或者无法使用 @quanta 的建议使用 pt 工具,您可能必须采用老式方法,停止 mysql 并将数据目录复制到从属服务器,进行相应调整并启动 repl 备份。如果您要处理 100 GB 的数据,并且需要通过网络进行复制,并且您有多核/CPU,您可能需要考虑使用 pigz 进行复制 http://zlib.net/pigz/ 这帮助我们将复制转储文件或目录所需的时间从 4.5 小时减少到 2 小时。

祝你好运,我知道这会带来多大的压力。

答案4

如果 mysql 分区位于 LVM 上,那么我们可以mylvm备份。它将拍摄快照并保存坐标。重建 mysql 的最快方法是使用数据目录的备份。然后您可以运行优化来优化。

如果您没有 LVM,可以关闭 mysql 服务器。1
. 在主服务器上执行读锁定并记下位置。2
. 关闭 mysql
3. 将数据目录复制到目标计算机。您可以创建数据目录的本地副本,这通常比网络传输更快,以最大限度地减少 mysql 停机时间。4
. 启动 mysql
5. 在目标计算机上,确保 ib_logfile 设置与主服务器相同,否则 mysql 会发出警告。

数据复制很少会出现不干净的情况,所以可能需要再试一次。

相关内容