14

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

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

对此的最佳做法是什么?

4

4 回答 4

17

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

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

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

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

这是MySQL Replication上文档的链接。

于 2012-05-08T12:24:26.597 回答
6

如果你有一个非常大的(像我一样 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;

在第一次运行时 rsync 将在不停止 MySQL 的情况下复制很多内容。第二次运行会很短,只会延迟写查询,所以是真正的零停机解决方案

  1. rsync/tmp/mysql/sync远程服务器做另一个,压缩,保留增量版本,任何你喜欢的东西。
于 2016-09-05T09:48:52.347 回答
2

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

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

于 2012-05-08T12:19:30.763 回答
0

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

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

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

于 2012-05-08T12:13:43.263 回答