Xtrabackup的安装与使用
1. XtraBackup 简介
物理备份:开源最佳工具Xtrabackup
XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部开源,真可谓是业界良心。阿里的 RDS MySQL 物理备份就是基于这个工具做的。由于是采取物理拷贝的方式来做的备份,所以速度非常快,几十G数据几分钟就搞定了,而它巧妙的利用了mysql 特性做到了在线热备份,不用像以前做物理备份那样必须关闭数据库才行,直接在线就能完成整库或者是部分库的全量备份和增量备份。新版本的xtrabackup改成了cmake安装,和以前有点不一样。
版本说明:2.3.3之后不备份死锁,如果数据库是mysql 5.7之后的必须要装2.4.4才可以用,当然了, 会向下兼容的。
xtrabackup 是用来备份 InnoDB 表的,不能备份非 InnoDB 表,和 mysqld server 没有交互;innobackupex 脚本用来备份非 InnoDB 表,同时会调用 xtrabackup 命令来备份 InnoDB 表,还会和 mysqld server 发送命令进行交互,如加读锁(FTWRL)、获取位点(SHOW SLAVE STATUS)等。简单来说,innobackupex 在 xtrabackup 之上做了一层封装。
一般情况下,我们是希望能备份 MyISAM 表的,虽然我们可能自己不用 MyISAM 表,但是 mysql 库下的系统表是 MyISAM 的,因此备份基本都通过 innobackupex 命令进行;另外一个原因是我们可能需要保存位点信息。
另外几个工具相对小众些,xbcrypt 是加解密备份文件用的;xbstream 类似于tar,是 Percona 自己实现的一种支持并发写的流文件格式;两者在备份和解压时都会用到(如果备份用了加密和并发)。xbcloud 工具的作用是:把全部或部分 xbstream 档案从云上下载或上传到云。
注意:xtrabackup8.0只支持mysql8.0以上的版本,mysql5.7或以下需要使用xtrabackup8.0以下的版本
1、安装Percona XtraBackup
安装yum 源
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm 安装XtraBackup 2.4版本的
yum install -y percona-xtrabackup-24.x86_64 备份方式一:
备份命令
innobackupex --defaults-file=/etc/my.cnf --user=root --password='123456' /home/solr/bak/ 当然这里可以在数据库里面新增一个复制权限的用户用于备份
create user 'backup'@'localhost' identified by 'backup';
grant reload, lock tables, process, replication client on *.* to 'backup'@'localhost';
flush privileges; 那么如何恢复
还原数据库
先停止数据库,并备份数据库目录
(1)停止数据库
(2)做好备份,留下后路,免得跑路
(3)新创建一个目录
service mysql stop
mv /data/mysql /data/mysql.bak
mkdir /data/mysql 先应用日志
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /home/solr/bak/2020-12-24_16-41-43/ 再拷贝数据
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/solr/bak/2020-12-24_16-41-43 再修改权限
chown -R mysql:mysql /data/mysql 启动数据库
service mysql start 搞定
升级版 ,但是现在我们想要让他压缩一下呢,怎么弄?
安装qpress
yum -y install qpress 执行备份压缩命令
innobackupex --defaults-file=/etc/my.cnf --host=localhost --user=root --password=123456 /data/dbbak/innobackupex/ --no-timestamp --compress --compress-threads=5 这里还是很多文件啊 可以自己打包一下,当然后面我还会介绍直接压缩成一个tar包的方式
数据库还原
使用 qpress 命令将目标目录下所有以.qp结尾的文件都解压出来
xtrabackup --decompress --target-dir=/data/dbbak/innobackupex 剩下就是和上面一样 应用日志,恢复数据,更改权限,启动服务
service mysql stop
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/dbbak/innobackupex/
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/dbbak/innobackupex/
chown -R mysql:mysql /data/mysql
service mysql start 备注: 安装好 XtraBackup 之后,使用 xbstream 命令将备份文件.xd 文件解包到目标目录。这个是针对.xd 文件的,忽略
xbstream -x -C /data < ./test.xb /data 是还原文件 在、data 名称是 test.xb
压缩成一个tar文件,进行备份
time innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --no-timestamp /data/dbbak/full --tmpdir=/data/dbbak/full --stream=tar |gzip - > /data/dbbak/full/full.tar.gz 解压到指定文件目录
time tar -ixzvf /data/dbbak/full/full.tar.gz /data/dbbak/full/tmp 剩下的和之前的一样,我就直接copy下来了
service mysql stop
mv /data/mysql /data/mysql.bak
mkdir /data/mysql
innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/dbbak/full/tmp/
innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/dbbak/full/tmp/
chown -R mysql:mysql /data/mysql
service mysql start 到这里,我们回想,备份有了,那么肯定要有定时备份呀,定时备份功能编写
创建一个脚本文件
vim /data/script/mysql_full_backup.sh 编写任务代码
time="$(date +"back_%Y-%m-%d-%H-%M-%S")"
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --no-timestamp /data/dbbak/full --tmpdir=/data/dbbak/full --stream=tar |gzip - > /data/dbbak/full/full_${time}.tar.gz &>/dev/null crontab 调度任务
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有
进入编辑页面 添加每天凌晨进行一次全量备份
crontab -e 每天凌晨一点钟
0 1 * * * sh /data/script/mysql_full_backup.sh 但是我这里我们要先自己试一试自己的命令有没问题,做好测试,再正式使用
* * * * * sh /data/script/mysql_full_backup.sh
查看调度日志
tail -f /var/log/cron 全量备份有了,但是间隔太大,许多数据容易丢失怎么办,Xtrabackup还提供了增量备份,但是前提是依赖于全量备份,后续待补充。。。。
附加 8.0版本命令
生产环境使用最新版本的xtrabackup版本,鉴于xtrabackup 8.0版本移除命令,推荐使用xtrabackup命令进行备份和还原。
--------
--安装
--------
在percona官方下载centos版本的rpm包,使用yum安装(示例):
yum -y localinstall percona-xtrabackup-80-8.0.1-2.alpha2.el7.x86_64.rpm
sudo yum install https://repo.percona.com/centos/7/RPMS/noarch/percona-release-0.1-8.noarch.rpm
sudo percona-release enable tools testing
yum install percona-xtrabackup
----------
--全量备份:
---------
1.全量备份
xtrabackup --defaults-file=/etc/my.cnf --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --backup --target-dir=/data/backup/
或者:使用参数--datadir替换掉参数--defaults-file.
# xtrabackup --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --datadir=/data/crm/ --backup --target-dir=/data/backup/
2.数据恢复:
2.1停止掉运行的数据库实例:
# /etc/init.d/mysqld_multi stop 3310
2.2 准备:
xtrabackup --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --prepare --target-dir=/data/backup/
2.3 拷回数据:
xtrabackup --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --datadir=/data/crm --copy-back --target-dir=/data/backup/
2.3 修改目录属性启动数据库:
chown -R mysql.mysql /data/crm
chmod -R 755 /data/crm
2.4 启动数据库实例:
/etc/init.d/mysqld_multi start 3310
2.5 若有主从的问题可以查看备份目录下的文件:
# cat xtrabackup_binlog_pos_innodb
crm_bin.001282 1049711778
---—-----------
--增量备份:
---------------
全量备份的目录为:mkdir -p /data/backup
增量备份的目录为: mkdir -p /data/backupIncr
0. 备份操作之前需要停止掉数据库:
1.备份操作:
1.1.全量备份:
xtrabackup --defaults-file=/etc/my.cnf --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --backup --parallel=3 --target-dir=/data/backup/
1.2.增量备份:
xtrabackup --defaults-file=/etc/my.cnf --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --backup --parallel=3 --target-dir=/data/backupIncr --incremental-basedir=/data/backup
2.恢复操作:
2.1 准备全备份的日志:
xtrabackup --prepare --apply-log-only --target-dir=/data/backup
2.2 准备增量备份的日志:
xtrabackup --prepare --apply-log-only --target-dir=/data/backup --incremental-dir=/data/backupIncr
2.3 全备份准备:
# xtrabackup --prepare --target-dir=/data/backup
2.4 拷回数据:
xtrabackup --host=172.16.1.52 --user=root --password=xxxyyy --port=3310 --datadir=/data/crm --copy-back --target-dir=/data/backup/
2.5 修改数据目录的权限和属性:
# chown -R mysql:mysql /data/crm
chmod -R 755 /data/crm
2.6 启动实例:
/etc/init.d/mysqld_multi start 3310















还没有评论,来说两句吧...