xtrabackup詳細用法


安裝

[root@node01 yum.repos.d]# cat percona.repo 
[percona]
name = Percona
baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0

[epel]
name=epelrepo
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch
gpgcheck=0
enable=1

[root@node01 yum.repos.d]# yum list all| grep xtraback -i
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
holland-xtrabackup.noarch 1.1.21-1.el7 epel 
percona-xtrabackup.x86_64 2.3.10-1.el7 percona 
percona-xtrabackup-22.x86_64 2.2.13-1.el7 percona 
percona-xtrabackup-22-debuginfo.x86_64 2.2.13-1.el7 percona 
percona-xtrabackup-24.x86_64 2.4.18-1.el7 percona 
percona-xtrabackup-24-debuginfo.x86_64 2.4.18-1.el7 percona 
percona-xtrabackup-80.x86_64 8.0.9-1.el7 percona 
percona-xtrabackup-80-debuginfo.x86_64 8.0.9-1.el7 percona 
percona-xtrabackup-debuginfo.x86_64 2.3.10-1.el7 percona 
percona-xtrabackup-test.x86_64 2.3.10-1.el7 percona 
percona-xtrabackup-test-22.x86_64 2.2.13-1.el7 percona 
percona-xtrabackup-test-24.x86_64 2.4.18-1.el7 percona 
percona-xtrabackup-test-80.x86_64 8.0.9-1.el7 percona

[root@node01 yum.repos.d]# yum -y install percona-xtrabackup-24

裝完xtrabackup后,生成以下幾個工具。

[root@node01 yum.repos.d]# rpm -ql percona-xtrabackup-24 | grep bin | xargs ls -hl
lrwxrwxrwx 1 root root   10 2月   4 18:05 /usr/bin/innobackupex -> xtrabackup -rwxr-xr-x 1 root root 3.7M 12月 15 00:23 /usr/bin/xbcloud -rwxr-xr-x 1 root root 3.0K 12月 15 00:16 /usr/bin/xbcloud_osenv -rwxr-xr-x 1 root root 3.5M 12月 15 00:23 /usr/bin/xbcrypt -rwxr-xr-x 1 root root 3.5M 12月 15 00:23 /usr/bin/xbstream -rwxr-xr-x 1 root root 21M 12月 15 00:23 /usr/bin/xtrabackup
  • xbcloud和xbcloud_osenv是xtrabackup新的高級特性:雲備份;
  • xbcrypt也是新的特性,加密備份集;
  • xbstream是xtrabackup的流數據功能,通過流數據功能,可將備份內容打包並傳給管道后的壓縮工具進行壓縮;
  • xtrabackup是主程序;
  • innobackupex在以前是一個perl腳本,會調用xtrabackup這個二進制工具,從xtrabackup 2.3開始,該工具使用C語言進行了重寫,當前它是xtabackup二進制工具的一個軟連接,但是實際的使用方法卻不同,並且在以后的版本中會刪除該工具。
mysql>  show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> CREATE DATABASE friends;
Query OK, 1 row affected (0.00 sec)
mysql> create table test (
    -> d int(4),
    ->  name varchar(16)
    -> )ENGINE=innodb DEFAULT CHARSET=gbk;
Query OK, 0 rows affected (0.29 sec)

進行全量備份

