一、Percona XtraBackup简介
Percona XtraBackup是MySQL数据库的一款开源热备份工具,特别适用于InnoDB/XtraDB存储引擎,能够在不锁表的情况下执行物理备份。相比逻辑备份工具如mysqldump,XtraBackup具有备份速度快、恢复速度快、对生产系统影响小等优势。
二、下载Percona XtraBackup软件包
下载地址:
https://downloads.percona.com/downloads/Percona-XtraBackup-8.4/Percona-XtraBackup-8.4.0-2/binary/redhat/9/x86_64/percona-xtrabackup-84-8.4.0-2.1.el9.x86_64.rpm(地址可能会变动)
三、使用wget下载软件包
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.4/Percona-XtraBackup-8.4.0-2/binary/redhat/9/x86_64/percona-xtrabackup-84-8.4.0-2.1.el9.x86_64.rpm
安装下载的软件包
yum install -y percona-xtrabackup-84-8.4.0-2.1.el9.x86_64.rpm
四、进行完整备份
(一) 1.创建一个备份的文件夹:mkdir /mysql_bk
2.开始备份(备份时不能停止数据库):
xtrabackup --defaults-file=/etc/my.cnf(数据库文件存放的位置)--backup --target-dir=(备份后文件存放的位置) -u root -p'密码' -H localhost -P 3306
最后一行提示ok即可:
3.备份完成后可以查看是否备份完成可以查看下备份文件夹下是否有内容:
ls /mysql_bk
(二)测试
1.清理数据库的内容(不建议这里仅用于测试)
数据库文件内容存放在 /var/lib/mysql/
rm -rf /var/lib/mysql/*
2.删除后可以查看里面是否还有内容
ls /var/lib/mysql/
(三)恢复
1.准备备份文件:xtrabackup --prepare --target-dir=(备份文件夹的路径)
最后一行提示ok即可
2.进行恢复:
xtrabackup --default-file=/etc/my.cnf --copy-back --target-dir=(备份文件夹的路径)
最后一行提示ok即可
3.进行授权
由于是用root账号进行备份的因此备份文件夹已经内容都是属于root,需要将mysql用户进行授权
chown -R mysql.mysql /var/lib/mysql
(四)备份完成进行测试
1.重新启动数据库:systemctl restart mysqld
2.登录数据库:mysql -u root -p
五、增量备份
1.进行增量备份之前需要先做一次完整备份(上面已经做过一次完整备份)
2.在数据库中变更一些数据
4.创建增量备份的文件夹
5.开始做增量备份:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=(创建文件夹的路径) --incremental-basedir=(第一次完整备份的路径,如果还要进行下一次的增量备份这个路径就不能填第一次完整备份的路径,需要填上一次增量备份的路径) -u root -p'密码' -H localhost -P 3306
6.恢复增量备份:
准备完整备份: xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=(第一次完整备份路径)
准备增量备份:xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only(最后一个增量备份一定不要加这个) --target-dir=(完整备份路径) --incremental-dir=(第一次增量备份的路径)
恢复到数据目录:关闭数据库:systemctl stop mysqld
删除数据库内容:rm -rf /var/lib/mysql/*(不建议)
将数据拷贝回至数据库:xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=(完整备份路径)
修改权限:chown -R mysql.mysql /var/lib/mysql
重新启动数据库:systemctl restart mysqld
进入数据库查看数据已经恢复
六、差异备份(只需要第一次和最后一次)
1.进行一次完整备份
2.在数据库中变更一些数据
3.开始做增量备份:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=(将文件想要存放的路径) --incremental-basedir=(同上一致) -u root -p'密码' -H localhost -P 3306
4.在数据库中变更一些数据
5.做差异备份:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=(将文件想要存放的路径) --incremental-basedir=(第一天完整备份路径,不再是增量备份路径) -u root -p'密码' -H localhost -P 3306
7.在数据库中变更一些数据
8.做差异备份:
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=(将文件想要存放的路径) --incremental-basedir=(第一天完整备份路径,不再是增量备份路径) -u root -p'密码' -H localhost -P 3306
9.恢复:
准备完整备份:
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=(第一次完整备份路径)
直接准备最后一次:
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=(完整备份路径) --incremental-dir=(放最后一次备份文件存放的路径)
恢复到数据目录:关闭数据库:systemctl stop mysqld
删除数据库内容:rm -rf /var/lib/mysql/*(不建议)
将数据拷贝回至数据库:xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=(完整备份路径)
修改权限:chown -R mysql.mysql /var/lib/mysql
重新启动数据库:systemctl restart mysqld
进入数据库查看数据已经恢复