数据备份与恢复
一.备份与导出的区别
1.数据导出用于把数据从一个系统迁移到另一个系统
2.数据备份用于保存一个数据库实例的全部信息
二.备份方式
1.联机冷备份
2.联机热备份
备份时需要注意auto.cnf文件,如果跨主机应用应该区别auto.cnf
三.整体表碎片文件
alter table test1 engine = innodb;
四.xtrabackup
1.优势
1.xtrabackup备份过程加读锁,数据可以读,但是不可以写 2.xtrabackup备份过程不会打断正在执行的事务 3.xtrabackup能够基于压缩等功能节约磁盘空间和流量
2.原理:
xtrabackup是一种物理备份工具,通过协议连接到mysql服务端,然后读取并复制底层文件,完成物理备份
xtrabackup支持innodb引擎做全量备份和增量备份
xtrabackup只能对myisam引擎做全量备份
3.安装
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install percona-xtrabackup-24
4.全量热备份
<1>xtrabackup命令种类
序号 | 命令 | 描述 |
1 | xbcrypt | 用于加密或者解密备份的数据 |
2 | xbstream | 用于压缩或者解压缩xbstream文件 |
3 | xtrabackup | 备份innodb数据表 |
4 | innobackupex | 是上面三种命令的perl脚本封装 |
<2>.备份命令
A.全量热备份命令:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata
恢复:
关闭数据库,将数据目录备份移动到其他目录 ,然后执行如下操作:
innobackupex --apply-log /backdata/2019-01-18_10-23-56/
innobackupex –defaults-file=/etc/my.cnf –copy-back /backdata/2019-01-18_10-23-56/
然后将数据目录的权限改为mysql,启动数据库
B.使用流式压缩备份
参数如下:
innobackupex ..... --no-timestamp --stream=xbstream -> /backdata2/bak.xbstream
示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--no-timestamp --stream=xbstream ->/backdata2/backup.xbstream
恢复:
关闭数据库,将数据目录移到其他目录,执行如下操作:
mkdir /justbak
xbstream -x < /backdata2/backup.xbstream -C /justbak
innobackupex –apply-log /justbak/
innobackupex –defaults-file=/etc/my.cnf –copy-back /justbak
将数据目录的权限改为mysql,然后启动mysql
C.使用加密备份
序号 | 参数 | 描述 |
1 | encrypt | 用于加密的算法:AES128,AES192,AES256 |
2 | encrypt-threads | 执行加密的线程数 |
3 | encrypt-chunk-size | 加密线程的缓存大小 |
4 | encrypt-key | 密钥字符 |
5 | encryption-key-file | 密钥文件 |
命令参数如下:
innobackupex --encrypt=AES256 --encrypt-threads=10 --encrypt-key=....... --encrypt-chunk-size 521 .....
示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512
--no-timestamp --stream=xbstream -> /backdata3/backup1.xbstream
恢复:
关闭数据库,将数据目录移到其他目录,执行如下操作:
mkdir /justbak
xbstream -x < /backdata3/backup1.xbstream -C /justbak
innobackupex –decompress –decrypt=AES256 –encrypt-key=111111111111111111111111 /justbak
innobackupex –apply-log /justbak/
innobackupex –defaults-file=/etc/my.cnf –copy-back /justbak
将数据目录的权限改为mysql,启动mysql
D.其他参数
序号 | 参数 | 描述 |
1 | compress | 压缩innodb数据文件 |
2 | compress-threads | 执行压缩的线程数 |
3 | compress-chunk-size | 压缩线程的缓存 |
4 | include | 需要备份的数据表的正则表达式 |
5 | galera-info | 备份pxc节点状态文件 |
命令参数如下: innobackupex .... --compress --compress-threads=10 --include=test1.t1,test1.t2 --galera-info ....
示例:
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512
--compress --compress-threads=10 --include=test1.t1,test.t1 --galera-info
--no-timestamp --stream=xbstream ->/backdata4/b.xbstream
E.通过脚本自动备份
#!/bin/bash time=$(date "+%Y-%m-%d %H:%M:%S") echo "执行全量热备份" innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 --encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512 --no-timestamp --stream=xbstream -> /backdata5/backup1.xbstream
<3>.恢复命令
恢复前准备工作
1.关闭mysql,清空数据目录,包括表分区的目录
2.回滚没有提交的事务,同步已经提交的事务到数据文件
5.增量备份
1.无论全量热备份使用了流式压缩,还是内容加密,都必须解密解压缩成普通全量热备份
2.增量热备份可以使用流式压缩或者内容加密
例子:
首先备份
1.首先全备 innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata
2.首次增备
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
--incremental-basedir=/backdata/2019-01-21_11-36-02/ --incremental /inc
3.第二次增备
innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456
--incremental-basedir=/inc/2019-01-21_11-42-32/ --incremental /inc/
然后恢复:
处理事务日志 1.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/
2.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-42-32/
3.innobackupex --apply-log /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-46-18/
4.关闭数据库,并移动数据目录到其他目录
5.还原
innobackupex --defaults-file=/etc/my.cnf --copy-back /backdata/2019-01-21_11-36-02
6.将数据目录文件权限改为mysql,重启数据库