Mysql备份的最佳实践是什么?

时间:2014-05-12 08:52:18

标签: mysql backup

我们在我们的一个生产服务器上运行了一个php应用程序和mysql服务器。 Mysql服务器目前是4GB大,有意长达数十甚至高达数百GB。

有什么好奇的是,在任何情况下应用程序都必须存在的情况下,备份mysql数据库的最佳做法是什么?什么是更好的,有我们将运行备份脚本或在实时服务器上运行的mysql复制服务器?什么更有可能减速我们有可能在需要时添加额外的服务器。我在哪里需要存储mysql转储?是否建议ftp将mysql备份文件复制到远程服务器。

如果服务器实例数量不存在问题,组织Web应用程序备份的最佳做法是什么?

3 个答案:

答案 0 :(得分:1)

MySQL备份方法记录在MySQL documentation上。

理想的备份解决方案是使用MySQL Enterprise Backup。这是在Oracle商店中销售的许可产品。与mysqldump相比,速度非常快。

  

MySQL企业备份:执行热备份的许可产品   MySQL数据库。它提供最高效率和灵活性   备份InnoDB表,但也可以备份MyISAM和其他类型   桌子。

如果您正在寻找带有MySQL社区版的免费解决方案,那么您可以安装另一个复制服务器,并运行mysqldump进行备份或进行原始数据备份。在复制服务器上进行备份期间,主数据库将运行。由于您的数据很大或者会变大,因此建议备份原始数据文件。它基本上是从磁盘复制数据和日志文件的过程。有关详细信息,请参阅MySQL documentation

  

对于较大的数据库,mysqldump是不切实际的或   效率低下,您可以备份原始数据文件。使用原始   数据文件选项还意味着您可以备份二进制文件和中继   日志,使您能够在a。事件中重新创建从属   奴隶失败。

最后,您应该将备份文件复制到另一个物理磁盘上以从磁盘故障中恢复,或者复制到另一台物理服务器,以便从完全服务器故障中轻松恢复。

答案 1 :(得分:0)

  

更好的是,拥有要在其上运行备份脚本的MySQL复制服务器或在实时服务器上运行

这取决于您的数据库大小(以及使用mysqldump进行转储所需的时间)和您的可靠性要求。

如果您的数据库相对较小,并且mysqldump在几秒钟或几分钟内将其转储,则可以运行预定的备份。在大多数情况下,有一个每日备份就足够了,该备份在您的应用程序大部分处于空闲状态时(在客户端处于睡眠状态的晚上)运行。您可以使用一个不错的工具automysqlbackup:它关心计划和备份轮换,您所需要做的就是将其添加为cron任务并一次设置其配置。

仅在以下情况下才需要设置副本:

  1. 您的备份需要很长时间(数十分钟或几小时)才能完成,因此您不能只是长时间停止服务。
  2. 在主数据库崩溃的情况下,您无法承受丢失任何历史记录的麻烦。例如。如果您处理财务交易,则可能要确保在主数据库服务器死后不会丢失任何东西。

在这种情况下,您可能需要带有备份的副本。尽管您必须了解添加复制会带来新的问题:副本可能不同步,无提示崩溃(并且您不会注意到主服务器和应用程序运行良好)等。

答案 2 :(得分:0)

复制可以防止硬件错误,例如硬盘崩溃。

备份 - 防止软件错误,例如,由于人为因素,数据已从表中删除。

通过运行实用程序在副本上创建备份来结合这两种技术绝对是一种很好的做法。这不仅降低了产品数据库的负载,还涵盖了更多的恢复场景。

如果出现硬件错误,您可以从副本中恢复最新数据,而在数据损坏的情况下,您已经可以考虑从什么日期开始使用备份进行恢复。好吧,如果你的主服务器和副本都失败了,那么备份也会拯救你。

进行备份的最佳方法是什么?

mysqldump 对于小型数据库来说是一个很好的解决方案。这是一个用于创建逻辑备份的实用程序,它包含在 MySQL 服务器中。在输出中,该实用程序会创建一个 .sql 文件来重新创建数据库。

对于大型数据库,最好使用物理备份。有两种方法可以做到。

mysqlbackup 是 MySQL Enterprise Solution 中包含的实用程序。结果,您得到一个二进制文件。创建这样的备份比使用 mysqldump 快得多,并且服务器上的负载更小。

xtrabackup 来自 Percona,它很像 MySQL Enterprise 备份实用程序,但它是免费的。可以在 here 中找到更详细的比较。

应该多久备份一次?

备份越频繁越好,但您不能做很多这样的备份 - 因为备份存储空间会用完。有两种方式:

  1. 找到备份频率和存储持续时间之间的折衷。
  2. 使用增量备份。上述实用程序支持增量备份,但此类备份的管理较为复杂(阅读更多here

备份应该存储在哪里?

您喜欢的任何地方,但与 MySQL 服务器不在同一个地方。总的来说,我认为使用云存储是一个不错的选择。今天几乎每个人都有一个命令行界面。

如何自动备份?

创建定期备份的过程应该是自动化的,只有在失败的情况下才应该有人介入。一个好的备份过程应该包括以下步骤:

  1. 创建备份副本
  2. 压缩\加密
  3. 上传到存储
  4. 发送成功\失败通知
  5. 从存储中删除旧备份(以免溢出)

可以找到实现此功能的最简单脚本,例如 here

还有别的吗?

是的,最重要的是不要创建备份然后恢复它。因此,最好定期测试恢复方案。

备份快乐!