一.工具安装
[root@danny ~]# yum -y list |grep xtrabackup
percona-xtrabackup.x86_64 2.3.6-1.el7 @epel
holland-xtrabackup.noarch 1.1.10-1.el7 epel
percona-xtrabackup-test.x86_64 2.3.6-1.el7 epel
[root@danny ~]# yum -y install percona-xtrabackup
二.全量备份
#全备
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/
#该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/data),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。
备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/data/2019-02-18_13-15-45/),在该目录下存放备份文件。
#在/data目录下可看到备份目录如下
[root@danny data]# ls
2019-02-18_13-15-45
#查看原mysql库目录和当前备份目录区别
[root@izm5edykqg8tzid352ga0iz data]# ls /var/lib/mysql.bak/
auto.cnf ibdata1 lfc_oasys mysql-bin.000009 mysql-bin.index relay-log.info sshmall
binlog_rollback.py ib_logfile0 lfc_wm mysql-bin.000010 mysqld-relay-bin.000001 rollback T1
diymall ib_logfile1 master.info mysqld-relay-bin.index rollback.sql wordpress
electronicproductssh_db lfcmall mysql mysql-bin.000012 performance_schema sdbp2
[root@izm5edykqg8tzid352ga0iz data]# ls /data/2019-02-18_13-15-45/
backup-my.cnf ibdata1 lfcmall mysql sdbp2 wordpress xtrabackup_checkpoints
diymall ib_logfile0 lfc_oasys performance_schema sshmall xtrabackup_binlog_info xtrabackup_info
electronicproductssh_db ib_logfile1 lfc_wm rollback T1 xtrabackup_binlog_pos_innodb xtrabackup_logfile
三.备份恢复
注:恢复之前,要先关闭数据库,并且删除数据文件和日志文件(本次我直接删除mysql/data目录下所有文件--有备份),否则恢复时会报错。
/etc/init.d/mysqld stop
rm -rf /var/lib/mysql/data/*
innobackupex --defaults-files=/etc/my.cnf --user=root --password=123456 --apply-log /data/2019-02-18_13-15-45/
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2019-02-18_13-15-45/
从上面可以看出,恢复分为两个步骤
第1步是apply-log,为了加快速度,一般建议设置--use-memory,如:--use-memory=6G,这个步骤完成之后,目录/data/2019-02-18_13-15-45/下的备份文件已经准备就绪。
注意:准备全备文件的操作只是对备份集(/data/2019-02-18_13-15-45)本身做相关处理,所以在准备恢复前最好对备份集再次备份
第2步是copy-back,即把备份文件拷贝至原数据目录下。
注意:恢复完成后一定要检查并修改权限,如下: chown -R mysql.mysql /var/lib/mysql /etc/init.d/mysqld start
恢复并重启mysql后目录如下:
[root@danny data]# ls /var/lib/mysql
auto.cnf ibdata1 lfcmall mysql mysql.sock sp2p wordpress
diymall ib_logfile0 lfc_oasys mysql-bin.000001 performance_schema sshmall xtrabackup_binlog_pos_innodb
electronicproductssh_db ib_logfile1 lfc_wm mysql-bin.index rollback T1 xtrabackup_info
四.增量备份还原
备份
1.先全量备份
innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg /data/
2.第一次增量
innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-48-41/ /data/
3.第二次增量
innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-53-55/ /data/
备份目录如下
[root@danny data]# ls
2019-02-19_09-48-41 //全量备份
2019-02-19_09-53-55 //第一次增量
2019-02-19_09-56-19 //第二次增量
还原
1.停止mysql服务器并清空数据目录
/etc/init.d/mysqld stop mv /var/lib/mysql/data /tmp/
2.prepare全备
innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41
3.prepare第一个增量
innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41 --incremental-dir=/data/2019-02-19_09-53-55
4.prepare第二个增量
innobackupex --incremental --apply-log /data/2019-02-19_09-48-41 --incremental-dir=/data/2019-02-19_09-56-19 //注意最后一个增量没有--redo-only参数
此时两次增量备份其实都合并到全备上了,恢复是只需要使用全备进行恢复就可以了
5.所有整合数据还原
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/2019-02-19_09-48-41
6.修改mysql数据目录权限启动服务
chown -R mysql.mysql /var/lib/mysql /etc/init.d/mysqld start
7.数据验证
注意:
1.通过上面三个备份目录里的xtrabackup_checkpoints文件(2019-02-19_09-53-55/xtrabackup_checkpoints),可以看出是哪种备份类型,全量(full-backuped)还是增量(incremental) 并且全量到增量的from_lsn和last_lsn是一一对应的。