【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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Percona XtraBackup 2.4 xtrabackup全量、增量備份恢復流程
- Percona XtraBackup 實現全備&增量備份與恢復
- Percona XtraBackup 2.4 innobackupex全量、增量備份恢復流程
- MySQL 5.6 xtrabackup 全量和增量的備份和恢復MySql
- Xtrabackup備份恢復原理
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- xtrabackup和innobackuppex的安裝和備份(含增量備份)已經恢復
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- XtraBackup完整備份與增量備份的原理
- 【Mysql】xtrabackup 備份和恢復測試MySql
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- Xtrabackup之innobackupex備份恢復詳解薦
- mysql備份和恢復測試(一)--xtrabackupMySql
- Xtrabackup每週增量備份指令碼程式指令碼
- 使用xtrabackup對mysql進行備份和恢復MySql
- MySQL 之XtraBackup全量增量熱備實踐MySql
- mysql之 Innobackupex(全備+增量)備份恢復MySql
- MySQL:xtrabackup備份MySql
- XtraBackup備份MySQLMySql
- 基於percona xtrabackup 2.4.14的增量備份恢復還原mysql 5.6MySql
- 【Xtrabackup】Xtrabackup備份基礎知識
- xtrabackup備份mysql innodbMySql
- Xtrabackup實現資料庫備份和災難恢復資料庫
- 【Mysql】xbackup全量與增量備份恢復MySql
- XtraBackup實踐(一)備份
- 【mysqldump】mysqldump及備份恢復示例MySql
- MySQL · 物理備份 · Percona XtraBackup 備份原理MySql
- INNOBACKUPEX的全備和增量備份恢復學習筆記筆記
- Xtrabackup2.4.8備份、還原、恢復Mysql5.7.19實操MySql
- 使用innobackupex線上增量備份和再增量備份及恢復mysql資料庫MySql資料庫
- 使用Xtrabackup遠端備份MysqlMySql
- Percona Xtrabackup 快速備份 MySQLMySql
- mysql innobackupex增量備份恢復MySql
- MySQL 利用xtrabackup進行增量備份詳細過程彙總MySql
- 【備份恢復】noarchive模式下使用增量備份恢復資料庫Hive模式資料庫
- 配置xtrabackup備份mysql資料庫MySql資料庫
- 使用Xtrabackup備份mysql資料庫MySql資料庫
- innodb儲存引擎備份工具--Xtrabackup儲存引擎