4

备份包含数百万条目的数据库时,我必须考虑什么?有没有我可以使用的工具(可能与 MySQL 服务器捆绑在一起)?

4

5 回答 5

7

根据您的要求,我自己使用了几个选项:

  • 如果您不需要热备份,请关闭数据库服务器并在文件系统级别进行备份,即使用 tar、rsync 或类似方法。
  • 如果您确实需要数据库服务器继续运行,您可以从mysqlhotcopy工具(一个 perl 脚本)开始,该工具会锁定正在备份的表并允许您选择单个表和数据库。
  • 如果您希望备份可移植,您可能需要使用mysqldump,它创建 SQL 脚本来重新创建数据,但比 mysqlhotcopy 慢
  • 如果您在某个时间点拥有数据库的副本,您也可以将二进制日志(从该时间点开始)保存在安全的地方。这可以很容易做到并且不会干扰服务器的操作,但可能不是最快的恢复,并且您必须确保您不会错过部分日志。

我没有尝试过的方法,但这对我来说很有意义:

  • 如果您有像 ZFS 这样的文件系统或在 LVM 上运行,那么通过文件系统快照来创建数据库快照可能是个好主意,因为它们非常非常快。请记住在整个操作过程中确保数据库的状态一致,例如通过做(当然,事后FLUSH TABLES WITH READ LOCK不要忘记)UNLOCK TABLES

此外:

  • 您可以使用主从设置将您的生产服务器复制到另一台机器或同一台机器上的第二个实例,并对复制的副本执行上述任何操作,而无需您的生产机器。除了连续运行,您还可以定期启动从属服务器,让它读取二进制日志,然后再次将其关闭。
  • 我认为,MySQL集群和企业授权版本有更多的工具,但我从未尝试过。
于 2009-10-06T09:34:42.910 回答
5

Mysqlhotcopy 的描述很糟糕——它只有在你使用 MyISAM 时才有效,而且它并不热。

mysqldump 的问题在于恢复备份所需的时间(但如果您拥有所有 InnoDB 表,它可能会变热,请参阅 --single-transaction)。

我建议使用热备份工具,例如 XtraBackup 中提供的工具: http ://www.percona.com/docs/wiki/percona-xtrabackup:start

于 2010-02-21T13:49:32.280 回答
3

注意是否在使用 MyISAM 存储引擎的大型表上使用 mysqldump;它会在每个表上运行转储时阻止选择,在某些情况下,这可能会使繁忙的站点关闭 5-10 分钟。

相比之下,使用 InnoDB,由于它的行级锁定,您可以获得非阻塞备份,所以这不是这样的问题。

如果你需要使用 MyISAM,一个常见的策略是复制到第二个 MySQL 实例,然后对复制的副本执行 mysqldump。

于 2009-10-06T09:54:59.360 回答
2

使用 phpMyAdmin 中的导出选项卡。phpMyAdmin 是用于进行 MySQL 管理的免费且易于使用的 Web 界面。

于 2012-10-20T08:23:48.693 回答
1

我认为mysqldump是正确的做法。

于 2009-10-06T09:33:40.773 回答