本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL备份教程(2)使用xtrabackup/innobackupex物理备份教程

MySQL备份教程(2)使用xtrabackup/innobackupex物理备份教程

发布:TangLu2020-2-8 11:48分类: MySQL 标签: mysql 备份

一、Xtrabackup工具介绍

xtrabackup是由Percona所发布的MySQL物理热备工具,该工具包同时包含了xtrabackup和innobackup两个备份工具。xtrabackup主要针对innodb表来做备份,而innobackupex还可以对非innod表做备份。由于现版本已淘汰MyIsam表,所以innobackupex其实也是xtrabackup的软连接,它会自动调用xtrabackup。物理备份相比mysqldump的逻辑备份来说有以下区别:

· 备份期间不用间断业务,如果有数据发生变化也会把redolog备份下来,保持数据一致。

· 不会像mysqldump一样锁表(如果是MyISAM引擎还是会有FTWRL)

· 支持增量备份

· 备份速度快,对服务器负载也不会有太多开销

· 单表备份和恢复时比较麻烦,不太推荐用物理备份

下面会分别介绍2个工具的使用方法:


二、安装Xtrabackup工具

1、在percona官网找到Percona Xtrabackup页面,根据系统选择合适的rpm包进行下载。或者根据页面“Prefer to install from our YUM repository”的提示找到yum源进行安装。

xtrabackup1.png


2、该软件包没有太多的依赖关系,如果出现“ libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el7.x86_64”这样的报错,只需要配置好EPEL的yum源,再安装libev即可,如图:

xtrabackup2.png


3、安装好xtrabackup后有2个命令可以用来备份,一个是针对innodb表的xtrabackup;另一个是非innod表的innobackupex,在文章开头已经提到了两者的区别,查看innobackupex也会发现它是xtrabackup的软连接,用innobackup备份innodb表时会自动调用xtrabackup。

xtrabackup3.png


三、innobackupex命令介绍

1、innobackup常用选项

--defaults-file=:指定my.cnf配置文件路径,如/etc/my3306.cnf。该选项必须是第一个选项,它会根据配置文件查找数据路径
--user=:执行备份操作的MySQL用户(非系统用户),该用户需要有MySQL的相关权限
--password=:MySQL用户的密码
--databases:指定要备份的数据库,多个数据库以空格隔开,如"db1 db2",在指定某数据库时也可以只指定其中的某张表(MySQL需要配置innodb_file_per_table = 1)
--no-timestamp:使用这个选项后,备份时不会创建一个以时间戳命名的目录
--compress:压缩备份数据,可以达到好几十倍的压缩率。恢复时需在apply-log之前增加--decompress解压步骤

--stream=xbstream:使用流式备份,可以实现本机不落盘的异地备份


2、innobackupex备份示例

使用innobackupex全库全量备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --no-timestamp /data/backup/ 


使用innobackupex备份同一个库下的不同表

innobackupex --defaults-file=/etc/my.cnf --user=dba --password=123456 --include="db1.table1,db1,table2..." /data/backup


使用innobackupex备份不同库的不同表

innobackupex --defaults-file=/etc/my.cnf --user=dba --password=123456 --databases="db1.table1 db2.table1..." /data/backup


innobackupex异地流式备份并打包传输,可以实现本地不落地推送到远程备份节点。注意在恢复的时候需要先对备份压缩包解压

#压缩
/usr/bin/xtrabackup  --defaults-file=$MYCNF --backup --user=$USER --password=$PWD --host=$HOST --port=$PORT --no-timestamp  --stream=xbstream 2 >> "$BASEDIR/$LOGFILE" |lz4 -B4|ssh $TO_HOST "cat - >mysqlfull_2020-06-17_3306.xbstream"
#先解压lz4
lz4_decompress mysqlfull_2020-06-17_3306.xbstream bi2_full_20200617.xbstream
#再解压xbstream
xbstream -x < ../bi2_full_20200617.xbstream  -C /data/mysql_restore/xtrabackup/


innobackupex加密备份

openssl rand -base64 24  #得到一串加密码
echo -n "pxT5aEDWzasNZw==" > /data/backup/key
innobackupex --default-file=/etc/my.cnf --user=dba --password=123456 --encrypy=AES256 --encrypt-key-file=/data/backup/key #加密备份
xtrabackup --decrypy=AES256 --encrypt-key="pxT5aEDWzasNZw=="  --target-dir=/data/backup/fullback --remove-original#解密,之后再用innobackup apply-log和--copy-back


不管是哪种备份形式,在备份期间如果有新数据产生会被记录在innobackup_log文件中。执行备份命令后屏幕会输出一系列的复制操作,并在指定的备份目录中以时间为名创建一个文件夹,里面除了MySQL配置文件、数据文件,还有2个文件需要关注,xtrabackup_binlog_info记录了备份时刻binlog的位置,xtrabackup_checkpoint记录了LSN,LSN记录了每一次备份时的起始点和结束点,通常上一次的结束点和下一次的起始点是连续的(如果开启了GTID的话会有9的误差)用于做增量备份。如图

