《5分鐘搞懂Percona Xtrabackup MySQL & MariaDB 資料庫熱備份工具 – 學習筆記》

Telegram share !

Xtrabackup 是一款由 Percona 公司開發的開源、免費的 MySQL & MariaDB熱備份工具。它可以讓使用者在資料庫伺服器正常運作的情況下進行備份,不會造成資料庫鎖表或效能下降,本筆記我會將我所知道的知識分享給大家參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。

測試資料建立與工具安裝

1.可以先按此下載範例資料庫

2.匯入測試用的範例資料庫.sql

root@ip-192-168-0-99:/# sudo mysql
mysql# CREATE DATABASE Northwind;
mysql# exit;
root@ip-192-168-0-99:/# mysql -u rdpapa -p Northwind < /home/rdpapa/northwind.sql

3.安裝 Xtrabackup

3.1 deb套件下載安裝

root@ip-192-168-0-99:/# wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
root@ip-192-168-0-99:/# sudo dpkg -i percona-release_latest.generic_all.deb
root@ip-192-168-0-99:/# apt-get update

3.2 使用APT安裝

root@ip-192-168-0-99:/# apt-cache search xtrabackup 
root@ip-192-168-0-99:/# apt-get install -y percona-xtrabackup-80

※注意事項:xtrabackup 8.0 移除了 innobackupex 命令,同時只能支援 mysql 8.0

完整備份與還原

1.完整備份到 /mnt/xtrabackup

root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --password="12345678" --target-dir= /mnt/xtrabackup/base

2.進行還原前置作業,準備階段點

root@ip-192-168-0-99:/# sudo xtrabackup --prepare --target-dir=/mnt/xtrabackup/base

3.開始還原操作

#關閉 mysql服務,並把欲還原目錄先清空
root@ip-192-168-0-99:/# sudo systemctl stop mysql
root@ip-192-168-0-99:/# rm -rf /var/lib/mysql/*

#開始還原
root@ip-192-168-0-99:/# xtrabackup --copy-back --target-dir=/mnt/xtrabackup/base --datadir=/var/lib/mysql
root@ip-192-168-0-99:/# chown -R mysql:mysql /var/lib/mysql

#啟動mysql服務
root@ip-192-168-0-99:/# sudo systemctl start mysql

完整增量備份與還原

1. 進行完整和增量備份

#事先進行一次完整備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --password="12345678" --target-dir=/mnt/xtrabackup/full
 
#進行第一次增量備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --password="12345678" --target-dir=/mnt/xtrabackup/incremental1 --incremental-basedir=/mnt/xtrabackup/full

#進行第二次增量備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --password="12345678" --target-dir=/mnt/xtrabackup/incremental2 --incremental-basedir=/mnt/xtrabackup/incremental1

2. 進行還原前置作業,準備階段點

#準備第一次完整備份
root@ip-192-168-0-99:/# xtrabackup --prepare --apply-log-only --target-dir=/mnt/xtrabackup/full
 
#進行第一次增量備份
root@ip-192-168-0-99:/# xtrabackup --prepare --apply-log-only --target-dir=/mnt/xtrabackup/full --incremental-dir=/mnt/xtrabackup/incremental1

#進行第二次增量備份
root@ip-192-168-0-99:/# xtrabackup --prepare --target-dir=/mnt/xtrabackup/full --incremental-dir=/mnt/xtrabackup/incremental2

3.開始還原操作

#關閉 mysql服務
root@ip-192-168-0-99:/# sudo systemctl stop mysql

#把還原目錄先清空
root@ip-192-168-0-99:/# rm -rf /var/lib/mysql/*
 
#進行還原
root@ip-192-168-0-99:/# xtrabackup --copy-back --target-dir=/mnt/xtrabackup/base --datadir=/var/lib/mysql

#重新套用資料庫目錄權限
root@ip-192-168-0-99:/# chown -R mysql:mysql /var/lib/mysql

#重新啟動 mysql
root@ip-192-168-0-99:/# sudo systemctl start mysql

單一資料庫備份與還原

