我已经阅读了很多关于对 mySQL 进行一致备份的文章,包括一致数据集的含义是什么?(MySQL),但我仍然认为我的知识不足以自信地回答这个问题。我最初在 stackoverflow 上发布了这个问题,但一些知名成员建议这将是一个更好的地方。所以我基本上是在这里复制粘贴问题并从那里删除它。希望这是一种可以接受的做法 - 我就如何解决问题寻求帮助,但没有得到任何帮助。
仅使用启用了 file-per-table 的 InnoDB 表运行 MySQL 5.5,以支持在运行 Amazon Linux 的 Amazon EC2 上托管的多用户网站。
data
从我在这里和其他 Stack Exchange 站点中找到的内容来看,在关闭服务器后复制整个树以进行有效备份听起来是可以的。
我目前正在做的备份是:
- 停止阿帕奇
- 停止mysql
- 拍摄包含数据目录的卷的 lvm2 快照
- 启动mysql
- 启动阿帕奇
- 使用 rsnapshot 将 lvm2 快照复制到不同的卷
- 删除 lvm2 快照
在对https://stackoverflow.com/questions/9165118/lvm-mysql-backup/9165604#9165604的回答中,Bill Karwin 指出 lvm 快照会严重降低 I/O 性能。但我相信,由于 lvm 快照仅在 rsnapshot(使用 rsync)完成的短时间内处于活动状态,因此性能不会受到严重影响。
所以我的问题是我是否真的需要在拍摄 lvm 快照时停止服务器。我想我在某处读到,虽然“即时”快照可以捕获具有不完整事务的 InnoDB 表,但如果发生这种情况,mySQL 将在重新启动时始终如一地处理它们。所以我认为停止服务器可能是矫枉过正,即使它只是在拍摄 lvm 快照时停止了很短的时间。(我首先停止 apache,因此如果没有数据库运行,请求就无法进入)。
我一定会在http://www.percona.com/software/percona-xtrabackup上查看 Bill 的建议。它似乎在这里被引用了很多。它适用于 MySQL 5.5,还是我需要安装 Percona Server?与此同时,我想知道我是否可以对我正在做的事情进行渐进式的改进——或者我正在做的事情是否已经被打破了!
TL;DR : 使用 LVM 快照不需要停止服务。+1 XtraBackup。
不需要停止服务。LVM快照相当于拉了电源,也就是说它是一致的,但是和crash一样。从您的一个备份启动服务时,它必须进行崩溃恢复。执行此操作所需的时间取决于 InnoDB 日志文件的大小,但可能需要几分钟。崩溃恢复完成后,您的服务将重新启动并正常运行。
通过在快照之前关闭服务,您的恢复将开始得更快,但每次运行备份时都会以一些停机时间为代价。另外值得考虑的是,每次停止服务时,都会丢失所有的暖缓冲池,因此您还会因不得不再次将数据读入内存而导致性能下降。
XtraBackup 旨在与 Oracle MySQL 以及 Percona Server 一起使用。这是一个不错的选择,尽管与备份、测试、测试和再次测试它一样,以确保它在你发现你需要它之前工作。