我是一个应用程序开发人员,我想知道我们的数据库备份策略。现在,我们的系统管理员每8小时备份一次数据库。我真的不知道怎么做,但是当备份运行时,我们的应用程序响应时间就会急剧增加。因此,每8小时,应用程序是缓慢的,有时甚至会产生错误。
有没有一种方法可以在不减慢应用程序代码的情况下使用MySQL表备份MyISAM数据库,并且仍然可以获得一致的备份?
发布于 2012-03-04 00:43:44
( A)从复制的奴隶那里获取备份。零性能损失。
B)使用LVM获取一致的快照。在空闲时间复制数据库文件。
C)通过远程连接使用Rsync复制数据文件,然后对数据库执行最后的Rsync操作,短暂锁定几秒钟。
顺便说一句,他们如何在不连续锁定应用程序的情况下,对MyISAM表进行一致的备份?这似乎不可能。
发布于 2013-08-29 13:26:49
如果您不依赖于特定于MyISAM或其他存储引擎的特性,那么最简单的选项是:将表更改为InnoDB存储引擎,并在mysqldump中使用-单笔交易选项。
此选项将事务隔离模式设置为可重复读取,并在转储数据之前将开始事务SQL语句发送到服务器。它只对事务性表(如InnoDB )有用,因为在发出START事务时,它会转储数据库的一致状态,而不会阻塞任何应用程序。
在使用此选项时,应记住只有InnoDB表处于一致状态。例如,使用此选项时转储的任何MyISAM或内存表仍可能更改状态。
当一个单事务转储正在进行中时,为了确保一个有效的转储文件(正确的表内容和二进制日志坐标),其他任何连接都不应该使用以下语句: ALTER、CREATE、DROP、RENAME TABLE、TRUNCATE。一致的读取不会与这些语句分离,因此在要转储的表上使用它们会导致mysqldump执行的SELECT检索表内容以获得不正确的内容或失败。
--单事务选项和--锁表选项相互排斥,因为锁表会导致隐式提交任何挂起的事务。
另外,MySQL群集表不支持此选项;由于NDBCLUSTER存储引擎只支持READ_COMMITTED事务隔离级别,因此不能保证结果是一致的。您应该始终使用NDB备份和还原。
要转储大型表,您应该将--单事务选项与--快速操作组合起来。
https://dba.stackexchange.com/questions/14335
复制相似问题