首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每天备份22 GB的MySQL数据库

每天备份22 GB的MySQL数据库
EN

Server Fault用户
提问于 2009-05-17 14:29:33
回答 6查看 10.2K关注 0票数 28

现在,我能够使用mysqldump进行备份。但我必须关闭web服务器,它需要大约5分钟来做备份。如果我不关闭web服务器,它需要永远和永远没有完成+网站变得无法访问在备份。

是否有更快/更好的方法备份我的22 GB和不断增长的数据库?

所有的表都是MyISAM。

EN

回答 6

Server Fault用户

发布于 2009-05-17 14:29:33

是。

设置复制到第二台计算机。当您需要进行备份时,您可以锁定辅助计算机,执行mysqlhotcopy或mysqldump,然后解锁它。它会赶上你的主人,你永远不需要让主人离线。

如果您不介意将写I/O加倍,甚至可以在同一台机器上这样做,但理想情况下,您应该将其实时备份到第二台物理服务器,并在不干扰生产服务器的情况下尽可能频繁地进行快照备份。

理论上也可以使用已知的状态和绑定日志来恢复数据库。我从来没有这样做过,所以请先调查一下,但是您可以备份数据库的已知状态,然后备份所有新的绑定日志并在需要恢复时重放它们。由于绑定日志是线性写入的,因此将新的绑定日志同步到远程计算机将非常快速。

编辑:实际上,它看起来像使用绑定日志进行备份是有文档记录的。

这个问题是高度相关的。

票数 28
EN

Server Fault用户

发布于 2009-05-17 21:11:03

在生产系统中,使用READ锁的同花顺表不是您想要做的常规(甚至是半正则)的事情。这应该是最后的手段。

至少设置两个复制从站(当然,这需要一个带有读锁的同花顺表)。一旦设置好它们,您就可以从一个备份中提取一个备份,而另一个则作为备用主保持同步。

另外,如果您的一个奴隶失败了,那么您可以使用其中的快照来重建第二个(或第三个)从服务器。如果你所有的奴隶都失败了,你就回来用读锁冲洗桌子。

记住,要始终有一个定期检查数据的进程是同步的--使用类似mk-table-checksum之类的方法来完成这一任务(这对于设置来说并不简单,有关细节请参阅Maatkit文档)。

由于22 GB是相对较小的,您将没有问题这样做。使用大型数据库执行此操作可能会更有问题。

票数 2
EN

Server Fault用户

发布于 2009-05-17 17:40:36

这里的解决方案有两个,如上文所述:

  1. 将服务器复制设置为可以脱机的从服务器。最好的方法是使用mysqldump和--主数据参数对数据库进行转储。
  2. 在奴隶上设置夜间备份。您可以使用带有-主-数据-刷新-日志和--单个事务标志的mysqldump用户,或者您可以停止mysql服务器,复制磁盘上的数据文件,然后重新启动它(复制将从中断的地方恢复)。
  3. 每隔5、10、20分钟在从服务器上运行一个脚本,以检查并确保mysql仍在复制。我编写了一个简单python脚本来完成它,欢迎您使用。

请注意,如果您对表使用InnoDB,则可以使用--单事务标志来避免执行任何表锁,并且仍然可以获得数据库的一致转储,即使在主服务器上也是如此,这样就可以在不关闭服务器的情况下进行备份。然而,上述解决方案是一个更好的解决办法。

另外,如果在Linux上使用LVM,则可以获取分区的LVM快照,然后进行备份。LVM快照是原子的,所以如果您使用“用读锁刷新表”,然后获取快照并解锁,您将得到一个一致的快照。

如果您担心I/O争用使转储耗时太长,则可以添加第三台计算机并通过网络在其上运行mysqldump,以避免损坏磁盘。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/9074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档