我有一个要定期备份的MySQL数据库上运行的WordPress博客。使用mysqldump程序或mysqlhotcopy脚本进行备份会更好吗?各自的优缺点是什么?我还有其他选择吗?
我有一个要定期备份的MySQL数据库上运行的WordPress博客。使用mysqldump程序或mysqlhotcopy脚本进行备份会更好吗?各自的优缺点是什么?我还有其他选择吗?
Answers:
我可以告诉你,我目前正在使用mysqldump维护数据库的备份。之所以这样做,是因为我的目标是保持每周备份,以便万一有人删除了他们的网页,我最多可以在一周前恢复它。
这样做的好处是,它是一个基本的文本文件,因此我可以将其导入到装有MySQL的任何计算机上,进行加载,然后搜索丢失的数据。注意:为了得到我想要的,我在脚本中使用的命令是这样的:
mysqldump --databases databaseName > /file/path
该--databases
是什么使的mysqldump转储CREATE DATABASE IF NOT EXIST
头,这样我可以导入它的任何地方我想要的。
尽管此方法对我有用,但我敢肯定还有其他更好的方法可以用于其他目的。我也可以说,对于任何备份解决方案,您应该至少将其存储在另一台计算机上,并且如果可以的话,最好存储在异地(我们在云中)。
如果执行MySQL实例的任何备份,则最好设置MySQL Replicaton,以免以任何方式强加服务器负载或增加磁盘I / O都不会影响生产数据库。
设置MySQL复制后,只要在从属服务器上运行这些mysqldumps,就可以用不同的方式编写mysqldump脚本(有关各种技术,请参见我在DBA StackExchange上的帖子)。
如果您不能为MySQL复制设置另一台服务器,并且所有数据都是InnoDB,则必须执行时间点mysqldump。这是通过使用--single-transaction
mysqldump选项来完成的。因此,如果您从午夜开始运行mysqldump并且备份在12:15 AM结束,则还原后mysqldump的输出将反映截至12:00 AM的数据。
MySQL备份的另一个可用程序是Percona的XtraBackup。
XtraBackup是一个功能全面的工具,其行为类似于rsync,但在生活中具有针对性。它可以开始复制所有InnoDB数据和表空间。它具有在内部创建检查点并就地执行InnoDB崩溃恢复的功能,以帮助获得完美的时间点备份。XtraBackup还具有一项额外功能,可用于创建增量备份。另一个附加功能是创建InnoDB日志文件,该文件也由就地崩溃恢复构建。还有一些包装器软件也可以提供MyISAM表的冻结复制。
它执行MySQL实例的后台,但有明显区别。备份的时间点基于备份完成的时间,而不是备份的开始时间。因此,如果您从午夜开始运行XtraBackup并且备份在12:15 AM结束,则还原时mysqldump的输出将反映截至12:15 AM的数据。
取决于表的存储引擎。它仅适用于本MySQL手册页中的ARCHIVE和MyISAM表,并且必须在同一台机器上运行(即,不使用本地套接字或TCP / IP)
如果要在服务器上进行备份,并且所有表都是MyISAM表,请考虑使用mysqlhotcopy,因为它可以完成更快的备份和更快的还原。
我建议使用许多现有的mySQL备份脚本中的一种来消除正确处理的麻烦。
我使用“ automysqlbackup”,它是一个开源的Shell脚本,可以将其设置为服务器上的cron作业。它涵盖了几乎所有可能的备份情况:http : //sourceforge.net/projects/automysqlbackup/。对于我来说,它已经完美地工作了几年-强烈推荐。
mysqlhotcopy是大约'05的Perl脚本。因此,它为Perl和各种Perl添加了依赖项。我会把这个传下去。
mysqldump是随MySQL一起分发并积极维护的C程序。如果添加-x选项,它将锁定表,因此您很聪明。
我个人在cron中有此脚本(如果要手动运行,则需要删除这些转义符),它对我来说就像是一种魅力,将我的每个数据库都备份到本地文件,以及所有数据库的完整转储。
而且,如果那里有多个数据库,则还需要为它们转储赠款。Maatkit将在这里mk-show-grants -uroot -pPASSWORD > mygrantsdatabase.sql
为您提供帮助,而您只需备份您的拨款表并准备再次导入即可。
我也知道,许多服务器管理工具(例如Interworx和Ensim)使用mysqldump备份数据库,然后使用简单的mysql命令进行还原。由此,我猜测这是最好的方法之一。