共計 8608 個字符,預計需要花費 22 分鐘才能閱讀完成。
今天就跟大家聊聊有關 mysql 物理備份利器 xtrabackup 怎么用,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
安裝
cd /opt/
tar -zxvf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
ln -s /opt/percona-xtrabackup-2.4.7-Linux-x86_64 /usr/local/xtrabackup
Xtrabackup 工具介紹
安裝 XtraBackup 后,其實會有幾個工具:
innobackupex:這個是其實是下面三個工具的一個 perl 腳本封裝,可以備份 MyISAM, InnoDB, XtraDB 表。但在處理 Myisam 時需要加一個讀鎖。
xtrabackup:一個由 C 編譯而來的二進制文件,只能備份 InnoDB 和 XtraDB 數據。
xbcrypt:用來加密或解密備份的數據。
xbstream:用來解壓或壓縮 xbstream 格式的壓縮文件。
innobackupex 使用方法
完整的選項使用請執行 innobackupex –help,這里只介紹使用常用的選項進行完整備份及增量備份和還原。
–defaults-file 數據庫的配置文件路徑
–apply-log 在備份的基礎上應用日志,把數據處理 crash 狀態的不一致通過 apply-log 修復成一致的狀態。
–copy-back 從備份目錄拷貝數據,索引,日志到 my.cnf 文件里規定的初始位置。
–no-timestamp 創建備份時不自動生成時間目錄,可以自定義備份目錄名
–databases 用于指定要備份的數據庫, 多個庫文件使用方法:“database1 database2″
–incremental 在全備份的基礎上進行增量備份,后跟增量備份存貯目錄路徑
–incremental-basedir=DIRECTORY 增量備份所需要的全備份路徑目錄或上次做增量備份的目錄路徑
–incremental-dir=DIRECTORY 增量備份存貯的目錄路徑
–redo-only 用于準備增量備份內容把數據合并到全備份目錄,配合–incremental-dir 增量備份目錄使用。
–force-non-empty-directories 如果是特定庫備份還原,不需要刪掉整個 mysql 目錄,只是特定庫的及相關文件就可以,還原時加上此參數就不會報錯。
全量備份與恢復
全量備份
#mkdir -p /data/mysql_backup/full_backup/
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –user=root –password=root /data/mysql_backup/full_backup/
#[root@mytest7 2017-06-19_17-15-48]# pwd
/data/mysql_backup/full_backup/2017-06-19_17-15-48
[root@mytest7 2017-06-19_17-15-48]# ll
total 1048628
-rw-r—– 1 root root 433 Jun 19 17:16 backup-my.cnf
-rw-r—– 1 root root 584 Jun 19 17:16 ib_buffer_pool
-rw-r—– 1 root root 1073741824 Jun 19 17:16 ibdata1
drwxr-x— 2 root root 4096 Jun 19 17:16 mysql
drwxr-x— 2 root root 89 Jun 19 17:16 percona
drwxr-x— 2 root root 8192 Jun 19 17:16 performance_schema
drwxr-x— 2 root root 129 Jun 19 17:16 reptest
drwxr-x— 2 root root 8192 Jun 19 17:16 sys
-rw-r—– 1 root root 66 Jun 19 17:16 xtrabackup_binlog_info
-rw-r—– 1 root root 113 Jun 19 17:16 xtrabackup_checkpoints
-rw-r—– 1 root root 611 Jun 19 17:16 xtrabackup_info
-rw-r—– 1 root root 2560 Jun 19 17:16 xtrabackup_logfile
全量恢復
#kill -9 `pidof mysqld`
#mv /data/mysql/mysql3306/data /data/mysql/mysql3306/data_bak
#mkdir -p /data/mysql/mysql3306/data
#/usr/local/xtrabackup/bin/innobackupex –apply-log /data/mysql_backup/full_backup/2017-06-19_17-15-48 –user=root –password=root
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –copy-back /data/mysql_backup/full_backup/2017-06-19_17-15-48/
#chown -R mysql.mysql /data/mysql/mysql3306/data/
#/usr/local/mysql/bin/mysqld –defaults-file=/data/mysql/mysql3306/my3306.cnf
壓縮備份
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –user=root –password=root –no-timestamp –stream=tar ./ | gzip /data/mysql_backup/full_backup/db_$(date +%F).tar.gz
– 壓縮備份應用時需先解壓,才能應用,使用方法和一般備份同樣使用
#mkdir -p /data/mysql_backup/full_backup/db_$(date +%F)
#tar -zxf /data/mysql_backup/full_backup/db_$(date +%F).tar.gz -C /data/mysql_backup/full_backup/db_$(date +%F)
單庫備份沒有太大意義,xtrabackup 恢復需要保證 datadir 為空,可以備份單表或者多表,恢復的原理和 innodb 表空間傳輸很像
增量備份與恢復
– 先進行全備
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –user=root –password=root /data/mysql_backup/full_backup/
# ll /data/mysql_backup/full_backup/2017-06-20_15-21-57
total 1048628
-rw-r—– 1 root root 433 Jun 20 15:22 backup-my.cnf
-rw-r—– 1 root root 584 Jun 20 15:22 ib_buffer_pool
-rw-r—– 1 root root 1073741824 Jun 20 15:22 ibdata1
drwxr-x— 2 root root 4096 Jun 20 15:22 mysql
drwxr-x— 2 root root 89 Jun 20 15:22 percona
drwxr-x— 2 root root 8192 Jun 20 15:22 performance_schema
drwxr-x— 2 root root 129 Jun 20 15:22 reptest
drwxr-x— 2 root root 8192 Jun 20 15:22 sys
-rw-r—– 1 root root 64 Jun 20 15:22 xtrabackup_binlog_info
-rw-r—– 1 root root 113 Jun 20 15:22 xtrabackup_checkpoints
-rw-r—– 1 root root 609 Jun 20 15:22 xtrabackup_info
-rw-r—– 1 root root 2560 Jun 20 15:22 xtrabackup_logfile
# mysql -uroot -proot -S /data/mysql/mysql3306/tmp/mysql3306.sock
mysql select * from reptest.t1;
+—-+——+
| id | name |
+—-+——+
| 1 | yyyy |
| 2 | yyyy |
| 3 | cc |
| 4 | yyyy |
| 5 | yyyy |
+—-+——+
5 rows in set (0.05 sec)
mysql insert into reptest.t1 values (11, zz
Query OK, 1 row affected (0.12 sec)
– 第一次增量備份
# mkdir /data/mysql_backup/incre_backup
#/usr/local/xtrabackup/bin/innobackupex –incremental /data/mysql_backup/incre_backup –incremental-basedir=/data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root –socket=/data/mysql/mysql3306/tmp/mysql3306.sock
#ll /data/mysql_backup/incre_backup/2017-06-20_15-46-16
total 108
-rw-r—– 1 root root 427 Jun 20 15:46 backup-my.cnf
-rw-r—– 1 root root 584 Jun 20 15:46 ib_buffer_pool
-rw-r—– 1 root root 49152 Jun 20 15:46 ibdata1.delta
-rw-r—– 1 root root 44 Jun 20 15:46 ibdata1.meta
drwxr-x— 2 root root 4096 Jun 20 15:46 mysql
drwxr-x— 2 root root 146 Jun 20 15:46 percona
drwxr-x— 2 root root 8192 Jun 20 15:46 performance_schema
drwxr-x— 2 root root 4096 Jun 20 15:46 reptest
drwxr-x— 2 root root 8192 Jun 20 15:46 sys
-rw-r—– 1 root root 104 Jun 20 15:46 xtrabackup_binlog_info
-rw-r—– 1 root root 117 Jun 20 15:46 xtrabackup_checkpoints
-rw-r—– 1 root root 743 Jun 20 15:46 xtrabackup_info
-rw-r—– 1 root root 2560 Jun 20 15:46 xtrabackup_logfile
mysql insert into reptest.t1 values (12, ww
Query OK, 1 row affected (0.00 sec)
mysql select * from reptest.t1;
+—-+——+
| id | name |
+—-+——+
| 1 | yyyy |
| 2 | yyyy |
| 3 | cc |
| 4 | yyyy |
| 5 | yyyy |
| 11 | zz |
| 12 | ww |
+—-+——+
7 rows in set (0.00 sec)
– 第二次增量備份(–incremental-basedir 可以是上次全量備份文件,也可以是第一次增量備份文件)
#/usr/local/xtrabackup/bin/innobackupex –incremental /data/mysql_backup/incre_backup –incremental-basedir=/data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root –socket=/data/mysql/mysql3306/tmp/mysql3306.sock
#ll /data/mysql_backup/incre_backup/2017-06-20_15-51-49
total 188
-rw-r—– 1 root root 427 Jun 20 15:52 backup-my.cnf
-rw-r—– 1 root root 584 Jun 20 15:52 ib_buffer_pool
-rw-r—– 1 root root 131072 Jun 20 15:51 ibdata1.delta
-rw-r—– 1 root root 44 Jun 20 15:51 ibdata1.meta
drwxr-x— 2 root root 4096 Jun 20 15:51 mysql
drwxr-x— 2 root root 146 Jun 20 15:52 percona
drwxr-x— 2 root root 8192 Jun 20 15:52 performance_schema
drwxr-x— 2 root root 4096 Jun 20 15:52 reptest
drwxr-x— 2 root root 8192 Jun 20 15:52 sys
-rw-r—– 1 root root 106 Jun 20 15:52 xtrabackup_binlog_info
-rw-r—– 1 root root 117 Jun 20 15:52 xtrabackup_checkpoints
-rw-r—– 1 root root 745 Jun 20 15:52 xtrabackup_info
-rw-r—– 1 root root 2560 Jun 20 15:52 xtrabackup_logfile
– 恢復到第一次增量備份
#kill -9 `pidof mysqld`
#mv /data/mysql/mysql3306/data /data/mysql/mysql3306/data_bak
#mkdir -p /data/mysql/mysql3306/data
– 應用全備
#/usr/local/xtrabackup/bin/innobackupex –apply-log –redo-only /data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root
– 合并第一次增量備份
#/usr/local/xtrabackup/bin/innobackupex –apply-log –redo-only /data/mysql_backup/full_backup/2017-06-20_15-21-57 –incremental-dir=/data/mysql_backup/incre_backup/2017-06-20_15-46-16 –user=root –password=root
– 應用日志(與全量恢復一樣)
#/usr/local/xtrabackup/bin/innobackupex –apply-log /data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root
– 恢復數據(與全量恢復一樣)
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –copy-back /data/mysql_backup/full_backup/2017-06-20_15-21-57
#chown -R mysql.mysql /data/mysql/mysql3306/data/
#/usr/local/mysql/bin/mysqld –defaults-file=/data/mysql/mysql3306/my3306.cnf
# mysql -uroot -proot -S /data/mysql/mysql3306/tmp/mysql3306.sock
mysql select * from reptest.t1;
+—-+——+
| id | name |
+—-+——+
| 1 | yyyy |
| 2 | yyyy |
| 3 | cc |
| 4 | yyyy |
| 5 | yyyy |
| 11 | zz |
+—-+——+
6 rows in set (0.00 sec)
此時的數據恢復到了第一次備份的時候
– 恢復到第二次增量備份
#kill -9 `pidof mysqld`
#mv /data/mysql/mysql3306/data /data/mysql/mysql3306/data_bak2
#mkdir -p /data/mysql/mysql3306/data
– 應用全備
#/usr/local/xtrabackup/bin/innobackupex –apply-log –redo-only /data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root
– 合并第一次增量備份
#/usr/local/xtrabackup/bin/innobackupex –apply-log –redo-only /data/mysql_backup/full_backup/2017-06-20_15-21-57 –incremental-dir=/data/mysql_backup/incre_backup/2017-06-20_15-46-16 –user=root –password=root
– 合并第二次增量備份
#/usr/local/xtrabackup/bin/innobackupex –apply-log –redo-only /data/mysql_backup/full_backup/2017-06-20_15-21-57 –incremental-dir=/data/mysql_backup/incre_backup/2017-06-20_15-51-49 –user=root –password=root
– 應用日志(與全量恢復一樣)
#/usr/local/xtrabackup/bin/innobackupex –apply-log /data/mysql_backup/full_backup/2017-06-20_15-21-57 –user=root –password=root
– 恢復數據(與全量恢復一樣)
#/usr/local/xtrabackup/bin/innobackupex –defaults-file=/data/mysql/mysql3306/my3306.cnf –copy-back /data/mysql_backup/full_backup/2017-06-20_15-21-57
#chown -R mysql.mysql /data/mysql/mysql3306/data/
#/usr/local/mysql/bin/mysqld –defaults-file=/data/mysql/mysql3306/my3306.cnf
多合并一次增量備份即可
建議使用 xtrabackup 全量備份 +binlog 日志備份指定備份方案,增量備份可能需要應用多個文件,容易出錯,
并且只能恢復到全量備份點和增量備份點,無法恢復到中間點,而現實生產中,多數在中間點。
看完上述內容,你們對 mysql 物理備份利器 xtrabackup 怎么用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。