大数据库备份最佳实践



我维护着大型MySQL数据库。我需要每天晚上备份它,但数据库一直处于活动状态。有来自用户的查询。现在我只是禁用网站,然后进行备份,但这非常糟糕,因为服务被禁用并且用户不喜欢这样。

如果在备份过程中更改数据,备份数据的好方法是什么?

对此的最佳实践是什么?

我已经使用数据库服务器的只读复制从属服务器实现了此方案。

MySQL数据库复制非常容易设置和监控。您可以将其设置为获取对生产数据库所做的所有更改,然后每晚脱机进行备份。

复制从属服务器可以作为只读服务器启动,以确保不能直接对其进行更改。

还有其他方法不需要复制从属,但根据我的经验,这是解决此问题的非常可靠的方法。

这是指向MySQL复制文档的链接。

如果你有一个非常大的(像我一样50G +)MySQL MyISAM数据库,你可以使用锁和rsync。根据MySQL文档,您可以在读锁定处于活动状态时安全地复制原始文件,并且无法使用InnoDB执行此操作。因此,如果目标是零停机时间并且您有额外的高清空间,请创建一个脚本:

rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync

然后执行以下操作:

  1. flush tables
  2. 运行脚本
  3. flush tables with read lock;
  4. 再次运行脚本
  5. unlock tables;

第一次运行时,rsync 将在不停止 MySQL 的情况下复制大量内容。第二次运行将非常短,它只会延迟写入查询,因此它是一个真正的零停机时间解决方案

  1. 再做一次从/tmp/mysql/sync到远程服务器rsync,压缩,保留增量版本,任何你喜欢的东西。

这部分取决于你使用的是innodb还是myiasm。对于innodb;mySQL有自己的(需要花钱)解决方案(innodb热副本),但Percona有一个开源版本,你可能想看看:

http://www.percona.com/doc/percona-xtrabackup/

您要执行的操作称为"在线备份"。下面是指向包含详细信息的可能选项矩阵的指针:

http://www.zmanda.com/blogs/?p=19

它基本上归结为您正在使用的存储后端以及您有多少可用的硬件。

最新更新