【问题标题】:Big Database backup best practice大数据库备份最佳实践
【发布时间】:2012-05-16 22:04:00
【问题描述】:

我维护大型 MySQL 数据库。我需要每晚备份它,但数据库一直处于活动状态。有来自用户的查询。 现在我只是禁用网站然后进行备份,但这非常糟糕,因为服务被禁用并且用户不喜欢这样。

如果在备份过程中数据发生了变化,有什么好的方法来备份数据?

这方面的最佳做法是什么?

【问题讨论】:

标签: mysql database backup database-backups


【解决方案1】:

我已经使用我的数据库服务器的只读复制从属实现了这个方案。

MySQL 数据库复制非常容易设置和监控。您可以对其进行设置以获取对生产数据库所做的所有更改,然后每晚将其离线以进行备份。

可以将 Replication Slave 服务器设置为只读,以确保不能直接对其进行更改。

还有其他不需要复制从属设备的方法,但根据我的经验,这是解决此问题的一种非常可靠的方法。

这是MySQL Replication 上文档的链接。

【讨论】:

  • +1 从复制的数据库备份是标准方式。
  • 这很有趣。备份后使从站联机时会发生什么? MySQL 是否开始复制​​最新的更改?当 mysql 这样做时,服务器的负载是否很大?
  • 复制由主服务器上的单个线程处理,一次将一个事务发送到从属服务器,然后应用它们。一旦您使从属设备重新联机,它就会以一种不会对主设备造成重大负担的方式赶上。它使用单个数据库连接。主机上的负载不是问题。我在一个包含近 1TB 数据的大型数据库上执行此操作。
【解决方案2】:

如果你有一个非常大的(像我一样 50G+)只有 MySQL MyISAM 的数据库,你可以使用锁和rsync。根据 MySQL 文档,您可以在读取锁定处于活动状态时安全地复制原始文件,而您无法使用 InnoDB 进行操作。 因此,如果目标是零停机时间并且您有额外的 HD 空间,请创建一个脚本:

rsync -aP --delete /var/lib/mysql/* /tmp/mysql/sync

然后执行以下操作:

  1. flush tables
  2. 运行脚本
  3. flush tables with read lock;
  4. 再次运行脚本
  5. unlock tables;

在第一次运行时,rsync 会在不停止 MySQL 的情况下复制很多内容。第二次运行会很短,只会延迟写查询,所以是真正的零停机解决方案

  1. /tmp/mysql/sync 到远程服务器执行另一个rsync,压缩,保留增量版本,任何你喜欢的东西。

【讨论】:

  • 有趣的解决方案。您能否确认从这些备份中恢复有效? (您是否不得不在紧急情况下使用备份进行恢复?您在恢复过程中是否遇到任何问题或意外?)
  • 这不是备份,而是 MySQL 数据的真实精确原始副本,因此不足为奇。我在从一台服务器迁移到另一台服务器时使用了这种方法。
【解决方案3】:

这部分取决于您使用的是 innodb 还是 myiasm。对于innodb; mySQL 有自己的(需要花钱的)解决方案(innodb hot copy),但是您可能想看看 Percona 的开源版本:

http://www.percona.com/doc/percona-xtrabackup/

【讨论】:

    【解决方案4】:

    您要做的就是所谓的“在线备份”。这是一个指向可能选项矩阵的指针,其中包含更多信息:

    http://www.zmanda.com/blogs/?p=19

    它基本上归结为您正在使用的存储后端以及您有多少可用硬件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2011-03-22
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多