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)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/liujunjun/p/12260581.html