[root@node01 yum.repos.d]# mkdir -p /opt/backup/
[root@node01 yum.repos.d]# cd /opt/backup/
[root@node01 backup]# mkdir full
[root@node01 backup]# mkdir incr
[root@node01 backup]# ls
full  incr
[root@node01 backup]# 
[root@node01 backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --port=3306 /opt/backup/full/
[root@node01 backup]# ls -l full/2020-02-04_18-37-08/
總用量 12336
-rw-r----- 1 root root      487 2月   4 18:37 backup-my.cnf
drwxr-x--- 2 root root       52 2月   4 18:37 friends
-rw-r----- 1 root root      425 2月   4 18:37 ib_buffer_pool
-rw-r----- 1 root root 12582912 2月   4 18:37 ibdata1
drwxr-x--- 2 root root     4096 2月   4 18:37 mysql
drwxr-x--- 2 root root     8192 2月   4 18:37 performance_schema
drwxr-x--- 2 root root     8192 2月   4 18:37 sys
-rw-r----- 1 root root      135 2月   4 18:37 xtrabackup_checkpoints
-rw-r----- 1 root root      468 2月   4 18:37 xtrabackup_info
-rw-r----- 1 root root     2560 2月   4 18:37 xtrabackup_logfile

第一次增量插入一條數據

mysql> INSERT INTO test(d, name) VALUES (2, 'winstom' );
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+------+---------+
| d    | name    |
+------+---------+
|    2 | winstom |
+------+---------+
1 row in set (0.00 sec)

進行第一次增量備份

注意

第一次增量備份,要以全量備份為節點,進行備份

增量備份使用--incremental參數加 增量備份的目錄。

所以 --incremental-basedir 跟的參數是全量備份的目錄

[root@node01 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --incremental /opt/backup/incr/ --incremental-basedir=/opt/backup/full/2020-02-04_18-37-08/

第一次增量備份完成,下面進行查看

[root@node01 ~]# cd /opt/backup
[root@node01 backup]# ll incr/2020-02-04_18-46-03/
總用量 148
-rw-r----- 1 root root   487 2月   4 18:46 backup-my.cnf
drwxr-x--- 2 root root    79 2月   4 18:46 friends
-rw-r----- 1 root root   425 2月   4 18:46 ib_buffer_pool
-rw-r----- 1 root root 98304 2月   4 18:46 ibdata1.delta
-rw-r----- 1 root root    60 2月   4 18:46 ibdata1.meta
drwxr-x--- 2 root root  4096 2月   4 18:46 mysql
drwxr-x--- 2 root root  8192 2月   4 18:46 performance_schema
drwxr-x--- 2 root root  8192 2月   4 18:46 sys
-rw-r----- 1 root root   139 2月   4 18:46 xtrabackup_checkpoints
-rw-r----- 1 root root   536 2月   4 18:46 xtrabackup_info
-rw-r----- 1 root root  2560 2月   4 18:46 xtrabackup_logfile

第二次增量插入一條數據

mysql> INSERT INTO test(d, name) VALUES (3, 'liujunjun' );
Query OK, 1 row affected (0.05 sec)

mysql> select * from test;
+------+-----------+
| d    | name      |
+------+-----------+
|    2 | winstom   |
|    3 | liujunjun |
+------+-----------+
2 rows in set (0.00 sec)

進行第二次增量備份

注意

在第二次增量備份的時候,不再是以全量為節點,要以上一次增量備份為節點來進行第二次的增量備份

所以--incremental-basedir參數后面跟的是上一次增量備份的目錄;

[root@node01 backup]# cd /opt/backup/
[root@node01 backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --incremental /opt/backup/incr/ --incremental-basedir=/opt/backup/incr/2020-02-04_18-46-03
[root@node01 backup]# ls incr/2020-02-04_18-51-53/ -l
總用量 116
-rw-r----- 1 root root   487 2月   4 18:51 backup-my.cnf
drwxr-x--- 2 root root    79 2月   4 18:51 friends
-rw-r----- 1 root root   425 2月   4 18:51 ib_buffer_pool
-rw-r----- 1 root root 65536 2月   4 18:51 ibdata1.delta
-rw-r----- 1 root root    60 2月   4 18:51 ibdata1.meta
drwxr-x--- 2 root root  4096 2月   4 18:51 mysql
drwxr-x--- 2 root root  8192 2月   4 18:51 performance_schema
drwxr-x--- 2 root root  8192 2月   4 18:51 sys
-rw-r----- 1 root root   139 2月   4 18:51 xtrabackup_checkpoints
-rw-r----- 1 root root   535 2月   4 18:51 xtrabackup_info
-rw-r----- 1 root root  2560 2月   4 18:51 xtrabackup_logfile

查看xtrabackup_binlog_info中的binlog位置

查看xtrabackup_checkpoints中lsn

 

[root@node01 2020-02-04_18-37-08]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 2634553
last_lsn = 2634562
compact = 0
recover_binlog_info = 0
flushed_lsn = 2634562
[root@node01 incr]# cat 2020-02-04_18-46-03/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2634553
to_lsn = 2634772
last_lsn = 2634781
compact = 0
recover_binlog_info = 0
flushed_lsn = 2634781
[root@node01 incr]# cat 2020-02-04_18-51-53/xtrabackup_checkpoints 
backup_type = incremental
from_lsn = 2634772
to_lsn = 2634958
last_lsn = 2634967
compact = 0
recover_binlog_info = 0
flushed_lsn = 2634967

這里可以看到,全備的lsn是從0開始的,第一次增量備份的lsn是從全量備份的lsn結束的位置開始的,第二次增量備份同理,從第一次增量備份的lsn結束的位置開始的。

模擬數據刪除

 

mysql> drop database friends;
Query OK, 1 row affected (0.49 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

數據恢復操作

恢復具體步驟

  1. 先把xtrabackup備份下來的目錄進行再次備份,防止在還原的時候誤操作,導致備份不可用;
  2. 關閉要回復的數據庫實例;
  3. 移除需要恢復數據的MySQL實例下的data目錄,建議mv移動到別的目錄下;
  4. 操作全量備份使用--apply-log 和 --redo-only參數對全量備份進行恢復前准備操作,如事物回滾等操作;
  5. 操作第一次增量備份將第一次增量備份應用到完全備份,同用使用--apply-log 和 --redo-only參數
  6. 操作第二次增量備份將第二次增量備份應用到完全備份,使用--apply-log參數,不要加--redo-only參數。
  7. 把所有合在一起的完全備份整體進行一次apply操作,回滾未提交的數據
  8. 使用--copy-back 和 --rsync 參數直接對全量備份操作后的目錄進行恢復;
  9. 授權MySQL實例下的data目錄后,啟動數據庫
  10. 驗證恢復數據

第一步 備份

[root@node01 incr]# cd /opt/backup/full/
[root@node01 full]# cp -a 2020-02-04_18-37-08/ 2020-02-04_18-37-08.bak
[root@node01 full]# cd ..
[root@node01 backup]# cd incr/
[root@node01 incr]# ls -l
總用量 0
drwxr-x--- 6 root root 234 2月   4 18:46 2020-02-04_18-46-03
drwxr-x--- 6 root root 234 2月   4 18:51 2020-02-04_18-51-53
[root@node01 incr]# cp -a 2020-02-04_18-46-03/ 2020-02-04_18-46-03.bak
[root@node01 incr]# cp -a 2020-02-04_18-51-53/ 2020-02-04_18-51-53.bak

第二步 關閉MySQL實例

[root@node01 incr]# systemctl stop mysqld
[root@node01 incr]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 ::1:323                 :::*                  
[root@node01 mysql]# ls -l
總用量 110672
-rw-r----- 1 mysql mysql       56 2月   4 18:17 auto.cnf
-rw------- 1 mysql mysql     1680 2月   4 18:17 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 ca.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 client-cert.pem
-rw------- 1 mysql mysql     1680 2月   4 18:17 client-key.pem
-rw-r----- 1 mysql mysql    14266 2月   4 19:08 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 2月   4 19:08 ibdata1
-rw-r----- 1 mysql mysql 50331648 2月   4 19:08 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 2月   4 18:17 ib_logfile1
drwxr-x--- 2 mysql mysql     4096 2月   4 18:17 mysql
drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 performance_schema
-rw------- 1 mysql mysql     1680 2月   4 18:17 private_key.pem
-rw-r--r-- 1 mysql mysql      452 2月   4 18:17 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 server-cert.pem
-rw------- 1 mysql mysql     1680 2月   4 18:17 server-key.pem
drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 sys
[root@node01 mysql]# mv /var/lib/mysql /tmp/

第四步 准備全量備份

[root@node01 mysql]# innobackupex --apply-log --redo-only /opt/backup/full/2020-02-04_18-37-08/

第五步 應用第一次增量備份到全量備份

[root@node01 mysql]# innobackupex --apply-log --redo-only /opt/backup/full/2020-02-04_18-37-08 --incremental-dir=/opt/backup/incr/2020-02-04_18-46-03/

查看全量備份的xtrabackup_checkpoints

[root@node01 mysql]# cat /opt/backup/full/2020-02-04_18-37-08/xtrabackup_checkpoints 
backup_type = log-applied
from_lsn = 0
to_lsn = 2634772
last_lsn = 2634781
compact = 0
recover_binlog_info = 0
flushed_lsn = 2634781

對比之前查看的第一次增量備份的last_lsn位置,在應用第一次增量備份到全量后,可以看到last_lsn已經被應用和第一次全量備份的位置相同了

第六步 應用第二次增量備份到全量備份

注意 在引用最后一次增量備份到全量時,不需要增加--redo-only參數。

[root@node01 mysql]# innobackupex --apply-log /opt/backup/full/2020-02-04_18-37-08 --incremental-dir=/opt/backup/incr/2020-02-04_18-51-53/

查看全量備份的xtrabackup_checkpoints

[root@node01 mysql]# cat /opt/backup/full/2020-02-04_18-37-08/xtrabackup_checkpoints 
backup_type = full-prepared
from_lsn = 0
to_lsn = 2634958
last_lsn = 2634967
compact = 0
recover_binlog_info = 0
flushed_lsn = 2634967

對比之前查看的第二次增量備份的last_lsn位置,在應用第二次增量備份到全量后,可以看到last_lsn已經被應用和第二次全量備份的位置相同了

第七步 把備份整體進行一次apply操作

[root@node01 mysql]# innobackupex --apply-log /opt/backup/full/2020-02-04_18-37-08/

第八步 使用--copy-back 參數恢復拷貝到data目錄

[root@node01 mysql]# innobackupex --defaults-file=/etc/my.cnf --copy-back /opt/backup/full/2020-02-04_18-37-08/

驗證操作

[root@node01 mysql]# ls /var/lib/mysql -l
總用量 122920
drwxr-x--- 2 root root       52 2月   4 19:23 friends
-rw-r----- 1 root root      425 2月   4 19:23 ib_buffer_pool
-rw-r----- 1 root root 12582912 2月   4 19:23 ibdata1
-rw-r----- 1 root root 50331648 2月   4 19:23 ib_logfile0
-rw-r----- 1 root root 50331648 2月   4 19:23 ib_logfile1
-rw-r----- 1 root root 12582912 2月   4 19:23 ibtmp1
drwxr-x--- 2 root root     4096 2月   4 19:23 mysql
drwxr-x--- 2 root root     8192 2月   4 19:23 performance_schema
drwxr-x--- 2 root root     8192 2月   4 19:23 sys
-rw-r----- 1 root root      535 2月   4 19:23 xtrabackup_info
-rw-r----- 1 root root        1 2月   4 19:23 xtrabackup_master_key_id

第九步 授權並啟動MySQL

[root@node01 mysql]# chown -R mysql.mysql /var/lib/mysql
[root@node01 mysql]# ls -l
總用量 110672
-rw-r----- 1 mysql mysql       56 2月   4 18:17 auto.cnf
-rw------- 1 mysql mysql     1680 2月   4 18:17 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 ca.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 client-cert.pem
-rw------- 1 mysql mysql     1680 2月   4 18:17 client-key.pem
-rw-r----- 1 mysql mysql    14266 2月   4 19:08 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 2月   4 19:08 ibdata1
-rw-r----- 1 mysql mysql 50331648 2月   4 19:08 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 2月   4 18:17 ib_logfile1
drwxr-x--- 2 mysql mysql     4096 2月   4 18:17 mysql
drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 performance_schema
-rw------- 1 mysql mysql     1680 2月   4 18:17 private_key.pem
-rw-r--r-- 1 mysql mysql      452 2月   4 18:17 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 server-cert.pem
-rw------- 1 mysql mysql     1680 2月   4 18:17 server-key.pem
drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 sys

第十步 驗證數據

[root@node01 mysql]# systemctl start mysqld
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| friends            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.12 sec)

mysql> use friends;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_friends |
+-------------------+
| test              |
+-------------------+
1 row in set (0.00 sec)

mysql> select * from test;
+------+-----------+
| d    | name      |
+------+-----------+
|    2 | winstom   |
|    3 | liujunjun |
+------+-----------+
2 rows in set (0.02 sec)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM