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

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

发布:TangLu2018-11-11 15:53分类: MySQL 标签: mysql xtrabackup innobackupex

xtrabackup/innobackup是由Percona所发布的MySQL物理热备工具,备份期间不用间断业务、不会像mysqldump一样锁表,支持增量备份,备份速度快,对服务器负载也不会有太多开销,可以配合二进制日志实现增量备份。这2个工具都由Percona Xtrabackup这个工具包所支持,安装好了后2个工具都可以使用,xtrabackup针对innodb表做备份;innobackupex适合对非innod表做备份。由于未来版本已经淘汰Myisam表,所以现在innobackupex已经是xtrabackup的软连接,用innobackup去备份innodb表时会自动调用xtrabackup。下面会分别介绍2个工具的使用方法:


一、下载与安装xtrabackup

1、在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,未来版本会被淘汰。所以现在其实只需要会用xtrabackup就足够了,查看innobackupex也会发现它是xtrabackup的软连接,用innobackup备份innodb表时会自动调用xtrabackup。

xtrabackup3.png


二、innobackupex使用教程

1、使用innobackupex进行备份:

innobackupex全库完整备份

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

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


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打包并压缩备份,可以节约几十倍的空间,而且backup1中不会存放备份数据,而是直接传到backup2中,可以用这个特性实现本地不落地的远程备份。在恢复的时候需要先解压这个压缩包。

innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' --no-timestamp --stream=tar /data/backup1/ |gzip > /data/backup2/fullbak.tar.gz


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的配置文件、数据文件以及一个binlog_info,该文件记录了备份时刻binlog的位置,如图

xtrabackup4.png 

xtrabackup5.png


2、使用innobackupex进行数据恢复

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

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


恢复innobackupex的完整备份前先停止MySQL服务并让数据目录为空

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


使用--copy-back选项恢复数据,该命令会读取my.cnf所指定的datadir目录,然后将数据复制过去,然后需要手动修改权限。

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


3、使用innobackupex进行MySQL的增量备份与恢复

增量备份语法示例:

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就是第一次增量备份后产生的目录


恢复增量备份语法示例:

示例中的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


在实际工作中还需要结合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备份教程(二)使用xtrabackup/innobackupex物理备份教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-297.html  [生成短网址]

已有 0/1606 人参与

发表评论:

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

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