Xtrabackup备份与恢复

Xtrabackup备份

Xtrabackup优点

  • 备份速度快,物理备份可靠
  • 备份过程不会打断正在执行的事务(无需锁表)
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动备份校验
  • 还原速度快
  • 可以流传将备份传输到另外一台机器上
  • 在不增加服务器负载的情况备份数据

xtrabackup的安装

[root@localhost ~]# wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/8/x86_64/Percona-XtraBackup-2.4.21-r5988af5-el8-x86_64-bundle.tar
[root@localhost ~]# tar xf Percona-XtraBackup-2.4.21-r5988af5-el8-x86_64-bundle.tar
[root@localhost ~]# yum -y install percona*

xtrabackup全量备份与恢复

全量备份

[root@localhost backups]# innobackupex --user=root --password=yanchuang --host=192.168.23.132 /backups/  //进行全库备份

语法解释说明:
--user=root //指定备份用户
--password=yanchuang  //指定备份用户密码
--host  //指定主机
/backups  //指定备份目录
[root@localhost backups]# ll
total 0
drwxr-x---. 7 root root 256 Jar 03 03:41 2021-01-03_03-41-12
[root@localhost backups]# ll 2021-01-03_03-41-12   //查看备份数据
total 12340
-rw-r-----. 1 root root      487 Jar 03 03:42 backup-my.cnf   #备份用到的配置选项信息文件
-rw-r-----. 1 root root      848 Jar 03 03:42 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Jar 03 03:42 ibdata1
drwxr-x---. 2 root root       58 Jar 03 03:42 information
drwxr-x---. 2 root root     4096 Jar 03 03:42 mysql
drwxr-x---. 2 root root     8192 Jar 03 03:42 performance_schema
drwxr-x---. 2 root root      138 Jar 03 03:42 school
drwxr-x---. 2 root root     8192 Jar 03 03:42 sys
-rw-r-----. 1 root root       21 Jar 03 03:42 xtrabackup_binlog_info #mysql服务器当前正在使用的二进制日志文件和此时二进制日志时间的位置信息文件
-rw-r-----. 1 root root      135 Jar 03 03:42 xtrabackup_checkpoints #备份的类型、状态和LSN状态信息文件
-rw-r-----. 1 root root      489 Jar 03 03:42 xtrabackup_info
-rw-r-----. 1 root root     2560 Jar 03 03:42 xtrabackup_logfile  #备份的日志文件

总结全库备份与恢复三步曲

  • innobackupex全量备份,并指定备份目录路径

  • 在恢复前,需要使用--apply-log参数先进行合并数据文件,确保数据的一致性要求;

  • 恢复时,直接使用--copy-back参数进行恢复,需要注意的是,在my.cnf中要指定数据文件目录的路径

恢复

[root@localhost backups]# /etc/init.d/mysqld stop #停止mysql服务
[root@localhost backups]# innobackupex --apply-log /backups/2021-01-03_03-58-12/ #合并数据,使数据文件处于一致性的状态
[root@localhost backups]# rm -rf /opt/data/
[root@localhost backups]# innobackupex --copy-back /backups/2021-01-03_03-58-49/
20210103 03:59:15 completed OK! #看到completed OK就是恢复正常了
[root@localhost backups]# ll /opt/data/ #可以看到数据已经恢复,但是属主会有问题,需要进行修改,所以一般使用mysql的运行用户进行恢复,否则需要进行修改属主和属组信息
total 122924
-rw-r-----. 1 root root 848 Jar 03 04:00 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Jar 03 04:00 ibdata1
-rw-r-----. 1 root root 50331648 Jar 03 04:00 ib_logfile0
-rw-r-----. 1 root root 50331648 Jar 03 04:00 ib_logfile1
-rw-r-----. 1 root root 12582912 Jar 03 04:00 ibtmp1
drwxr-x---. 2 root root       58 Jar 03 04:00 information
drwxr-x---. 2 root root     4096 Jar 03 04:00 mysql
drwxr-x---. 2 root root     8192 Jar 03 04:00 performance_schema
drwxr-x---. 2 root root      138 Jar 03 04:00 school
drwxr-x---. 2 root root     8192 Jar 03 04:00 sys
-rw-r-----. 1 root root       24 Jar 03 04:00 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      489 Jar 03 04:00 xtrabackup_info
-rw-r-----. 1 root root        1 Jar 03 04:00 xtrabackup_master_key_id
[root@localhost backups]# chown -R mysql.mysql /opt/data/ 修改属主属组
[root@localhost backups]# /etc/init.d/mysqld start  #开启mysql服务
[root@localhost ~]# mysql -uroot -pyanchuang -e 'show databases;'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| information        |
| mysql              |
| performance_schema |
| school             |
| sys                |
+--------------------+

