利用xtrabackup8完全,增量備份及還原MySQL8
1、環境準備
伺服器 | 作用 | 資料庫版本 | xtrabackup版本 |
10.0.0.8 | 資料備份 | mysql8.0.26 | 8.0.28 |
10.0.0.18 | 資料還原 |
2、備份
[root@rocky8 ~]# ls
anaconda-ks.cfg percona-xtrabackup-80-8.0.28-20.1.el8.x86_64.rpm
[root@rocky8 ~]# yum install -y percona-xtrabackup-80-8.0.28-20.1.el8.x86_64.rpm
[root@rocky8 ~]# mkdir /data/backup
[root@rocky8 ~]# systemctl start mysqld.service
[root@rocky8 ~]# xtrabackup --backup --target-dir=/data/backup/base #完全備份
[root@rocky8 ~]# rz hellodb_innodb.sql
[root@rocky8 ~]# mysql < hellodb_innodb.sql #修改資料
[root@rocky8 ~]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| hellodb |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> insert students(name,age)values('wang',20); #修改資料
[root@rocky8 ~]# xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/base #第一次增量備份
[root@rocky8 ~]# mysql
mysql> insert students(name,age)values('jack',22); #第二次修改資料
[root@rocky8 ~]# xtrabackup --backup --target-dir=/data/backup/inc2 --incremental-basedir=/data/backup/inc1 #第二次增量備份
[root@rocky8 ~]# du -sh /data/backup/* #觀察目錄檔案的大小
70M /data/backup/base
4.9M /data/backup/inc1
2.0M /data/backup/inc2
[root@rocky8 ~]# scp -r /data/backup/* [email protected]:/data/backup/ #拷貝到遠端主機
[root@rocky ~]# cd /data/backup #遠端主機檢視拷貝過來生成的三個檔案
[root@rocky backup]# ls
base inc1 inc2
3、還原
# 還原機操作:
[root@rocky ~]# yum install -y percona-xtrabackup-80-8.0.28-20.1.el8.x86_64.rpm
##預準備完成備份,此選項--apply-log-only 阻止復原未完成的事務
[root@rocky ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base
#合并第1次增量備份到完全備份
[root@rocky ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/inc1
######## 合并第2次增量備份到完全備份:最後一次還原不需要加選項--apply-log-only #########
[root@rocky ~]# xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/inc2
[root@rocky ~]# systemctl stop mysqld
[root@rocky ~]# cd /data/backup/base/
[root@rocky base]# xtrabackup --copy-back --target-dir=/data/backup/base #執行這一步需要進入到備份目錄下,也就是base目錄下,要不然會報找不到備份檔案 #或者執行下面操作也可以
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@centos ~]#cp -r /backup/base/* /var/lib/mysql #執行了上邊指令就不用執行這一步
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@rocky base]# chown -R mysql. /var/lib/mysql
[root@rocky base]# systemctl start mysqld.service
#驗證
[root@rocky ~]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| hellodb |
mysql> use hellodb
mysql> select * from students;
| 26 | wang | 20 | F | NULL | NULL |
| 27 | jack | 22 | F | NULL | NULL |