it-swarm.cn

我应该使用mysqldump或mysqlhotcopy进行MySQL数据库备份吗?

我有一个WordPress博客在MySQL数据库上运行,我想定期备份。使用mysqldump程序或mysqlhotcopy脚本进行备份会更好吗?各自的优点和缺点是什么?我还应该考虑其他选择吗?

13
Matthew Shanley

我可以告诉你,我目前使用mysqldump来维护我的数据库的备份。我这样做是因为我的目标是保持每周备份,以便在有人删除他们的网页的情况下,我可以在一周前恢复它。

关于这一点的好处是它是一个基本的文本文件,所以我可以将它导入任何带有MySQL的计算机,加载它,并搜索丢失的数据。注意:为了得到我想要的东西,我在我的脚本中使用的命令是这样的:

mysqldump --databases databaseName > /file/path

--databases是使mysqldump转储CREATE DATABASE IF NOT EXIST标题的原因,这样我就可以将它导入到我想要的任何地方。

虽然这种方法对我有用,但我确信有更好的方法用于其他目的。我还可以说,对于任何备份解决方案,您应该至少将它存储在另一台计算机上,如果可以的话,最好将其存储在异地(我们在云端)。

5
Mike

我会考虑使用一个名为“WordPress数据库备份(WP-DB-Backup)”的WordPress插件,它也列在Wordpress上_数据库备份 指南 。此插件可以按计划备份数据库并通过电子邮件发送给您(假设它是一个小型数据库)。您也可以在本地备份它。您可以排除评论垃圾邮件和修订以使数据库更小

控制较少但更容易实现。

MySQL转储为您提供最多控制。您的托管服务也可能是一个限制因素。某些主机不允许您访问运行cron作业或运行mysqldump命令。

5
citadelgrad

建议#1

如果您对MySQL实例进行任何备份,最好设置MySQL Replicaton,以便任何强制服务器加载或增加磁盘I/O都不会影响您的生产数据库。

设置MySQL Replication后,您可以用不同的方式编写 mysqldump 脚本( 请在DBA StackExchange上查看我在各种技术 上的帖子,只要你在Slave上运行那些mysqldump。

建议#2

如果您无法为MySQL Replication设置另一台服务器并且所有数据都是InnoDB,则必须执行时间点mysqldump。这是使用--single-transaction选项和mysqldump完成的。因此,如果您从午夜开始运行mysqldump并且备份在上午12:15结束,则恢复时mysqldump的输出将反映截至12:00 AM的数据。

建议#3

另一个可用于MySQL备份的程序是Percona的XtraBackup。

XtraBackup 是一个综合工具,其行为类似于rsync,但在生活中具有指导性。它可以开始复制所有InnoDB数据和表空间。它能够在内部创建检查点并就地执行InnoDB崩溃恢复,以帮助获得完美的时间点备份。 XtraBackup还有一个额外的功能,允许创建增量备份。另一个附加功能是创建InnoDB日志文件,也可以通过就地崩溃恢复来构建。还有一些包装软件可以提供MyISAM表的冻结复制。

它执行MySQL实例的后面,但有明显的区别。备份的时间点基于备份完成的时间而不是备份的时间。因此,如果您从午夜开始运行XtraBackup并且备份在上午12:15结束,则恢复时mysqldump的输出将反映截至上午12:15的数据。

3
RolandoMySQLDBA

取决于您的表的存储引擎。 它只适用于这个MySQL手册页面的ARCHIVE和MyISAM表 并且必须在同一台机器上运行(即不使用本地套接字或TCP/IP)

MySQL也说

如果您在服务器上进行备份并且您的表都是MyISAM表,请考虑使用mysqlhotcopy,因为它可以实现更快的备份和更快的恢复。

2
Aiden Bell

我建议使用许多预先存在的mySQL备份脚本之一来解决问题。

我使用“automysqlbackup”这是一个开源的Shell脚本,可以在服务器上设置为cron作业。它涵盖了几乎所有可能的备份情况: http://sourceforge.net/projects/automysqlbackup/ 。几年来,它对我来说完美无瑕 - 彻底推荐。

1
Mark Hatton

mysqlhotcopy是大约'05的Perl脚本。因此它为Perl和各种Perl添加了依赖项。我会传递这个。

mysqldump是一个与MySQL一起分发并积极维护的C程序。如果你添加-x选项,它会锁定表格,使你变得很黄金。

我个人有 这个脚本 在cron中(如果你想手动运行它,你会想要删除那些`转义)它对我来说就像一个魅力,将我的每个数据库备份到本地文件,以及所有数据库的完整转储。

如果您在那里有多个数据库,您还需要为它们转储授权。 Maatkit 将帮助你,你只需mk-show-grants -uroot -pPASSWORD > mygrantsdatabase.sql让你的助手表备份并准备再次导入。

1
intlect

我也知道许多服务器管理工​​具(如Interworx和Ensim)使用mysqldump备份数据库,然后使用简单的mysql命令进行恢复。从这一点来看,我猜这是最好的方法之一。

0
Darryl Hein