我有一些NAS存储做备份与我的专用托管服务提供商。我设置每天自动备份与WHM备份数据库和账户。服务器托管的一个网站。当它的备份,它确实一个MySQL的转储,而且基本上需要访问该网站的全部时间是做备份,因为没有人可以连接到数据库,而转储正在发生的事情。该网站通常是下跌约30秒到一分钟(这可能似乎不是很多,但对于这种网站它是一个真正的问题)。

有没有更好的方式做备份,以便这不会发生(会mysqlhotcopy的或Maatkit更好吗?),无论是备份到NAS,或者根本只是不使用NAS,并使用不同的方法一些其它的方法。

有帮助吗?

解决方案

mysqlhotcopy的比mysqldump的速度较快,但并不做InnoDB的。

要执行备份,我使用复制和在从服务器上做转储。你得到0停机时间,并在备份过程中无负载峰值。

其他提示

对于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的极其愚蠢的备份上写机制(这是谎称是牛,它是不是在常识)的存在,这将是一个相当显著的性能损失。因此,一个不错的解决方案似乎是MySQL的在Solaris ZFS或FreeBSD的UFS。双方支持高效的快照,因为他们的年龄是相对稳定的。 BTRFS具有有效的快照太多,但仍然是BETA。

您不需要另一台服务器,只是把另一个安装MySQL的在沙箱中的同一台机器上。负载可以秒杀一点点,但你不会得到任何的锁定问题。

OK,还有另一种相当有效的快照技术:mdraid1 - Linux的软RAID级别1.如果您在mdraid1运行MySQL,只需插入另一个磁盘上,让它同步,停止MySQL的,做一个同步,取出第三和同步RAID组件,重启MySQL。如果使用位图与RAID1,再同步到另一个快照通常是相当快....

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top