innobackupex 单数据库备份和还原(增量备份)
innobackupex 安装
命令行下安装指令如下:
$ wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
单数据库备份
因为innobackupex可实现热备,无须停止数据库服务。
这里简单把我在本地备份的步骤写一下。
首先,第一次备份需要进行一次全备(可指定对应数据库)
sudo innobackupex --user=root --password=12345678 --databases=DB auto_backup/
参数一目了然,需要说明的是如果没有指定databases,那么将会把所有的database全都备份起来。最后一个参数是指定备份将会被放置的文件夹名称。然后因为备份需要权限来访问mysql数据文件所在位置,所以需要sudo。
(指令还有其他参数可参考官方文档,如有更新日后补充TODO)
可以看到,在我们指定的auto_backup文件夹中,我们生成了一个标有时间的数据库备份文件夹,为了便于与下文中的增量备份文件夹区分,我们用 mv 指令将其重命名为 full_backup。
然后,可进行增量备份:
sudo innobackupex --user=root --password=12345678 --databases=DB --incremental auto_backup/ --incremental-basedir=auto_backup/full_backup
增量备份指令与全备份指令略有不同,–incremetal参数指明这是一次增量备份,而后指明放置增量备份的文件夹的名称。
–incremental-basedir指明此次备份是基于哪一次备份进行的增量备份的文件夹,注意,这里可以是全备份,也可以是增量备份。
可以看到,在我们指定的auto_backup文件夹中,我们生成了一个标有时间的数据库增量备份文件夹,我们用 mv 指令将其重命名为 increment_backup。
两个文件夹中的xtrabackup_checkpoints可以了解到备份类型,Lsn,日志偏移量等信息,因为在做增量备份前没有对数据库进行增删操作,两个备份的last_lsn没有发生变化。
数据库备份还原
注意:在进行备份还原之前,一定要记得把mysql服务停止,否则备份恢复会失败,同时也会导致部分数据库配置文件缺失,如mysqld.sock,mysqld.pid等,解决起来很麻烦(卸载重装大法):
service mysql stop
然后,备份前的准备:
sudo innobackupex --apply-log --redo-only --no-lock auto_backup/full_backup
将增量备份还原到全备份中:
sudo innobackupex --apply-log --redo-only --no-lock auto_backup/full_backup --incremental-dir=auto_backup/increment_backup
然后,通过直接复制文件的方式,但是可能会产生一致性问题(TODO):
sudo cp auto_backup/full_backup/. /var/lib/mysql/ -rf
修改数据文件目录权限:
sudo chown -R mysql /var/lib/mysql
启动数据库服务:
service mysql start
大功告成!