繁体   English   中英

如何备份MySQL数据库?

[英]How do I backup a MySQL database?

备份数百万条目的数据库时,我需要考虑什么? 我可以使用任何工具(可能与MySQL服务器捆绑在一起)吗?

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

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

方法我没试过,但这对我有意义:

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

另外:

  • 您可以使用主从设置将生产服务器复制到同一台计算机上的其他计算机或第二个实例,并对复制的副本执行上述任何操作,从而使您的生产计算机保持独立。 您也可以定期启动从站,让它读取binlog,然后再将其关闭,而不是连续运行。
  • 我认为,MySQL集群和企业许可版本有更多的工具,但我从未尝试过。

Mysqlhotcopy描述得很糟糕 - 只有在使用MyISAM时它才有效,并且它不热。

mysqldump的问题是恢复备份所需的时间(但如果您拥有所有InnoDB表,则可以使其变热,请参阅--single-transaction)。

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

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

相比之下,使用InnoDB,由于其行级锁定,您将获得非阻塞备份,因此这不是一个问题。

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

使用phpMyAdmin中的导出选项卡。 phpMyAdmin是一个免费的易于使用的Web界面,用于执行MySQL管理。

我认为mysqldump是正确的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM