Mysql之xtrabackup工具的使用
xtrabackup介绍
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具
注:xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。
xtrabackup优缺点
XtraBackup的优点:
(1)备份速度快,物理备份可靠
(2)备份过程不会打断正在执行的事务(无需锁表)
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动备份校验
(5)还原速度快
(6)可以流传将备份传输到另外一台机器上
(7)在不增加服务器负载的情况备份数据
XtraBackup的缺点:
(1)文件大
(2)不总是可以跨平台、操作系统和MySQL版本
xtrabackup的使用
XtraBackup 8.0支持mysql 8.0
XtraBackup 2.4支持mysql 5.1、5.5、5.6、5.7
XtraBackup 8.0下载地址:https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
XtraBackup 2.4下载地址:https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
解压安装包
rpm -ivh percona-xtrabackup-24-2.4.21-1.el6.x86_64.rpm
warning: percona-xtrabackup-24-2.4.21-1.el6.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY error: Failed dependencies: libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64 perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64 perl(Digest::MD5) is needed by percona-xtrabackup-24-2.4.21-1.el6.x86_64
可能会出现以上错误,是因为缺少依赖包导致的
wget ftp://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm
rpm -ivh libev-4.04-2.el6.x86_64.rpm
yum -y install perl-DBD*
yum -y install perl-Digest*
依赖包安装完成后重新解压即可
echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
登录数据库创建备份用户
mysql -uroot -p
create user 'backup'@'%' identified by 'yayun'; grant all privileges on *.* to 'backup'@'%' identified by 'yayun'; flush privileges;
创建目录存放mysql备份文件
mkdir -p /data/backup/
mkdir -p /data/backup/inc1
mkdir -p /data/backup/inc2
全量备份
#mysql.sock填入自己实际路径即可
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock /data/backup
#在做增量备份时,自己可以先对数据库添加点数据
第一次增量备份
#incremental-basedir指定全量备份生成的文件
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock --incremental /data/backup/inc1 --incremental-basedir=/data/backup/2022-04-18_19-54-40
第二次增量备份
#incremental-basedir指定第一次增量备份生成的文件
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=yayun --socket=/tmp/mysql.sock --incremental /data/backup/inc2 --incremental-basedir=/data/backup/inc1/2022-04-18_19-56-38
查看备份文件
#可以看到除了全量备份外,其他两个增量备份都很小
[root@localhost backup]# du -sh 2022-04-18_19-54-40/ 142M 2022-04-18_19-54-40/ [root@localhost inc1]# du -sh 2022-04-18_19-56-38/ 11M 2022-04-18_19-56-38/ [root@localhost inc2]# du -sh 2022-04-18_19-58-24/ 11M 2022-04-18_19-58-24/
备份恢复
#先停止mysql数据库
systemctl stop mysqld
#将数据库data目录中的数据删除,可以先进行备份,data目录根据自己实际情况而定
mv /usr/local/mysql/data /usr/local/mysql/data_backup20220419
mkdir /usr/local/mysql/data
#全量备份回滚,这里指定到全量备份生成的文件
innobackupex --apply-log --redo-only /data/backup/2022-04-18_19-54-40
#第一次增量备份回滚,这里指定到第一次增量备份生成的文件
innobackupex --apply-log --redo-only /data/backup/2022-04-18_19-54-40 --incremental-dir /data/backup/inc1/2022-04-18_19-56-38
#第二次增量备份回滚,,这里指定到第二次增量备份生成的文件
innobackupex --apply-log /data/backup/2022-04-18_19-54-40 --incremental-dir /data/backup/inc2/2022-04-18_19-58-24
#数据copy到数据库目录,这里指定到全量备份生成的文件
innobackupex --copy-back /data/backup/2022-04-18_19-54-40
授权data目录
chown -R mysql.mysql /usr/local/mysql/data
重启mysql即可
systemctl restart mysqld