现在,我能够使用mysqldump进行备份。但我必须关闭web服务器,它需要大约5分钟来做备份。如果我不关闭web服务器,它需要永远和永远没有完成+网站变得无法访问在备份。
是否有更快/更好的方法备份我的22 GB和不断增长的数据库?
所有的表都是MyISAM。
发布于 2009-05-17 14:29:33
是。
设置复制到第二台计算机。当您需要进行备份时,您可以锁定辅助计算机,执行mysqlhotcopy或mysqldump,然后解锁它。它会赶上你的主人,你永远不需要让主人离线。
如果您不介意将写I/O加倍,甚至可以在同一台机器上这样做,但理想情况下,您应该将其实时备份到第二台物理服务器,并在不干扰生产服务器的情况下尽可能频繁地进行快照备份。
理论上也可以使用已知的状态和绑定日志来恢复数据库。我从来没有这样做过,所以请先调查一下,但是您可以备份数据库的已知状态,然后备份所有新的绑定日志并在需要恢复时重放它们。由于绑定日志是线性写入的,因此将新的绑定日志同步到远程计算机将非常快速。
编辑:实际上,它看起来像使用绑定日志进行备份是有文档记录的。
这个问题是高度相关的。
发布于 2009-05-17 21:11:03
在生产系统中,使用READ锁的同花顺表不是您想要做的常规(甚至是半正则)的事情。这应该是最后的手段。
至少设置两个复制从站(当然,这需要一个带有读锁的同花顺表)。一旦设置好它们,您就可以从一个备份中提取一个备份,而另一个则作为备用主保持同步。
另外,如果您的一个奴隶失败了,那么您可以使用其中的快照来重建第二个(或第三个)从服务器。如果你所有的奴隶都失败了,你就回来用读锁冲洗桌子。
记住,要始终有一个定期检查数据的进程是同步的--使用类似mk-table-checksum之类的方法来完成这一任务(这对于设置来说并不简单,有关细节请参阅Maatkit文档)。
由于22 GB是相对较小的,您将没有问题这样做。使用大型数据库执行此操作可能会更有问题。
发布于 2009-05-17 17:40:36
这里的解决方案有两个,如上文所述:
请注意,如果您对表使用InnoDB,则可以使用--单事务标志来避免执行任何表锁,并且仍然可以获得数据库的一致转储,即使在主服务器上也是如此,这样就可以在不关闭服务器的情况下进行备份。然而,上述解决方案是一个更好的解决办法。
另外,如果在Linux上使用LVM,则可以获取分区的LVM快照,然后进行备份。LVM快照是原子的,所以如果您使用“用读锁刷新表”,然后获取快照并解锁,您将得到一个一致的快照。
如果您担心I/O争用使转储耗时太长,则可以添加第三台计算机并通过网络在其上运行mysqldump,以避免损坏磁盘。
https://serverfault.com/questions/9074
复制相似问题