基本上,我们有一个大型 MySQL 数据库,并且希望复制到从属服务器(主从设置)。你们有没有关于如何在数据库停机时间最短的情况下执行此操作的分步指南?备份数据库并将备份传输到从属服务器(即使通过专用网络)大约需要 40 分钟左右。停机时间相当长。
答案1
我假设您使用 InnoDB 作为存储引擎。如果是这样,您需要打开二进制日志记录。如果现在没有打开,您需要在修改 my.cnf 后重新启动 MySQL。这是唯一一次停机,之后您可以转储数据库并查看 binlog 位置,而不会阻塞数据库:
mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A
根据此备份,在从属设备上恢复数据。此后,您可以按照以下任何步骤操作:MySQL 复制教程并让从属设备与主设备一起追赶/奔跑。
答案2
要启动复制,您需要在从属服务器上拥有数据库的一致副本
你的表是 myisam 还是 innodb 支持的?找出问题
show table status
并查看“引擎”列
如果所有表都是 innodb,那么你可以使用 mysqldump --single-transaction 进行零停机设置,并将其导入到从属服务器
如果表是 myisam,则必须有停机时间,因为您必须在复制表时锁定表以进行写入。mysqlhotcopy 是帮助您实现这一点的工具。
或者,如果您使用的是 LVM(逻辑卷管理器),则可以停止数据库,在几秒钟内获取 LVM 快照,然后重新启动数据库。然后,您可以从快照中创建一致的副本。
答案3
为了设置从属服务器,您需要拍摄数据快照并记录二进制日志位置。备份数据库不应导致停机,尽管这会导致性能下降,但您无论如何都已经备份了数据库,对吗?您可能会发现备份需要锁定一些表,这可能会导致您的应用程序锁定,确实需要查看它是如何实现的。
你能对磁盘进行快照吗?如果你能进行热备份,这将大大减少停机时间。