大数据库备份最佳实践

时间:2012-05-08 12:10:33

标签: mysql database backup database-backups

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

如果在备份期间更改数据,备份数据的好方法是什么?

这是什么最佳做法?

4 个答案:

答案 0 :(得分:14)

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

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

Replication Slave服务器可以以只读方式启动,以确保不会直接对其进行任何更改。

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

以下是MySQL Replication上文档的链接。

答案 1 :(得分:3)

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

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

然后执行以下操作:

  1. flush tables
  2. 运行脚本
  3. flush tables with read lock;
  4. 再次运行脚本
  5. unlock tables;
  6. 首次运行rsync会在不停止MySQL的情况下复制很多。第二次运行将非常短,它只会延迟写入查询,因此它是真正的零停机时间解决方案

    1. rsync向远程服务器执行另一个/tmp/mysql/sync,压缩,保留增量版本,任何您喜欢的内容。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

您要做的是“在线备份”。这是一个指向可能选项矩阵的指针,其中包含更多信息:

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

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