Xtrabackup 是一款由 Percona 公司開發的開源、免費的 MySQL & MariaDB熱備份工具。它可以讓使用者在資料庫伺服器正常運作的情況下進行備份,不會造成資料庫鎖表或效能下降,本筆記我會將我所知道的知識分享給大家參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。
Table of Contents
測試資料建立與工具安裝
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工具的原理和使用方法:連結
你好,我是RD爸,希望透過我的紀錄,可以帶給你一些新的想法~ 專注於各式3C產品的開箱評測、程式相關技術及理財筆記。
email ►[email protected]