2

我有一些 NAS 存储可以通过我的专用托管服务提供商进行备份。我使用 WHM 设置自动每日备份来备份数据库和帐户。服务器托管一个站点。当它进行备份时,它会进行 mysql 转储,并且在进行备份的整个过程中基本上都会关闭站点,因为在转储发生时没有人可以连接到数据库。该站点通常会关闭大约 30 秒到一分钟(这可能看起来不多,但对于这种站点来说,这是一个真正的问题)。

有没有更好的备份方法来避免这种情况发生(mysqlhotcopy 或 Maatkit 会更好吗?),无论是备份到 NAS 的不同方法,还是根本不使用 NAS 并使用其他方法.

4

4 回答 4

9

mysqlhotcopy 比 mysqldump 快,但不做 InnoDB。

要进行备份,我使用复制并在从属设备上进行转储。在备份过程中,您的停机时间为 0,并且没有负载峰值。

于 2009-06-03T04:24:56.387 回答
2

对于 InnoDB,没有复制的最佳解决方案似乎是:

mysqldump mydbname --result-file=mydbname.sql --verbose --single-transaction

它使用 InnoDB 的事务快照功能,并允许正常(写入!)数据库操作而不会中断。用--master-data=1你甚至应该能够自动记录快照的二进制日志位置。但是,在同一台服务器上的多个数据库上单独执行此操作时,二进制日志位置似乎毫无价值。

一个缺点是当你有一些 MyISAM 表时,这不能正常工作。我自己使用 MySQL 的全文索引,它需要未分区的 MyISAM 表。但是,可以这样安排,MyISAM 表只是辅助数据集,将 InnoDB 表中已经存在的文本转储到其中,以便在需要时可以从头开始重建 MyISAM 表。我有一个脚本可以检查数据库的表类型并使用--single-transaction,而不是--lock-tables在一个数据库中只有 InnoDB 表时使用。

另一种解决方案是使用一些磁盘或文件系统快照功能,例如 LVM。但是,由于 LVM 极其愚蠢的写时备份机制(这被错误地声称是 COW,这不是常识),当存在快照时写入时,这将是一个相当大的性能损失。因此,一个非常好的解决方案似乎是 Solaris ZFS 或 FreeBSD UFS 上的 MySQL。两者都支持高效的快照,并且由于它们的年龄而相对稳定。Btrfs 也有高效的快照,但仍然是 BETA。

于 2010-11-15T12:44:55.890 回答
0

您不需要另一台服务器,只需在同一台机器上的沙箱中安装另一个 MySQL。负载可能会飙升一点,但您不会遇到任何锁定问题。

于 2009-06-04T21:20:33.257 回答
0

好的,还有另一种相当有效的快照技术:mdraid1 -- Linux softraid level 1。如果你在 mdraid1 上运行 MySQL,只需插入另一个磁盘,让它同步,停止 mysql,进行同步,删除第三个和同步的 raid 组件,重启mysql。如果您在 raid1 中使用位图,则重新同步以拍摄另一个快照通常会很快....

于 2010-11-16T04:55:51.083 回答