我有一些NAS存储要与我的专用托管服务提供商进行备份。我使用WHM设置自动每日备份以备份数据库和帐户。服务器托管一个站点。当它进行备份时,它执行一个mysql转储,并且实际上在整个备份过程中将站点关闭,因为在转储发生时没有人可以连接到数据库。该网站通常会停机约30秒到一分钟(这可能看起来不多,但对于这种网站来说这是一个真正的问题)。
是否有更好的方法进行备份以便不会发生这种情况(mysqlhotcopy或Maatkit会更好吗?),无论是备份到NAS的不同方法,还是根本不使用NAS并使用它其他方法。
答案 0 :(得分:8)
mysqlhotcopy比mysqldump快,但不做InnoDB。
要进行备份,我使用复制并对从属进行转储。在备份过程中,您可以获得0停机时间和无负载峰值。
答案 1 :(得分:2)
对于InnoDB,没有复制的最佳解决方案似乎是:
mysqldump mydbname --result-file=mydbname.sql --verbose --single-transaction
它使用InnoDB的事务快照功能,并允许正常(写!)数据库操作而不会中断。使用--master-data=1
,您甚至可以自动记录快照的二进制日志位置。但是,当在同一服务器上的多个数据库上单独执行此操作时,二进制日志位置似乎毫无价值。
缺点是当你有一些MyISAM表时这不能正常工作。我自己使用MySQL的全文索引,这需要未分区的MyISAM表。但是,人们可以安排事情,使MyISAM表只是辅助数据集,其中一个转储已存在于InnoDB表中的文本,以便MyISAM表可以在需要时从头开始重建。我有一个脚本可以检查数据库的表类型,只要一个数据库中只有InnoDB表,就会使用--single-transaction
而不是--lock-tables
。
另一种解决方案是使用某些磁盘或文件系统快照功能,例如LVM。但是,当存在快照时,由于LVM极其笨拙的写入时备份机制(这被错误地声称是COW,而不是常识),因此这将是一个非常重要的性能损失。因此,一个非常好的解决方案似乎是Solaris ZFS或FreeBSD UFS上的MySQL。两者都支持有效的快照,并且由于其年龄而相对稳定。 Btrfs也有高效的快照,但仍然是BETA。
答案 2 :(得分:0)
您不需要另一台服务器,只需将另一台MySQL安装在同一台机器上的沙盒中。负载可能会略微增加,但您不会遇到任何锁定问题。
答案 3 :(得分:0)