首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqldump或mysqlhotcopy来备份大型MySQL数据库?

mysqldump或mysqlhotcopy来备份大型MySQL数据库?
EN

Stack Overflow用户
提问于 2009-06-03 04:18:00
回答 4查看 11.6K关注 0票数 2

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-03 04:24:56

mysqlhotcopy比mysqldump更快,但不做InnoDB。

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

票数 9
EN

Stack Overflow用户

发布于 2010-11-15 20:44:56

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

代码语言:javascript
复制
mysqldump mydbname --result-file=mydbname.sql --verbose --single-transaction

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

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

另一种解决方案是使用一些磁盘或文件系统快照功能,例如LVM。但是,在快照存在的情况下进行写操作时,这将对性能造成相当大的影响,因为LVM的写入时备份机制非常愚蠢(它被错误地称为COW,这不是常识中的错误)。因此,在Solaris ZFS或FreeBSD UFS上使用MySQL似乎是一个很好的解决方案。两者都支持有效的快照,并且由于其年龄的原因而相对稳定。Btrfs也有高效的快照,但仍处于测试阶段。

票数 2
EN

Stack Overflow用户

发布于 2009-06-04 21:20:33

您不需要另一台服务器,只需在同一台计算机上的沙箱中再安装一台MySQL即可。加载可能会有一点峰值,但您不会遇到任何锁定问题。

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

https://stackoverflow.com/questions/943028

复制
相关文章

相似问题

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