本来可以一篇写完,结果由于不可抗因素(笔记本没电了╮(╯▽╰)╭),导致分为了上下两篇。

基于xtrabackup实现备份恢复

mariadb 10.2.15要使用最新的2.4.11版本(这里版本一定要选择好,否则会无法备份文后会附加下载链接)

完全备份和恢复

1.安装percona-xtrabackup

yum localinstall percona-xtrabackup-24-2.4.11-1.el7.x86_64.rpm -y

2.完全备份(先导入了一个自建的hellodb作为测试数据)

# innobackupex (--user=root) /backup/默认就是以root用户去备份,这里省略了
innobackupex  /backup/

3.删除数据模拟损坏

rm -rf /data/mysql/*

4.整理日志信息

innobackupex --apply-log /backup/2018-06-15_22-12-06/

5.停止数据库

systemctl stop mariadb

6.恢复数据到目录并修改权限

innobackupex --copy-back /backup/2018-06-15_22-12-06/
chown -R mysql:mysql /data/mysql/

7.启动mariadb,验证是否成功

systemctl start mariadb

实现增量备份

1.要实现增量备份也是要在完全备份的基础上实现

innobackupex  /backup/

原始数据库状态 2.为了看起来明了简单这里做3次增量备份,并且设置对应的目录存放,生产中也可以做类似分类,这样可以使得备份目录看起来简单明了。

	mkdir /backup/inc{1,2,3}

3.模拟修改数据库并且每次修改后都做一次增量备份

#第一次修改数据库
mysql >create database db1;
#做增量备份
innobackupex --incremental /backup/inc1/ --incremental-basedir=/backup/2018-06-16_09-53-14
#第二次修改
mysql >create database db2;
#做增量备份
innobackupex --incremental /backup/inc2/ --incremental-basedir=/backup/inc1/2018-06-16_09-55-34
#做第三次修改(这里导入一个有数据的数据库)
mysql <hellodb_innodb.sql
#做增量备份
innobackupex --incremental /backup/inc3/ --incremental-basedir=/backup/inc2/2018-06-16_09-57-57

下图是最后的数据库信息 4.模拟损坏数据

rm -rf /data/mysql/*
ls /data/mysql/

5.停止数据库并准备恢复数据

#整合增量备份
innobackupex --apply-log --redo-only /backup/2018-06-16_09-53-14/
innobackupex --apply-log --redo-only /backup/2018-06-16_09-53-14/ --incremental-dir=/backup/inc1/2018-06-16_09-55-34
innobackupex --apply-log --redo-only /backup/2018-06-16_09-53-14/ --incremental-dir=/backup/inc2/2018-06-16_09-57-57
 innobackupex --apply-log --redo-only /backup/2018-06-16_09-53-14/ --incremental-dir=/backup/inc3/2018-06-16_09-59-48
#关闭数据库,如果是新机器数据没启动就不用关闭,但是新环境记得要修改数据库配置文件与原相同
systemctl stop mariadb

#查看数据目录是否为空,并导入数据
ls /data/mysql/
innobackupex --copy-back /backup/2018-06-16_09-53-14/

#修改权限
chown -R mysql:mysql /data/

#启动数据库
  systemctl start mariadb

6.登陆数据库并检查,数据完全恢复

实现单表备份和恢复

清除之前是备份 1.备份单表

innobackupex --include="hellodb.stdents" /backup/
#导出建表过程,并且删除无用的字段
mysql -e 'show create table hellodb.students' > students.sql

2.模拟表损坏或者被删除

mysql -e 'drop table hellodb.students'

3.恢复数据

# 整理数据
innobackupex --apply-log --export /backup/2018-06-16_10-21-54/

#恢复表结构
mysql hellodb < students.sql

#删除表空间
mysql -e 'alter table hellodb.students discard tablespace'

#恢复文件(在备份目录里)
cp students.cfg students.exp students.ibd /data/mysql/hellodb/

#修改权限
chown -R mysql:mysql /data/mysql/hellodb/*

#导入表空间
mysql -e 'alter table hellodb.students import tablespace'
    

4.验证是否恢复

xtrabackup下载地址 https://www.percona.com/downloads/XtraBackup/LATEST/ 使用的hellodb.sql文件地址 https://pan.baidu.com/s/1uI3Br-HJ8t5-C-_bfZenPg