疫情下在家里闲的无事,做了一盘红薯饼吃,吃的正香,想着前二天谈到数据的备份的重要性,不如索性把之前做过的备份整理一下:
基于Xtrabackup做备份恢复
优势:
1、快速可靠的进行完全备份
2、在备份的过程中不会影响到事务
3、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。
4、可以自动备份校验数据的可用性。
安装Xtrabackup
[root@BD ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.i686.rpm
其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得
注意:在备份数据库的时候,我们应该具有权限,但需要注意的是应该给备份数据库时的用户最小的权限,以保证安全性,
1前提:
应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复。
在配置文件里边的mysqld段加上
innodb_file_per_table = 1
2备份策略
完全备份+增量备份+二进制日志
3准备个目录用于存放备份数据
[root@BD ~]# makdir /innobackup
4做完全备份:
[root@BD ~]# innobackupex --user=root --password=mypass /innobackup/
注:
1)、只要在最后一行显示 innobackupex: completed OK!,就说明你的备份是正确的。
2)、另外要注意的是每次备份之后,会自动在数据目录下创建一个以当前时间点命名的目录用于存放备份的数据,那我们去看看都有什么
[root@BD 2019-09-12_11-03-04]# ls
backup-my.cnf ibdata1 performance_schema xtrabackup_binary xtrabackup_checkpoints
hellodb mysql test xtrabackup_binlog_info xtrabackup_logfile
[root@BD 2019-09-12_11-03-04]#
xtrabackup_checkpoints :备份类型、备份状态和LSN(日志序列号)范围信息;
xtrabackup_binlog_info :mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
xtrabackup_logfile :非文本文件,xtrabackup自己的日志文件
xtrabackup_binlog_pos_innodb :二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
backup-my.cnf :备份时数据文件中关于mysqld的配置
5回到mysql服务器端对数据进行更新操作
mysql> use hellodb;
mysql> delete from students where StuID>=24;
6增量备份
innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/2019-09-12_11-03-04/
--incremental 指定备份类型
--incremental-basedir= 指定这次增量备份是基于哪一次备份的,这里是完全备份文件,这样可以把增量备份的数据合并到完全备份中去
7第二次增量
先去修改数据
mysql> insert into students (Name,Age,Gender,ClassID,TeacherID) values ('tom',33,'M',2,4);
innobackupex --user=root --password=mypass --incremental /innobackup/ --incremental-basedir=/innobackup/2019-09-12_11-37-01/
这里只须要把最后的目录改为第一次增量备份的数据目录即可
8最后一次对数据更改但是没做增量备份
mysql> delete from coc where id=14;
9把二进制日志文件备份出来,(因为最后一次修改,没做增量备份,要依赖二进制日志做时间点恢复)
[root@BD data]# cp mysql-bin.000003 /tmp/
10模拟数据库崩溃
[root@BD data]# service mysqld stop
[root@BD data]# rm -rf *
恢复前准备
11对完全备份做数据同步
[root@BD ~]# innobackupex --apply-log --redo-only /innobackup/2019-09-12_11-03-04/
12对第一次增量做数据同步
innobackupex --apply-log --redo-only /innobackup/2019-09-12_11-03-04/ --incremental-basedir=/innobackup/2019-09-12_11-37-01/
13对第二次增量做数据同步
innobackupex --apply-log --redo-only /innobackup/2019-09-12_11-03-04/ --incremental-basedir=/innobackup/2019-09-12_11-45-53/
--apply-log 的意义在于把备份时没commit的事务撤销,已经commit的但还在事务日志中的应用到数据库
注:
对于xtrabackup来讲,它是基于事务日志和数据文件备份的,备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据库文件中的事务,还应该对其做预处理,把已提交的事务同步到数据文件,未提交的事务要回滚。因此其备份的数据库,不能立即拿来恢复。
预处理的过程:
首先对完全备份文件只把已提交的事务同步至数据文件,要注意的是有增量的时候,不能对事务做数据回滚,不然你的增量备份就没有效果了。
然后把第一次的增量备份合并到完全备份文件内,
以此类推,把后几次的增量都合并到前一次合并之后的文件中,这样的话,我们只要拿着完全备份+二进制日志,就可以做时间点恢复。
14数据恢复
[root@BD ~]# service mysqld stop
[root@BD data]# rm -rf * 模拟数据库崩溃
[root@BD ~]# innobackupex --copy-back /innobackup/2019-09-12_11-03-04/
--copy-back数据库恢复,后面跟上备份目录的位置
15检测:
[root@BD ~]# cd /mydata/data/
[root@BD data]# chown mysql:mysql *
[root@BD data]#service mysqld start
检测结果数据正常。
閱讀更多 問我35 的文章