备份 Mysql 数据库最合适的方法是什么?我希望至少每隔 1 小时进行一次备份。我以为 mysqldump 是唯一的选择,但事实证明还有其他选择,例如二进制日志。
我想知道“大人物们是如何做到的”
我的表是 innodb,希望尽可能多地进行备份(至少每小时一次)
我猜即使 1 小时的间隔也不是一个完美的解决方案,因为我仍然会使用上次备份后的更改,最多 1 小时。
答案1
我认为 mysqldump 最适合用于不会阻塞任何流量的服务器。在 myisam 表上,这会创建一个读取锁定。不过我知道您说您使用的是 innodb,所以有一些解决方案。
我将首先检查这个工具。 http://www.percona.com/software/percona-xtrabackup/ Percona 的员工被认为是 mysql 方面的专家,这是他们用于对 innodb 表进行“热备份”的工具之一。这意味着您可以在数据库正在使用时运行它。我个人还没有使用它的经验。
我目前正在工作的站点有数百个并发用户,为了实现可靠的备份,我们首先必须设置到从服务器的复制。然后我们在从服务器上运行 mysqldump,这不会影响主服务器的性能。在此处了解有关复制的更多信息: http://dev.mysql.com/doc/refman/5.5/en/replication.html
我认为,您需要每天使用非常可靠的方法(如 mysqldump)运行一次备份。在这两者之间,您有一个主服务器和从服务器复制并生成二进制日志。二进制日志可用于进行小规模的追赶。根据我的经验,热备份工具往往会阻止一项或另一项操作,从而导致某些可怜的用户体验不佳。
答案2
在某种程度上,这取决于您想要什么恢复选项。有些方法(大多数情况下)有效,但会极大地限制您的恢复能力。例如,文件系统级备份仅允许您恢复到同一台机器或克隆。使用二进制日志进行备份充满风险,因为二进制日志不会说明全部情况。
在绝大多数情况下,在副本上使用 mysqldump 是最佳选择。它不仅允许您在不干扰主服务器的情况下进行备份,而且如果您配置主/主服务器而不是主/从服务器,还可以添加冗余。如果您出于任何原因需要使主服务器脱机,只需先将您的应用程序指向第二个系统即可。
答案3
结合 mysqldump 备份,您可以将数据复制到 MySQL 从属服务器,其中数据存储在具有快照功能的文件系统(如 ZFS)上。在这种情况下,您可以停止从属服务器,拍摄快照并重新启动从属服务器。
答案4
基本数据库备份方案包括以下组件:
- 数据库数据和事务日志位于不同的物理磁盘上
- 频繁可恢复的备份
其背后的想法是,如果数据库磁盘的磁盘(或磁盘阵列)发生故障,您将能够使用之前的备份和重播未受故障影响的最新事务日志来恢复数据到最后一次事务。
在如何为此,出现了一个类似的问题之前问过并获得了一些描述选项的 MySQL 文档的参考。
我强烈建议不要将复制作为备份“策略”——它不是为备份而设计的。有些人使用副本来减少主数据库服务器上的负载和锁定并发性,方法是使用从属数据库作为备份源。然而,你仍然面临从属数据集一致性检查的问题——MySQL 不会为你做这件事,而且很容易搞砸了 MySQL 复制配置错误。有用于一致性检查的工具,例如来自 maatkit 的 mk-table-checksum但是同样没有什么收获——一致性检查会在你的主表上放置负载和锁。