我读过很多关于对 mySQL 进行一致性备份的文章,包括一致数据集是什么意思?(MySQL),但我仍然认为我所知道的知识还不足以自信地回答这个问题。我最初在 stackoverflow 上发布了这个问题,但一些声誉很高的成员建议我把这个问题发布在这里。所以我基本上是把问题复制粘贴到这里,然后从那里删除。希望这是一种可以接受的做法——我寻求帮助如何移动这个问题,但没有得到任何帮助。
运行 MySQL 5.5,仅使用启用了每个表一个文件的 InnoDB 表来支持在运行 Amazon Linux 的 Amazon EC2 上托管的多用户网站。
从我在这里和其他 Stack Exchange 站点找到的信息来看,data
关闭服务器后复制整个树以进行有效备份听起来是可以的。
我目前正在进行的备份是:
- 停止 Apache
- 停止mysql
- 对包含数据目录的卷进行 lvm2 快照
- 启动 mysql
- 启动 apache
- 使用 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。而且它似乎在这里被多次引用。它能很好地与 MySQL 5.5 配合使用吗,还是我需要安装 Percona Server?与此同时,我想知道我是否可以逐步改进我正在做的事情 - 或者我正在做的事情是否已经失败了!
答案1
TL;DR:使用 LVM 快照时无需停止服务。XtraBackup 加 1。
无需停止服务。LVM 快照相当于断电,这意味着它是一致的,但与崩溃相同。从您的某个备份启动服务时,它必须进行崩溃恢复。执行此操作所需的时间取决于您的 InnoDB 日志文件的大小,但可能需要几分钟。崩溃恢复完成后,您的服务将再次正常运行。
通过在快照之前关闭服务,您的恢复将更快启动,但每次运行备份时都会有一些停机时间。另外值得考虑的是,每次停止服务时,您都会丢失所有热缓冲池,因此您还需要再次将数据读入内存,这会导致一些性能下降。
XtraBackup 旨在与 Oracle MySQL 以及 Percona Server 配合使用。这是一个不错的选择,但与所有备份一样,测试、测试、再测试以确保它正常工作前你发现你需要它。