【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
一、 全庫備份與恢復
備份時需要啟動MySQL ,恢復時需要關閉 MySQL ,清空 MySQL 資料目錄且不能重新初始化。
1. 執行備份
# mkdir -p /xtrabackup/full
# innobackupex --socket=/usr/local/mysql/data/mysql.sock --user=root --password='P@ssw0rd' /xtrabackup/full
2. 檢視備份資料夾內容
# pwd
/xtrabackup/full/2021-01-06_14-27-09
# ls -l
backup-my.cnf # 備份用到的配置選項檔案
ib_buffer_pool
ibdata1 # 資料檔案
mysql
performance_schema
sys
xtrabackup_binlog_info #MySQL 伺服器當前使用的 binlog
xtrabackup_checkpoints # 備份的型別、狀態
xtrabackup_info
xtrabackup_logfile # 備份的日誌檔案
3. 執行恢復
恢復可以恢復到本機或其他機器,執行步驟如下:
1) 停止資料庫
# service mysqld stop
2) 清理資料檔案
# rm -rf /usr/local/mysql/data/
3) 重演回滾(回滾日誌檔案,恢復資料檔案)
-- 回滾日誌
# innobackupex --apply-log /xtrabackup/full/2021-01-06_14-27-09/
-- 恢復資料檔案
# innobackupex --copy-back /xtrabackup/full/2021-01-06_14-27-09/
4) 修改許可權
# chown -R mysql:mysql /usr/local/mysql/data
5) 啟動資料庫
# systemctl start mysqld
二、 增量備份恢復
在進行增量備份時,首先要進行一次全量備份,第一次增量備份是基於全備的,之後的增量備份都是基於上一次的增量備份的,以此類推。
1. 資料驗證準備
mysql> create database test_db;
mysql> use test_db;
mysql> create table test_tab(id int);
-- 插入“ 1 ”
mysql> insert into test_tab values(1);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
2. 執行完全備份
# innobackupex --user=root --password='P@ssw0rd' --socket= /usr/local/mysql/data/mysql.sock /xtrabackup
3. 插入資料“ 2 ”
mysql> insert into test_tab values(2);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
4. 執行增量備份
# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup --incremental - basedir=/xtrabackup/2021-01-06_15-33-55
注:
--incremental: 增量備份存放路徑
--incremental-basedir: 基於哪個目錄增量
5. 插入資料“ 3 ”
mysql> insert into test_tab values(3);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
6. 再次執行增量備份
# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-01-06_15-41-53
注:由於這裡是第二次增量備份,那麼 --incremental-basedir 的指向應為第一次增量備份的路徑
7. 檢視增量的備份
# cd /xtrabackup/increment/
# ls -lrt
2021-01-06_15-33-55
2021-01-06_15-41-53
2021-01-06_15-49-48
其中,第一個目錄為全量備份,第二、三個目錄分別為第一次增量和第二次增量的備份。注意第二次增量備份是針對第一次增量的。
8. 增量的恢復
1) 停止資料庫
# ps -ef|grep mysql
# service mysqld stop
2) 清理資料檔案
# rm -rf /usr/local/mysql/data
3) 依次重演回滾redo log (恢復資料)
# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 /
# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 / --incremental-dir= /xtrabackup/ 2021-01-06_15-41-53 /
# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 / --incremental-dir= /xtrabackup/ 2021-01-06_15-49-48 /
注: --apply-log --redo-only 用於合併全備目錄資料,確保資料的一致性
--apply-log --redo-only --incremental-dir 用於將全備和增量備份資料目錄進行合併,合併到全備目錄中
2021-01-06_15-33-55 為全備的目錄
2021-01-06_15-41-53 為第一次增量備份的目錄
2021-01-06_15-49-48 為第二次增量備份的目錄
恢復資料檔案
# innobackupex --copy-back /xtrabackup/2021-01-06_15-33-55/
注:資料檔案的備份位於第一次全量備份的路徑下
4) 修改許可權
# chown -R mysql:mysql /usr/local/mysql/data
5) 啟動資料庫
# service mysqld start
6) 驗證資料
mysql> use test_db;
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
三、 差異增量備份
差異增量備份需要先執行一個全量備份,後面的每一個增量備份都是針對全量的,而不是針對上一次增量。所以在恢復時,只需要使用最後一次的增量就行。
1. 資料驗證準備
mysql> create database test_db;
mysql> use test_db;
mysql> create table test_tab(id int);
-- 插入“ 1 ”
mysql> insert into test_tab values(1);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
2. 執行完全備份
# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock /xtrabackup
3. 插入資料“ 2 ”
mysql> insert into test_tab values(2);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
4. 執行差異備份(基於全備)
# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup --incremental - basedir=/xtrabackup/ 2021-01-08_10-34-36
注: 2021-01-08_10-34-36 為全備目錄
5. 插入資料“ 3 ”
mysql> insert into test_tab values(3);
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
6. 再次差異增量備份(基於全備)
(命令與上一次增量備份一模一樣)
# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup --incremental - basedir=/xtrabackup/ 2021-01-08_10-34-36
注: 2021-01-08_10-34-36 為全備目錄
7. 檢視增量的備份
# cd /xtrabackup/increment/
# ls -lrt
2021-01-08_10-34-36
2021-01-08_10-39-28
2021-01-08_10-42-53
其中,第一個目錄為全量備份,第二、三個目錄分別為第一次增量和第二次增量的備份,注意兩次增量的備份都是針對全量的。
8. 增量的恢復
1) 停止資料庫
# ps -ef|grep mysql
# service mysqld stop
2) 清理資料檔案
# rm -rf /usr/local/mysql/data
3) 重演回滾redo log (恢復資料)
# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-08_10-34-36 /
# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-08_10-34-36 / --incremental-dir= /xtrabackup/ 2021-01-08_10-42-53 /
注:--apply-log --redo-only 用於合併全備目錄資料,確保資料的一致性
--apply-log --redo-only --incremental-dir 用於將全備和增量備份資料目錄進行合併,合併到全備目錄中
2021-01-08_10-34-36 為全備的目錄
2021-01-08_10-42-53 為最後一次增量備份的目錄
恢復資料檔案
# innobackupex --copy-back /xtrabackup/ 2021-01-08_10-34-36 /
注:資料檔案的備份位於第一次全量備份的路徑下
4) 修改許可權
# chown -R mysql:mysql /usr/local/mysql/data
5) 啟動資料庫
# service mysqld start
6) 驗證資料
mysql> use test_db;
mysql> select * from test_tab;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
最後需要注意一下,我們上面示例的三種備份方式,都只是恢復到了備份那個時間點,並沒有透過binlog 恢復到最近的位置。比如我們在昨晚 11 點做了全備或增量備份,早上 9 點時出了故障,我們透過以上方式也只能恢復到昨晚 11 點的備份時間。 11 點 -9 點這段時間的資料並不會得到恢復。
---- end ----
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31529886/viewspace-2748606/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Xtrabackup增量備份
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- Xtrabackup全量備份
- 基於percona xtrabackup 2.4.14的增量備份恢復還原mysql 5.6MySql
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- 使用Xtrabackup完整備份中恢復單表
- MySQL:xtrabackup備份MySql
- 【Xtrabackup】Xtrabackup備份基礎知識
- rman 增量備份恢復
- 【mysqldump】mysqldump及備份恢復示例MySql
- 使用Xtrabackup遠端備份MysqlMySql
- xtrabackup備份mysql“ib_logfile0 is ofMySql
- oracle 增量備份恢復驗證Oracle
- xtrabackup 8 備份 Mysql 8.0.18 (全備全過程)身臨其境無腦版MySql
- 如何對xtrabackup 備份限制使用IO大小
- 【MySQL】xtrabackup 2.4.12備份觸發的bugMySql
- MySQL Backup--Xtrabackup備份限速問題MySql
- 從原始碼分析 XtraBackup 的備份原理原始碼
- 用增量備份來快速恢復dg
- 故障分析 | DDL 導致的 Xtrabackup 備份失敗
- RAC備份恢復之Voting備份與恢復
- xtrabackup備份mysql以及建立自動定時任務MySql
- dg丟失歸檔,使用rman增量備份恢復
- docker 中 MySQL 備份及恢復DockerMySql
- 備份與恢復:polardb資料庫備份與恢復資料庫
- mydumper備份恢復
- Mysql備份恢復MySql
- 備份和恢復
- Mysql資料庫備份及恢復MySql資料庫
- 磁碟資料恢復及備份工具資料恢復
- Mysql備份與恢復(1)---物理備份MySql
- 記一次mysql熱備份xtrabackup(沒有解決問題)MySql
- 詳解叢集級備份恢復:物理細粒度備份恢復
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- Mysql備份與恢復(2)---邏輯備份MySql
- SYSTEM 表空間管理及備份恢復
- Jenkins備份與恢復Jenkins