备份MySQL数据库的最佳做法


23

我最近发现,我们运行于MySQL的生产Web服务器没有得到定期(或根本没有)备份。我曾经备份过SQL Server数据库,但是对MySQL数据库却没有很多经验。是否有使用“ mysqldump”或任何其他数据库备份工具的最佳实践?

我可能会安排日程表,以便每晚进行,然后使用备份系统备份文件。

谢谢。

Answers:


29

进行MySQL服务器备份的最佳做法:

MySQL复制

在MySQL中设置复制。您将必须设置主服务器和从属服务器。对数据库的所有读写都可以发送到您的从服务器。复制的优点是您可以在不中断主服务器的情况下从从服务器进行备份,您的应用程序将继续在主服务器上工作,而不会造成任何停机。

使用MySQL转储

如果您的数据集很小(我意识到“ small”是一个相对术语,请使用<10GB),那么mysqldump可能会很好用。这很容易,它在线并且非常灵活。mysqldump可以做的只有几件事:备份所有内容,或者仅备份某些数据库或表,仅备份DDL优化转储以加快恢复速度,从而使生成的sql文件与其他RDBMS更加兼容。

但是,最重要的选项与备份的一致性有关。我最喜欢的选项是:--single-transaction:如果(且仅当)表使用InnoDB存储引擎时,此选项提供一致的备份。如果您有任何非只读MyISAM表,则在备份它们时不要使用此选项。--master-data = 2:此选项将确保您的转储是一致的(通过执行所有表锁定,除非您添加了--single-transaction选项)。--master-data选项还会在生成的转储文件中记录二进制日志位置(= 2导致此行成为转储文件中的注释)

关于mysqldump的最后说明:请记住,还原时间可能比备份时间长得多。这将取决于几个因素,例如,您有多少个索引。

LVM快照

对于具有较大数据集的数据库,物理备份是必经之路。尽管您可以进行冷备份(例如,关闭MySQL服务,复制数据目录,重新启动服务),但许多人不希望停机。我最喜欢的解决方案是快照。这可能很热(对于InnoDB),或者需要短暂的锁定(对于MyISAM)。不要忘记包括所有数据(包括ib_logfiles)。Lenz提供了一个很好的实用程序来帮助解决此问题:http : //www.lenzg.net/mylvmbackup/

使用MySQL企业备份

使用MySQL企业备份的优势:

  • InnoDB表的“热”备份完全在线进行,而不会阻止仅备份特定表或表空间
  • 仅备份自上次备份以来更改的数据
  • 压缩备份-最多可节省90%的存储空间。

参考:http : //www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

我建议设置专用副本以用于备份。这将使您执行任何备份任务,而不会影响主数据库。由于这确实增加了体系结构的复杂性,因此您将需要监视复制延迟,以确保一切正常。

至于实际过程,您有几个选项没有任何第三方工具。快照可以通过采取mysqldump命令(假设你使用的是InnoDB) mysqldump --all-databases --single-transaction > all_databases.sql。根据数据大小,最好关闭MySQL并直接备份数据文件。重新启动副本后,它将重播主服务器在关闭期间收到的所有事件。如果您使用的是MySQL Enterprise,则mysqlbackup实用程序会执行此操作。

可以通过在副本服务器上启用二进制日志来进行增量备份。显然,这仅记录使数据发生突变的事件,因此您需要将其与上面的快照结合起来。


3
+1,--single-transaction但不要忘记添加,即使在默认情况下启用--events --routines,我也总是使用+1 --triggers,因为可以在my.cnf中将其禁用。我要说的是,无论您当前是否在数据库中拥有这些类型的对象,将它们用作标准实践总是非常好的。
Michael-sqlbot

注意mysqldump --all-databases可能会在您定义的最大打开表数较低时触发错误。因此请注意您的mysql.log。复制确实是最好的备份方法
Raymond Nijland 2013年

那么如何保存数据的历史副本?(通常,客户端会希望保留一个月或更长时间的备份,并且当应用程序错误破坏数据时,开发人员需要错误之前的数据库副本。)
RonJohn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.