xtrabackup4.png 

xtrabackup5.png


四、innobackupex数据恢复过程

1、apply-log阶段

由于备份过程中也记录了redolog中的数据,其中可能包含尚未提交完成的事务。为避免数据不一致,在进行数据恢复前需要使用--apply-log整理备份数据,把未提交的事务都进行回滚。如果迁移数据库到不同服务器,可能配置文件路径不同,通过--defaults-file可以指定配置文件,该选项必须放第一个

innobackupex  --defaults=file=/etc/my.cnf --apply-log  --user-memory=2G /backup/2016-03-29_17-28-37/  #执行整理操作时只用2G内存


2、恢复备份前需要先停止MySQL服务并让数据目录为空

systemctl stop mysqld
rm -rf /var/lig/mysql/*


3、--copy-back拷贝数据阶段

该命令会读取my.cnf所指定的datadir目录,然后将数据复制过去(所以直接手动cp数据也是可行的),然后手动修改权限。

innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/2016-03-29_17-28-37/
chown -R mysql.mysql /mysqldata


五、使用innobackupex进行MySQL的增量备份与恢复(在实际工作中不建议使用增量备份,而是采用全备+binlog的形式

1、增量备份

innobackupex --incremental /data/backup --incremental-basedir=/data/backup/2018-11-11_17-28-37  #指定了对哪个完整备份进行增量
innobackupex --incremental /data/backup --incremental-basedir=/data/backup/2018-11-12_17-28-37  #第二次增量备份时basedir就是第一次增量备份后产生的目录


2、恢复增量备份:

示例中的BASE-DIR指的是完整备份的目录;incremental-dir-1指的是第一次增量备份的目录,--incremental-dir-2指的是第二个增量备份目录,以此类推。特别注意的是--redo-only选项,即只用redo日志恢复数据而不用undo日志回滚未提交的事件,因为有可能一个事件在第一次备份时并没有提交完成而是在第二次备份时才执行完成,所以为了防止事件被回滚,除了最后一次增量数据外,其他都要加上--redo-only选项

innobackupex --apply-log  --redo-only  BASE-DIR   #首先整理完整备份数据 
innobackupex --apply-log  --redo-only  BASE-DIR --incremental-dir=incremental-dir-1  #整理合并增量备份
innobackupex --apply-log   BASE-DIR --incremental-dir=incremental-dir-2
innobackupex --copy-back  BASE-DIR  #使用合并后的完整备份目录进行--copy-back即可
chown -R mysql.mysql /mysqldata


3、通过binlog日志恢复未备份的数据,只要在恢复了全量数据后查看下xtrabackup_binlog_info文件就可以得知需要从哪儿开始恢复

cat xtrabackup_binlog_info  #假设这里记录到了binlog.000001的23874这个位置
mysqlbinlog --start-position=23874 binlog.000001 binlog.00002 binlog.00003 | mysql -uroot -p  #将23874之后的数据恢复,也可以先重定向到一个文本中检查后再手动导入


六、xtrabackup备份教程,很多选项和innobackupex是一样的,只需要记住备份--准备--还原的顺序一般不会有问题

1、关闭数据库并删除已有数据文件

service mysqld stop
rm -rf /data/mysql/data
mkdir /data/mysql/data
chown -R mysql.mysql /data/mysql/data


2、使用xtrabackup全库备份与数据恢复

#备份
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/data/backup  #backup代表备份;target-dir指定备份存放路径
#准备
xtrabackup --defaults-file=/etc/my.cnf  --prepare --target-dir=/data/backup  #prepare保持数据一致;
#还原
rsync -avrP /data/backup /data/mysql/data/ #官方推荐用rsync


如果需要备份指定数据库的话,在备份步骤中增加以下选项

--databases="database1 database2 database3 ..."  #备份指定库
--databases="database1.table1 database1.table2"  #备份指定表


xtrabackup的增量备份

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/data/full_backup
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/data/full_backup --incremental-basedir=/data/incremental01_backup
xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/data/incremental01_backup --incremental-basedir=/data/incremental02_backup


xtrabackup的压缩备份

#tar形式备份与解压
xtrabackup --defaults-file=/etc/my.cnf --user=dba --password=123456 --backup --stream=tar --target-dir=/data/backup | gzip > /data/backup/backup.tar.gz 
tar izxvf /data/backup/backup.tar.gz 

 #流格式备份与解压
xtrabackup --defaults-file=/etc/my.cnf --user=dba --password=123456 --backup --stream=xbstream --target-dir=/data/backup 1 > /data/backup/backup.xbstream
xbstream -x  /data/backup/backup.xbstream


3、再次修改权限并启动数据库,验证数据恢复情况

chown  -R mysql.mysql /data/mysql/data/
service mysqld start



温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《MySQL备份教程(2)使用xtrabackup/innobackupex物理备份教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-297.html  [生成短网址]

已有 0/2423 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~