如何以最少的停机时间设置MySQL复制


12

基本上,我们有一个大型的MySQL数据库,我们正在寻求复制到从属服务器(主从属服务器设置)。你们是否有有关如何在数据库中最小停机时间执行此操作的分步指南?备份数据库并将备份传输到从服务器(即使是通过专用网络)也需要40分钟左右。相当长的停机时间。

Answers:


15

我假设您使用InnoDB作为存储引擎。如果是这样,则需要打开bin-logging。如果现在不在,则需要在修改my.cnf之后重新启动MySQL。这是唯一的停机时间,之后您可以在不阻塞数据库的情况下以binlog位置进行数据库转储:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

基于此备份,还原从站上的数据。之后,您可以按照任何MySQL复制教程进行操作,并让从属服务器与主服务器一起追赶/运行。


如果某些表未使用innodb会发生什么?如果我使用--databases转储数据库的子集而不是-A,上述备份是否仍然有效?
mathieu

如果某些表不使用innodb,则备份可能不一致。看到这里:stackoverflow.com/a/7461466/104398 ; 备份将不包含那些跳过的数据库。如果您基于这种备份设置复制并且不过滤要复制的内容,则对遗漏的数据库进行某些操作后,复制就会中断。
2013年

好的,我将剩余的myisam表转换为innodb,并确保仅复制/备份所需的数据库。
mathieu

3

要开始复制,您需要在从属服务器上具有一致的数据库副本

您的表是否支持myisam或innodb?找出问题

show table status

然后查看“引擎”列

如果所有表都是innodb,则可以使用mysqldump --single-transaction将停机时间设置为零,并将其导入从服务器

如果表是myisam,则必须停机,因为在复制表时必须锁定表以进行写入。mysqlhotcopy是可以帮助您的工具。

或者,如果您正在使用LVM(逻辑卷管理器),则可以停止数据库,在几秒钟内拍摄LVM快照,然后再次启动数据库。然后,您可以从快照制作一致的副本。


1

为了设置从站,您将需要拍摄数据快照并记录二进制日志位置。备份数据库不会导致停机,尽管这会导致性能下降,但是您是否已经备份了数据库,对吗?您可能会发现备份需要锁定一些表,这可能会导致应用程序锁定,因此确实需要研究如何实现该目的。

您可以快照磁盘吗?如果您可以执行热备份,那将大大减少停机时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.