網(wǎng)上做網(wǎng)站 干對(duì)縫兒生意廣州seo公司品牌
MySQL數(shù)據(jù)庫(kù)備份-XtraBackup-全量備份
- 前言
- 環(huán)境
- 版本
- 安裝部署
- 下載
- RPM 包
- 二進(jìn)制包
- 安裝
- 卸載
- 場(chǎng)景分析
- 全量備份 | 恢復(fù)
- 備份
- 恢復(fù)
- 綜合
- 增量備份 | 恢復(fù)
- 部分備份 | 恢復(fù)
前言
關(guān)于數(shù)據(jù)庫(kù)備份的一些常見(jiàn)術(shù)語(yǔ)、工具等,可見(jiàn)《MySQL數(shù)據(jù)庫(kù)-備份》章節(jié),當(dāng)前不再重復(fù)概述。本篇主要對(duì) XtraBackup
工具的使用做下詳細(xì)講解。
首先,說(shuō)下所使用的環(huán)境、版本。
環(huán)境
- 操作系統(tǒng):Red Hat Enterprise Linux Server release 7.5 (Maipo)
- 數(shù)據(jù)庫(kù):mysql Ver 8.0.32 for Linux on x86_64 (MySQL Community Server - GPL)
- XtraBackup:
- percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
- percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm
版本
關(guān)于 XtraBackup 的版本這里有必要說(shuō)明下,參考官網(wǎng)如下:
- https://www.percona.com/blog/aligning-percona-xtrabackup-versions-with-percona-server-for-mysql/
- 翻譯成大白話的意思就是:Percona XtraBackup 的版本要超過(guò)(
大于或等于
)數(shù)據(jù)庫(kù)的版本。
但我個(gè)人的習(xí)慣,還是盡量和數(shù)據(jù)庫(kù)的版本保持一致(僅個(gè)人習(xí)慣)。
原因如下:
當(dāng)前 MySQL 數(shù)據(jù)庫(kù)版本 8.0.32
,若安裝 XtraBackup 版本為 8.0.35-??
,則查看 XtraBackup 版本時(shí),將有如下輸出、其最后一句,看著別扭。
版本也是經(jīng)過(guò)測(cè)試的,可以備份 MySQL 8.0.32
的版本。
而且備份中,也有輸出:
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
看著就是別扭,故 XtraBackup 版本一般與數(shù)據(jù)庫(kù)當(dāng)前版本保持一致。
安裝部署
下載
下載安裝包的方式較多,當(dāng)前主要以RPM包
、二進(jìn)制包
進(jìn)行講解,本篇博文使用RPM包
安裝部署、測(cè)試。
RPM 包
訪問(wèn)官網(wǎng)地址:https://www.percona.com/downloads
打開(kāi)官網(wǎng)頁(yè)面后,鼠標(biāo)往下扒拉、可找到如下截圖:依次選擇、下載 即可。
或者直接使用下載地址:
- 8.0.35
https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm - 8.0.32
https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-25/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-25.1.el7.x86_64.rpm
二進(jìn)制包
- 執(zhí)行如下命令進(jìn)行下載:
- 命令參考官網(wǎng)地址:https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball.html
$ wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarball/percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.17.tar.gz
上述下載命令中包版本的選擇(或者包名字的選擇), 可參考官網(wǎng)如下地址:
https://docs.percona.com/percona-xtrabackup/8.0/binary-tarball-names.html
安裝
在安裝 XtraBackup 過(guò)程中遇到了報(bào)錯(cuò),見(jiàn)《XtraBackup 安裝報(bào)錯(cuò) zstd》文章,故提前做下依賴包的安裝。
- 安裝依賴包執(zhí)行如下命令:
yum -y install epel-release zstd
- 安裝 XtraBackup
yum -y install percona-xtrabackup-80-8.0.35-30.1.el7.x86_64.rpm
- 查看版本
說(shuō)明下哈
:實(shí)際上,我使用的版本是8.0.32
版本,當(dāng)前安裝的是8.0.35
版本,你懂我的意思吧?-- 下面有卸載步驟。
[root@testdbmy01 soft]# xtrabackup -version2024-06-01T10:05:07.033137+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --server-id=8833 --datadir=/mysql/data --tmpdir=/mysql/tmp --open_files_limit=65535 --log_bin=/mysql/binlog/mysql-bin --innodb_data_home_dir=/mysql/data/ --innodb_log_group_home_dir=/mysql/data/ --innodb_file_per_table=1 --innodb_data_file_path=ibdata1:1G:autoextend --innodb_flush_log_at_trx_commit=1 --innodb_buffer_pool_size=1G --innodb_io_capacity=1000 --innodb_max_dirty_pages_pct=60 --innodb_flush_method=O_DIRECT --innodb_log_file_size=2G --innodb_log_files_in_group=2 --innodb_log_buffer_size=64M --innodb_write_io_threads=8 --innodb_read_io_threads=8 --innodb_open_files=4096
xtrabackup version 8.0.35-30 based on MySQL server 8.0.35 Linux (x86_64) (revision id: 6beb4b49)
[root@testdbmy01 soft]#
卸載
- 查找已經(jīng)安裝的 XtraBackup 名稱(chēng)
[root@testdbmy01 soft]# yum list installed | grep -i xtrabackup
percona-xtrabackup-80.x86_64 8.0.35-30.1.el7 installed
[root@testdbmy01 soft]#
- 卸載
[root@testdbmy01 soft]# yum -y remove percona-xtrabackup-80.x86_64
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 will be erased
--> Finished Dependency ResolutionDependencies Resolved==========================================================================================================================================================================================Package Arch Version Repository Size
==========================================================================================================================================================================================
Removing:percona-xtrabackup-80 x86_64 8.0.35-30.1.el7 installed 219 MTransaction Summary
==========================================================================================================================================================================================
Remove 1 PackageInstalled size: 219 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionErasing : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64 1/1 Verifying : percona-xtrabackup-80-8.0.35-30.1.el7.x86_64 1/1 Removed:percona-xtrabackup-80.x86_64 0:8.0.35-30.1.el7 Complete!
[root@testdbmy01 soft]#
場(chǎng)景分析
再次聲明 雖然安裝
的步驟中是8.0.35
版本,但實(shí)際上:背地里 偷偷的卸載重裝了 XtraBackup 版本是 8.0.32
。
如下場(chǎng)景也是基于8.0.32
版本,一個(gè)小版本號(hào)而已,問(wèn)題不大。
全量備份 | 恢復(fù)
備份
- 創(chuàng)建備份目錄(使用
root
用戶執(zhí)行)
[root@testdbmy01 /]# DATE=`date +%Y%m%d%H`
[root@testdbmy01 /]# mkdir -p /backup/$DATE
- 執(zhí)行備份
[root@testdbmy01 /]# xtrabackup --backup --target-dir=/backup/2024060110 --user=root --password=123456
參數(shù)講解:
--backup
:指示 XtraBackup 執(zhí)行備份。--target-dir
:指定備份文件的目標(biāo)目錄。--user
和--password
:用于訪問(wèn) MySQL 數(shù)據(jù)庫(kù)的用戶憑證。
- 準(zhǔn)備數(shù)據(jù)
[root@testdbmy01 /]# xtrabackup --prepare --target-dir=/backup/2024060110
這個(gè)準(zhǔn)備數(shù)據(jù) 是干啥的?能不能省略?
既然寫(xiě)了,那肯定是不能省略滴~。原因有以下三個(gè):
應(yīng)用事務(wù)日志
:在備份期間,XtraBackup 會(huì)創(chuàng)建一個(gè)不一致的備份,因?yàn)閿?shù)據(jù)庫(kù)在備份過(guò)程中可能有寫(xiě)操作。為了確保備份的一致性,需要應(yīng)用事務(wù)日志。--prepare
步驟會(huì)讀取備份中的事務(wù)日志文件,并應(yīng)用這些日志到數(shù)據(jù)文件,從而使數(shù)據(jù)文件處于一致?tīng)顟B(tài)。使備份可恢復(fù)
:未經(jīng) --prepare 處理的備份數(shù)據(jù)文件是不可恢復(fù)的。必須先準(zhǔn)備備份,應(yīng)用所有的事務(wù)日志,才能確保恢復(fù)時(shí)數(shù)據(jù)文件的一致性。支持增量備份
:如果你在全量備份的基礎(chǔ)上執(zhí)行了增量備份,必須先對(duì)全量備份執(zhí)行 --prepare --apply-log-only,然后才能應(yīng)用增量備份。最后再執(zhí)行一次 --prepare,使整個(gè)備份集可恢復(fù)。
上述的備份,涉及的命令,也可以合并在一起。如下,將其放到腳本中了。
使用時(shí),
先設(shè)置下這 3個(gè)變量:BACKUP_DIR
、MYSQL_USER
、MYSQL_PASSWORD
然后,用 root 賬號(hào)執(zhí)行就好了,sh export.sh
,是不是很 easy …
cat > backup_export.sh <<EOF
#!/bin/bash# 設(shè)置變量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 創(chuàng)建備份目錄
mkdir -p \$BACKUP_DIR# 執(zhí)行全量備份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 檢查備份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 準(zhǔn)備備份數(shù)據(jù)xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
恢復(fù)
恢復(fù)步驟,更 easy 了,就 1 條命令。
[root@testdbmy01 backup]# xtrabackup --copy-back --target-dir=/backup/2024060110
綜合
主要是基于上面的備份
、恢復(fù)
步驟,進(jìn)行一次完整的演示操作。這里主要分為 6個(gè)步驟,如下:
- 創(chuàng)建 腳本,并執(zhí)行,完成備份。
- 創(chuàng)建腳本
cat > backup_export.sh <<EOF
#!/bin/bash# 設(shè)置變量
BACKUP_DIR="/backup/`date +%Y%m%d%H`"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"# 創(chuàng)建備份目錄
mkdir -p \$BACKUP_DIR# 執(zhí)行全量備份
xtrabackup --backup --target-dir=\$BACKUP_DIR --user=\$MYSQL_USER --password=\$MYSQL_PASSWORD# 檢查備份是否成功
if [ \$? -eq 0 ]; thenecho "Backup successful, preparing the backup..."# 準(zhǔn)備備份數(shù)據(jù)xtrabackup --prepare --target-dir=\$BACKUP_DIRif [ \$? -eq 0 ]; thenecho "Backup prepared successfully."elseecho "Failed to prepare backup."fi
elseecho "Backup failed."
fiecho "Backup path:\$BACKUP_DIR"
EOF
- 執(zhí)行腳本
## 檢查 MySQL 數(shù)據(jù)庫(kù) 運(yùn)行中。
[root@testdbmy01 soft]# ps -ef | grep mysql
root 17601 1 0 11:15 pts/1 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mysql/data --pid-file=/mysql/data/testdbmy01.pid
mysql 18971 17601 0 11:15 pts/1 00:02:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/mysql/logs/mysql-error.log --open-files-limit=65535 --pid-file=/mysql/data/testdbmy01.pid --socket=/mysql/tmp/mysql.sock --port=3306
root 21242 4833 0 15:11 pts/1 00:00:00 grep --color=auto mysql
[root@testdbmy01 soft]# ## 執(zhí)行導(dǎo)出
[root@testdbmy01 soft]# sh backup_export.sh
- 停止數(shù)據(jù)庫(kù),并刪除庫(kù)(模擬故障)。
## 停止數(shù)據(jù)庫(kù)
[root@testdbmy01 soft]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@testdbmy01 soft]# ## 我怕萬(wàn)一、恢復(fù)不出來(lái)。我沒(méi)敢刪除(rm -rf),我又偷偷的 mv 了...
[root@testdbmy01 soft]# mv /mysql /mysql_bak202406
[root@testdbmy01 soft]#
- 創(chuàng)建數(shù)據(jù)庫(kù)目錄&文件
恢復(fù)時(shí),只有data
、binlog
會(huì)自動(dòng)創(chuàng)建,其他還需手動(dòng)創(chuàng)建。所以這里一次性全部創(chuàng)建完成。
[root@testdbmy01 soft]# mkdir -p /mysql/{data,binlog,logs,tmp}
[root@testdbmy01 soft]# touch /mysql/logs/{mysql-error.log,mysql-slow.log}
- 使用
步驟1
中的備份,進(jìn)行恢復(fù)。
[root@testdbmy01 soft]# xtrabackup --copy-back --target-dir=/backup/2024060115
- 設(shè)置權(quán)限
[root@testdbmy01 soft]# chown -R mysql.mysql /mysql
- 啟動(dòng)數(shù)據(jù)庫(kù)
[root@testdbmy01 soft]# service mysqld start
Starting MySQL..... SUCCESS!
[root@testdbmy01 soft]#
最后,在登錄數(shù)據(jù)庫(kù)驗(yàn)證一下,就 Okk 了。
增量備份 | 恢復(fù)
~ 忒長(zhǎng)了~ 已寫(xiě) 9千多字
了,我怕~寫(xiě)完,字?jǐn)?shù)太長(zhǎng)受限制不能發(fā)布,
當(dāng)前章節(jié)、晚會(huì)我補(bǔ)鏈接~~