我维护大型 MySQL 数据库。我需要每晚备份它,但数据库一直处于活动状态。有来自用户的查询。现在我只是禁用该网站然后进行备份,但这非常糟糕,因为该服务被禁用并且用户不喜欢这样。
如果在备份过程中更改了数据,那么备份数据的好方法是什么?
对此的最佳做法是什么?
我维护大型 MySQL 数据库。我需要每晚备份它,但数据库一直处于活动状态。有来自用户的查询。现在我只是禁用该网站然后进行备份,但这非常糟糕,因为该服务被禁用并且用户不喜欢这样。
如果在备份过程中更改了数据,那么备份数据的好方法是什么?
对此的最佳做法是什么?
我已经使用我的数据库服务器的只读复制从属实现了这个方案。
MySQL 数据库复制非常容易设置和监控。您可以对其进行设置以获取对生产数据库所做的所有更改,然后每晚将其脱机以进行备份。
Replication Slave 服务器可以以只读方式启动,以确保不能直接对其进行更改。
还有其他不需要复制从属的方法,但根据我的经验,这是解决这个问题的一种非常可靠的方法。
这是MySQL Replication上文档的链接。
如果你有一个非常大的(像我一样 50G+)只有 MySQL MyISAM 的数据库,你可以使用锁和rsync
. 根据 MySQL 文档,您可以在读取锁定处于活动状态时安全地复制原始文件,而您无法使用 InnoDB 进行操作。因此,如果目标是零停机时间并且您有额外的 HD 空间,请创建一个脚本:
rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync
然后执行以下操作:
flush tables
flush tables with read lock;
unlock tables;
在第一次运行时 rsync 将在不停止 MySQL 的情况下复制很多内容。第二次运行会很短,只会延迟写查询,所以是真正的零停机解决方案。
rsync
从/tmp/mysql/sync
远程服务器做另一个,压缩,保留增量版本,任何你喜欢的东西。这部分取决于您使用的是 innodb 还是 myiasm。对于innodb;mySQL 有自己的(需要花钱的)解决方案(innodb hot copy),但是你可能想看看 Percona 的开源版本:
您要做的就是所谓的“在线备份”。这是一个指向可能选项矩阵的指针,其中包含更多信息:
http://www.zmanda.com/blogs/?p=19
它基本上归结为您正在使用的存储后端以及您有多少可用硬件。