2012-06-19 52 views
1

我找不到链接了,但我记得读过如果在写入数据库时​​正在执行ec2快照 - 如果您从该快照创建ami并从该ami启动实例,则可能不会由于二进制文件中的错误而正确加载。是在执行mysql查询时执行ec2快照,还是等待查询完成,然后锁定数据库然后拍摄快照?ec2快照是否在执行前等待mysql查询完成?

另外 - 什么是快照最佳实践的MySQL应用程序?在拍摄快照之前是否需要锁定我的数据库?

最后 - 我偶尔会把这个数据库的mysqldumps。当你使用mysqldump时,它是否会冻结数据库的写入操作,然后继续转储数据,或者在转储之前需要锁定我的数据库?

回答

3
  1. 不,当您制作快照时,您不能保证文件系统不在写入过程中。如果使用量很高,最好先冻结您的音量。我使用XFS文件系统,并简单地使用XFS冻结来暂停文件系统。 (别忘了解冻它)

  2. 最好的做法是刷新你的MySQL表,锁定它们,冻结文件系统。这样你确保数据不会被破坏。

  3. mysqldump在确保您的数据没有损坏方面要好得多。您可以依靠mysqldump为您提供良好的数据,而无需冻结整个世界。

看看这个script我写了这么做。

我通常有一个mysql主从设置,每天在slave上做我的ebs快照,并且我做了mysql转储并更频繁地将它们上传到s3。

+0

感谢您的详细建议。你如何去冻结文件系统?我认为ec2快照会自动执行此操作,所以我需要做的只是'FLUSH TABLES WITH READ LOCK',拍摄一张快照,然后杀死正在运行的进程'FLUSH TABLES WITH READ LOCK' – user784637

+0

要冻结文件系统,请运行xfs_freeze命令(如果文件系统是XFS),请参阅:http://linux.die.net/man/8/xfs_freeze。 – chantheman

+0

但是要回答你的问题的其他部分,当问你是否应该冻结文件系统时,我已经得到了故事的两面。由于我的EBS卷只是由MySQL写的,只要我冻结表格,那我就很好。但为了安全起见,它不能冻结文件系统。如果您正在将日志写入该磁盘,或者MySQL没有在自己的卷上运行等,我会冻结磁盘。但是如果你确信只有MySQL写入磁盘,那么你可能会很好。 – chantheman