备份 MySQL 数据库的最佳实践

Val*_*ien 26 mysql mysqldump

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

我可能会按计划安排工作,以便每晚完成,然后使用我的备份系统备份文件。

谢谢。

小智 30

进行 MySQL 服务器备份的最佳实践:

MySQL 复制

在 MySQL 中设置复制。您必须设置主服务器和从服务器。对数据库的所有读写都可以转到您的从服务器。使用 Replication 的好处是你可以在不中断主服务器的情况下从你的从服务器进行备份,你的应用程序将继续在主服务器上工作而不会停机。

使用 MySQL 转储

如果你的数据集很小(我意识到“小”是一个相对的术语......为了限定它,假设 <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 Enterprise Backup 的优势:

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

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


Ric*_*her 7

我建议设置一个专用副本用于备份。这将使您可以在不影响主服务器的情况下执行任何备份任务。由于这确实增加了架构的复杂性,因此您需要监控复制延迟以确保一切正常。

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

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

  • +1 为 `--single-transaction` 但不要忘记添加 `--events --routines`,我也总是使用 `--triggers`,即使它默认启用,因为它可以在我的.cnf 我会说,无论您当前的数据库中是否有这些类型的对象,将这些用作标准实践总是好的。 (3认同)