percona xtrabackup增量备份和恢复

2023年 7月 15日 109.6k 0

1,完全备份使用innobackupex进行增量备份(相当于上一次数据增量,上一次数据后变化的数据)

通常,我们在恢复完成后会立刻进行一次全备。[root@mysql-master mybackups]# innobackupex --user=root /mybackups/drwxr-xr-x. 6 root root 4096 Jan 26 01:32 2016-01-26_01-32-33

模拟插入数据在hellodb中添加数据 MariaDB [hellodb]> CREATE TABLE t1 (id int);Query OK, 0 rows affected (0.04 sec)

在hellodb中添加数据 MariaDB [hellodb]> insert into t1 values (1),(2);Query OK, 2 rows affected (0.00 sec)Records: 2 Duplicates: 0 Warnings: 0

2,增量备份1[root@mysql-master mybackups]# innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-01-26_01-32-33/drwxr-xr-x. 6 root root 4096 Jan 26 01:39 2016-01-26_01-38-59

PS

每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。增量备份.png要实现第一次增量备份,可以使用下面的命令进行:

innobackupex --incremental /backup --incremental-basedir=BASEDIR

模拟再次插入数据[root@mysql-master 2016-01-25_23-12-12]# mysqlWelcome to the MariaDB monitor. Commands end with ; or g.Your MariaDB connection id is 6Server version: 5.5.44-MariaDB-log Source distribution

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

创建表MariaDB [(none)]> CREATE DATABASE linuxea;Query OK, 1 row affected (0.00 sec)

当前表MariaDB [(none)]> use linuxea;Database changed

创建TABLES MariaDB [linuxea]> CREATE TABLE linuxea (Name Char(10));Query OK, 0 rows affected (0.02 sec)

3,增量备份2[root@mysql-master mybackups]# innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2016-01-26_01-38-59/drwxr-xr-x. 7 root root 4096 Jan 26 01:40 2016-01-26_01-40-51

查看/xtrabackup_checkpoints单元号[root@mysql-master ]# cat /mybackups/2016-01-26_01-32-33/xtrabackup_checkpoints backup_type = full-backupedfrom_lsn = 0to_lsn = 1634625last_lsn = 1634625compact = 0[root@mysql-master ]# cat /mybackups/2016-01-26_01-38-59/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 1634625to_lsn = 1640142last_lsn = 1640142compact = 0[root@mysql-master ]# cat /mybackups/2016-01-26_01-40-51/xtrabackup_checkpoints backup_type = incrementalfrom_lsn = 1640142to_lsn = 1643800last_lsn = 1643800compact = 0[root@mysql-master 2016-01-26_01-32-33]#

模拟一次故障

[root@mysql-master data]# service mysqld stop
Shutting down MySQL. SUCCESS! 
[root@mysql-master data]# rm -rf *

故障发生后的恢复1,完全备份恢复

如: innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/

2,增量备份的恢复(用完全备份加上增量1)在完全备份之上--incremental-dir`增量备份1`

如:innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/  --incremental-dir=/mybackups/2016-01-26_01-38-59/

3,增量备份的恢复,在完全备份之上恢复上次增量后的完全备份进行恢复--incremental-dir`增量备份`

 如:innobackupex --apply-log --redo-only /mybackups/2016-01-26_01-32-33/  --incremental-dir=/mybackups/2016-01-26_01-40-51/

在查看下单元号是否对应[root@mysql-master ]# cat /mybackups/2016-01-26_01-32-33/xtrabackup_checkpoints backup_type = full-preparedfrom_lsn = 0to_lsn = 1643800last_lsn = 1643800compact = 0[root@mysql-master ]#

如果没错,则进行恢复

[root@mysql-master mydata]#  innobackupex --copy-back /mybackups/2016-01-26_01-32-33/

恢复后修改权限,启动即可[root@mysql-master data]# chown -R mysql.mysql ./*[root@mysql-master data]# service mysqld startStarting MySQL.. SUCCESS!

[root@mysql-master data]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 2
Server version: 5.5.40-MariaDB-log MariaDB Server

Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| linuxea            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

MariaDB [(none)]> 

PS:如果此时没有做增量备份,且数据丢失,则可以使用二进制恢复,单元号可选最后一次增量备份文件中的xtrabackup_binlog_info

[root@mysql-master 2016-01-25_23-44-28]# cat xtrabackup_binlog_info 
master-bin.000005    719        
[root@mysql-master 2016-01-25_23-44-28]# 

innobackupex --incremental /backup --incremental-basedir=BASEDIR

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。

需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。(2)基于所有的备份将未提交的事务进行“回滚”。

于是,操作就变成了:

innobackupex --apply-log --redo-only BASE-DIR

接着执行:

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

而后是第二个增量:

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论