数据备份与恢复

时间:2022-09-14 00:06:44

一.备份与导出的区别

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,重启数据库