增量备份

[root@localhost backups]# innobackupex --user=root --password=yanchuang --host=192.168.23.132 /backups/  #全量备份数据
mysql> insert into student(name,age) values('zhangshan',1);  #在student表中新插入数据
[root@localhost backups]# innobackupex --user=root --password=yanchuang --host=192.168.23.132 --incremental /backups/ --incremental-basedir=/backups/2021-01-03  #使用innobackupex进行增量备份
[root@localhost backups]# ll
total 4
drwxr-x---. 7 root root  256 Jar 03 04:08 2020-12-29_22-33-28 #全量备份数据目录
drwxr-x---. 7 root root 4096 Jar 03 04:08 2020-12-29_22-40-12 #增量备份数据目录
[root@localhost backups]# cd 2021-01-03/
[root@localhost 2021-10-03]# cat xtrabackup_checkpoints #查看全量备份的xtrabackup_checkpoints
backup_type = full-backuped  #备份类型为全量备份
from_lsn = 0    #lsn从0开始
to_lsn = 5936187 #lsn到5936187结束
last_lsn = 5936196 
compact = 0
recover_binlog_info = 0
flushed_lsn = 5936196
[root@localhost 2021-01-03]# cd /backups/2021-01-03/
[root@localhost 2021-01-03]# cat xtrabackup_checkpoints #查看增量备份的xtrabackup_checkpoints
backup_type = incremental  #备份类型为增量备份
from_lsn = 5936187  #lsn从5936187开始
to_lsn = 5936579    #lsn从5936579结束
last_lsn = 5936588  
compact = 0
recover_binlog_info = 0
flushed_lsn = 5936588

使用增量数据恢复数据

[root@localhost ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@localhost ~]# rm -rf /opt/data/
//合并全备数据目录,确保数据的一致性
[root@localhost ~]# innobackupex --apply-log --redo-only /backups/2021-01-03/ 
//将增量备份数据合并到全备数据目录当中
[root@localhost ~]# innobackupex --apply-log --redo-only /backups/2021-01-03/ --incremental-dir=/backups/2021-01-03/
[root@localhost ~]# cat /backups/2021-01=03/xtrabackup_checkpoints 
backup_type = log-applied #查看到数据备份类型是增加
from_lsn = 0  #lsn从0开始
to_lsn = 5936579 #lsn结束号为最新的lsn
last_lsn = 5936588
compact = 0
recover_binlog_info = 0
flushed_lsn = 5936588
//恢复数据
[root@localhost ~]# innobackupex --copy-back /backups/2020-12-29_22-33-28/
[root@localhost ~]# ll /opt/data/
total 12332
-rw-r-----. 1 root root      848 Jar 03 04:08 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Jar 03 04:08 ibdata1
drwxr-x---. 2 root root       58 Jar 03 04:08 information
drwxr-x---. 2 root root     4096 Jar 03 04:08 mysql
drwxr-x---. 2 root root     8192 Jar 03 04:08 performance_schema
drwxr-x---. 2 root root      138 Jar 03 04:08 school
drwxr-x---. 2 root root     8192 Jar 03 04:08 sys
-rw-r-----. 1 root root       21 Jar 03 04:08 xtrabackup_binlog_pos_innodb
-rw-r-----. 1 root root      561 Jar 03 04:08 xtrabackup_info
-rw-r-----. 1 root root        1 Jar 03 04:08 xtrabackup_master_key_id
[root@localhost ~]# chown -R mysql.mysql /opt/data/  #更改数据的属主属组
[root@localhost ~]# /etc/init.d/mysqld start  #启动mysql
mysql> select * from student;   #查看数据是否恢复
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  1 | aaa       |   12 |
|  2 | bbb       |   23 |
|  3 | ccc       |   18 |
|  4 | zhangshan |    1 |
+----+-----------+------+
4 rows in set (0.00 sec)

总结:

(1)增量备份需要使用参数--incremental指定需要备份到哪个目录,使用incremental-dir指定全备目录;

(2)进行数据备份时,需要使用参数--apply-log redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性;

(3)再将增量备份数据使用参数--incremental-dir合并到全备数据当中;

(4)最后通过最后的全备数据进行恢复数据,注意,如果有多个增量备份,需要逐一合并到全备数据当中,再进行恢复。

原文地址:https://www.cnblogs.com/Ycqifei/p/14224718.html