#指定單一次資料庫備份
root@ip-192-168-0-99:/# xtrabackup --backup --user=rdpapa --databases="Northwind" --password="12345678" --target-dir=/mnt/xtrabackup/base
 
#進行還原前置作業,準備階段點
root@ip-192-168-0-99:/# xtrabackup --prepare --target-dir=/mnt/xtrabackup/base

#停止MySQL服務
root@ip-192-168-0-99:/# systemctl stop mysql

#刪除Northwind單一資料庫
root@ip-192-168-0-99:/# rm -rf /var/lib/mysql/Northwind/*

#刪除Northwind單一資料庫
root@ip-192-168-0-99:/# xtrabackup --copy-back --target-dir=/mnt/xtrabackup/base --datadir=/mnt/xtrabackup/cp_base

#刪除Northwind單一資料庫
root@ip-192-168-0-99:/# cp -r /mnt/xtrabackup/cp_base/Northwind/* /var/lib/mysql/Northwind/

#重新套用資料庫目錄權限
root@ip-192-168-0-99:/# chown -R mysql:mysql /var/lib/mysql

#啟動MySQL服務
root@ip-192-168-0-99:/# systemctl start mysql

單一資料庫增量備份與還原

1. 進行完整和增量備份

#指定單一次資料庫完整備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --databases="Northwind" --password="12345678" --target-dir=/mnt/xtrabackup/full
 
#進行第一次增量備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --databases="Northwind" --password="12345678" --target-dir=/mnt/xtrabackup/incremental1 --incremental-basedir=/mnt/xtrabackup/full

#進行第二次增量備份
root@ip-192-168-0-99:/# sudo xtrabackup --backup --user=rdpapa --databases="Northwind" --password="12345678" --target-dir=/mnt/xtrabackup/incremental2 --incremental-basedir=/mnt/xtrabackup/incremental1

2. 進行還原前置作業,準備階段點

#準備單一資料庫第一次完整備份
root@ip-192-168-0-99:/# xtrabackup --prepare --apply-log-only --target-dir=/mnt/xtrabackup/full
 
#準備第一次增量備份
root@ip-192-168-0-99:/# xtrabackup --prepare --apply-log-only --target-dir=/mnt/xtrabackup/full --incremental-dir=/mnt/xtrabackup/incremental1

#準備第二次增量備份
root@ip-192-168-0-99:/# xtrabackup --prepare --target-dir=/mnt/xtrabackup/full --incremental-dir=/mnt/xtrabackup/incremental2

3.開始還原操作

#關閉 mysql服務
root@ip-192-168-0-99:/# sudo systemctl stop mysql

#把還原目錄先清空
root@ip-192-168-0-99:/# rm -rf /var/lib/mysql/Northwind/*
 
#將備份檔案轉到full_Northwind暫存區
root@ip-192-168-0-99:/# xtrabackup --copy-back --target-dir=/mnt/xtrabackup/full --datadir=/mnt/xtrabackup/full_Northwind

#將資料庫備份檔案同步到線上的資料庫資料夾
root@ip-192-168-0-99:/# cp -r /lab/xtrabackup/full_Northwind/Northwind/* /var/lib/mysql/Northwind/

#重新套用資料庫目錄權限
root@ip-192-168-0-99:/# chown -R mysql:mysql /var/lib/mysql

#重新啟動 mysql
root@ip-192-168-0-99:/# sudo systemctl start mysql

Xtrabackup 應用場景

  • 完整備份:備份 MySQL 資料庫的所有資料和索引。
  • 增量備份:僅備份自上次完整備份以來變更的資料。
  • 單一資料庫備份:僅備份指定的資料庫。
  • 在線還原:將備份資料還原到現有的 MySQL 資料庫伺服器。
  • 離線還原:將備份資料還原到新的 MySQL 資料庫伺服器。

Reference

  • Percona XtraBackup官方文件:
  • MySQL Xtrabackup 工具詳解和使用說明:
  • Percona XtraBackup – AWS 規定指引:連結
  • MySQL运维之–xtrabackup工具的原理和使用方法:連結