MySQL备份与恢复——基于Xtrabackup物理备份恢复
转载
一、说明
Percona XtraBackup工具提供了一种在执行MySQL数据热备的方法。Percona XtraBackup是一个免费的、在线的、开源的、完整的数据库备份解决方案,适用于MySQL和MySQL®的所有版本的Percona服务器。
Percona XtraBackup在事务系统上执行在线非阻塞、紧密压缩、高度安全的完全备份,在备份时不会影响应用正常使用。
Percona Xtrabackup是一款开源的备份工具,支持Innodb、Mysiam、Xtradb等存储引擎数据的在线热备。其特点是备份速度快,对innodb型业务数据几乎无影响,对Myisam型数据会暂时性的锁表,且恢复速度更快。通常,Percona Xtrabackup软件部署有三种常见的方式,分别是rpm包、二进制包以及源码编译的方式安装。建议:使用二进制包方式安装,方便快捷。
1.1Percona Xtrabackup优势
-
快速可靠的数据库备份(如热备份、增量备份、bacula备份等)
-
份期间不间断的事务处理
-
节省磁盘空间和网络带宽与更好的压缩
-
自动备份验证
-
更高的正常运行时间,因为更快的恢复时间
-
于时间点恢复
1.2Percona Xtrabackup软件下载
1.3Percona Xtrabackup软件部署
在Linux系统创建/Xtrabackup目录,上传介质包percona-xtrabackup-2.3.10-Linux-x86_64.tar.gz
1 2 3 |
shell> mkdir –p /Xtrabackup sftp > cd /Xtrabackup sftp > put percona-xtrabackup-2.3.10-Linux-x86_64. tar .gz |
解压介质包,并设置环境变量
1 2 3 4 5 6 7 8 |
shell> cd /XtraBackup/ shell> tar zxvf percona-xtrabackup-2.3.10-Linux-x86_64. tar .gz shell> pwd /XtraBackup/percona-xtrabackup-2 .3.10-Linux-x86_64 /bin shell> vi /etc/profile export PATH= /mysql/app/bin : /XtraBackup/percona-xtrabackup-2 .3.10-Linux-x86_64 /bin :$PATH shell> source /etc/profile shell> su - |
至此,Percona Xtrabackup部署完成。
二、常用的参数列表
常用参数 |
含义 |
-u |
账户 |
-p |
密码 |
-P |
端口 |
-S |
套接字 |
-H |
主机ip |
--defaults-file |
读取参数文件位置 |
--databases |
指定数据库 |
--no-timestamp |
不生成时间戳 |
--slave-info |
获取主库端binlog位置 |
--incremental |
创建增量备份 |
--incremental-basedir |
指定full backup目录 |
--incremental-dir |
增量备份目录 |
--redo-only |
增量恢复使用 |
--apply-log |
应用日志 |
--copy-back |
拷贝到相应目录 |
--move-back |
移动到相应目录 |
三、备份恢复案例
3.1 全局备份恢复
3.1.1 全局备份
1 |
innobackupex --defaults- file = /etc/my .cnf --socket= /tmp/mysql .sock -uroot -pmysql [--slave-info] /xtrabak |
3.1.2 日志应用
1 |
innobackupex --apply-log /Xtrabackup/backup/2018-07-28_15-11-12 |
3.1.3全局恢复
1 |
innobackupex --defaults- file = /etc/my .cnf --copy-back /Xtrabackup/backup/2018-07-28_15-11-12 |
注:使用copy-back参数 datadir目录必须为空
3.2单表/多表备份恢复
3.2.1单表/多表备份
1 |
innobackupex --defaults- file = /usr/my .cnf --socket= /tmp/mysql .sock -uroot -proot (-–slave-info) --no-timestamp --databases= "yzw.a [yzw.b]" /xtrabak |
注:格式为 库名.表名,可同时将不同库下表进行导出
3.2.2日志应用
1 |
innobackupex --apply-log /Xtrabackup/backup/2018-07-28_15-11-12 |
3.2.3单表恢复
1.恢复准备,应用日志从开始点到备份结束点
1 |
innobackupex --apply-log -- export /xtrabackup/backup |
2.生产端获取建表语句并在目标端创建
3.目标端卸载ibd文件
1 |
alter table test .a discard tablespace; |
4.目标端拷贝备份文件至库目录
1 |
cp a.cfg a.exp a.ibd /var/lib/mysql/data/test/ |
5.目标端修改拷贝文件权限
1 |
chown -R mysql:mysql /var/lib/mysql/data/test/ |
6.目标端加载表空间.ibd 文件
1 |
alter table test .a import tablespace; |
3.3增量备份恢复
3.3.1增量备份
第一次全量备份
1 |
innobackupex --defaults- file = /etc/my .cnf --socket= /tmp/mysql .sock -uroot -pmysql --no-timestamp /xtrabak/full |
第一次增量备份 注:增量备份必须在全库备库基础上
1 |
innobackupex --defaults- file = /etc/my .cnf -uroot -pmysql --socket= /tmp/mysql .sock --no-timestamp --incremental /xtrabak/incre1 --incremental-basedir= /xtrabak/full |
第二次增量备份
1 |
innobackupex --defaults- file = /etc/my .cnf -uroot -pmysql --socket= /tmp/mysql .sock --no-timestamp --incremental /xtrabak/incre2 --incremental-basedir= /xtrabak/incre1 |
注:此时incremental-basedir 指向第一次增量备份目录
3.3.2日志应用
第一次应用备份文件
1 |
innobackupex --apply-log --redo-only /xtrabak/full |
第二次应用备份文件
1 |
innobackupex --apply-log --redo-only /xtrabak/full --incremental- dir = /xtrabak/incre1 |
第三次应用备份文件
1 |
innobackupex --apply-log /xtrabak/full --incremental- dir = /xtrabak/incre2 |
注:--redo-only参数 除最后一份增量文件的应用时不需要添加该参数外,其余都要加上该参数!!!
3.3.3全局恢复
1 |
innobackupex --defaults- file = /etc/my .cnf --move-back /Xtrabackup/backup/2018-07-28_15-11-12 |
注:--move-back参数将备份出来文件直接mv到datadir目录,建议使用--copy-back
3.4压缩特性
3.4.1压缩备份
1 |
innobackupex --defaults- file = /etc/my .cnf --user=root --password=mysql --no-timestamp --compress --compress-threads=8 /xtrabak |
3.4.2解压备份文件
解压decompress
1 |
innobackupex --decompress /xtrabak |
注:需要提前安装qpress命令,安装方式如下
1 2 3 |
shell> wget shell> tar xvf qpress-11-linux-x64. tar shell> cp qpress /usr/bin |
3.4.3日志应用
1 |
innobackupex --apply-log /xtrabak |
3.4.4全局恢复
1 |
innobackupex --defaults- file = /etc/my .cnf --copy-back /xtrabak |
3.5流特性
3.5.1流备份
1 |
innobackupex --defaults- file = /etc/my .cnf --user=root --password=mysql --stream= tar --no-timestamp /xtrabak 1> /xtrabak/full . tar |
注:直接生成tar包
3.5.2解压备份文件
3.5.3日志应用
1 |
innobackupex --apply-log /xtrabak |
3.5.4全局恢复
1 |
innobackupex --defaults- file = /etc/my .cnf --copy-back /xtrabak |