使用第三方工具来备份mysql—–percona
一、前期准备工作:
1、安装依赖包:yum -y install perl-Digest-MD5 perl-DBD-MySQL
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
2、安装主包: percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
percona是一款在线热备工具
3、包含两个组件:
/usr/bin/xtrabackup :支持innodb和xtraDB(增量备份)
/usr/bin/innobackupex :支持innodb和myisam(只支持全备,不支持增量)
4、innobackupex 包含的一些选项
–user 用户名
–password 密码
–databases 库名
–no-timestamp 不使用系统日期做备份目录的子目录名
–apply-log 恢复日志
–copy-back 恢复数据
二、完全备份和完全恢复
1、完全备份
innobackupex –user root –password 123456 –database="mysql db66 performance sys"
–no-timestamp /allbak //指定备份三个数据库,生成的备份文件目录不用系统时间做目录名
2、恢复数据时,数据库目录为空,三个系统库必须备份进去
首先恢复日志:innobackupex –user root –password 123456 –apply-log /allbak
删除数据库目录: rm -rf /var/lib/mysql
创建数据库目录: mkdir /var/lib/mysql
恢复数据:innobackupex –user root –password 123456 –copy-back /allbak/
赋予数据目录权限:chown -R mysql:mysql /var/lib/mysql
重启服务,验证:systemctl restart mysqld
三、增量备份和增量恢复
1、在增量备份之前先做一次完全备份。
innobackupex –user root –password 123456
–databases="performance_schema sys mysql db666"
–no-timestamp /onebak
2、第一次增量备份
innobackupex –user root –password 123456 //指定用户名密码
–databases="performance_schema sys mysql db666" //指定需要备份的数据库
–incremental /new1 //指定增量备份的路径
–incremental-basedir=/onebak //指定以哪个备份来做为增量备份的参考
–no-timestamp
3、第二次增量备份:
innobackupex –user root –password 123456
–databases="performance_schema sys mysql db666"
–incremental /new2 //第二次增量备份的路径
–incremental-basedir=/new1 //以上次增量备份做为参考来做增量备份
–no-timestamp
4、增量恢复的文件目录说明
xtrabackup_checkpoints xtrabackup_logfile //这两个文件记录修改的lsn号
5、恢复步骤
A、删除数据目录下的文件:rm -rf /var/lib/mysql/*
B、恢复日志—完全备份的日志
innobackupex –user root –password 123456
–databases="performance_schema sys mysql db666"
–apply-log –redo-only //恢复日志,并合并日志
/onebak –no-timestamp
C、恢复第一次增量的备份(只需要恢复日志,日志合并即可)
innobackupex –user root –password 123456
–databases="performance_schema sys mysql db666"
–apply-log –redo-only /onebak //源日志路径
–incremental-dir=/new1 –no-timestamp //需合并的日志文件的路径
D、恢复第二次增量的备份
innobackupex –user root –password 123456
–databases="performance_schema sys mysql db666"
–apply-log –redo-only /onebak //源日志文件的路径
–incremental-dir=/new2 –no-timestamp //第二次增量备份合并的日志
E、恢复数据,只需还原全备份里面的,因为增量备份的内容已经合并到全备里面
innobackupex –user root –password 123456 –copy-back /onebak
F、给数据目录给权限,重启服务验证
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysqld
四、恢复完全备份数据中的单张表
1、export //导出表信息 import //导入表空间
删除表空间:alter table 表 discard tablespace;
2、备份单个数据库:
innobackupex –user root –password 123456
–databases="mydb" –no-timestamp /mydb //只备份一个数据库
3、删除表,创建表(表字段必须要和以前的一样,模拟表丢失
drop table t1; create table t1(id int);
4、导出表信息:用到的参数是–export
innobackupex –user root –password 123456 –databases="db66" –apply-log –export /db66
5、删除表空间:在mysql命令行里操作
alter table db66.t1 discard tablespace;
6、把备份目录下导出的表信息拷贝到数据库目录下,并给权限
cp /db66/db66/t1.{cfg,exp,ibd} /var/lib/mysql/db66/
chown mysql /var/lib/mysql/db66/t1.*
7、导入表空间
alter table db66.t1 import tablespace;
8、验证:select * from db66.t1;