ITPub博客

首页 > 数据库 > MySQL > 【Xtrabackup】Xtrabackup全备、增量备份及恢复示例

【Xtrabackup】Xtrabackup全备、增量备份及恢复示例

原创 MySQL 作者:恩强Boy 时间:2021-01-08 20:11:19 0 删除 编辑

一、  全库备份与恢复

备份时需要启动MySQL ,恢复时需要关闭 MySQL ,清空 MySQL 数据目录且不能重新初始化。

1.  执行备份

# mkdir -p /xtrabackup/full

#   innobackupex --socket=/usr/local/mysql/data/mysql.sock --user=root --password='P@ssw0rd' /xtrabackup/full

2.  查看备份文件夹内容

# pwd

/xtrabackup/full/2021-01-06_14-27-09

# ls -l

backup-my.cnf   # 备份用到的配置选项文件

ib_buffer_pool

ibdata1   # 数据文件

mysql

performance_schema

sys

xtrabackup_binlog_info   #MySQL 服务器当前使用的 binlog

xtrabackup_checkpoints   # 备份的类型、状态

xtrabackup_info

xtrabackup_logfile   # 备份的日志文件

3.  执行恢复

恢复可以恢复到本机或其他机器,执行步骤如下:

1)  停止数据库

# service mysqld stop

2)  清理数据文件

# rm -rf /usr/local/mysql/data/

3)  重演回滚(回滚日志文件,恢复数据文件)

-- 回滚日志

# innobackupex --apply-log /xtrabackup/full/2021-01-06_14-27-09/

-- 恢复数据文件

# innobackupex --copy-back /xtrabackup/full/2021-01-06_14-27-09/

4)  修改权限

# chown -R mysql:mysql  /usr/local/mysql/data

5)  启动数据库

# systemctl start mysqld

二、  增量备份恢复

在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份都是基于上一次的增量备份的,以此类推。

1.  数据验证准备

mysql> create database test_db;

mysql> use test_db;

mysql> create table test_tab(id int);

-- 插入“ 1

mysql> insert into test_tab values(1);

mysql> select * from test_tab;

+------+

| id      |

+------+

|    1   |

+------+

1 row in set (0.00 sec)

2.  执行完全备份

# innobackupex --user=root --password='P@ssw0rd' --socket= /usr/local/mysql/data/mysql.sock  /xtrabackup

3.  插入数据2

mysql> insert into test_tab values(2);

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

+------+

2 rows in set (0.00 sec)

4.  执行增量备份

# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup   --incremental - basedir=/xtrabackup/2021-01-06_15-33-55

注:

--incremental: 增量备份存放路径

--incremental-basedir: 基于哪个目录增量

5.  插入数据3

mysql> insert into test_tab values(3);

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

6.  再次执行增量备份

# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup --incremental-basedir=/xtrabackup/2021-01-06_15-41-53

注:由于这里是第二次增量备份,那么 --incremental-basedir 的指向应为第一次增量备份的路径

7.  查看增量的备份

# cd /xtrabackup/increment/

# ls -lrt

2021-01-06_15-33-55

2021-01-06_15-41-53

2021-01-06_15-49-48

其中,第一个目录为全量备份,第二、三个目录分别为第一次增量和第二次增量的备份。注意第二次增量备份是针对第一次增量的。

8.  增量的恢复

1)  停止数据库

# ps -ef|grep mysql

# service mysqld stop

2)  清理数据文件

# rm -rf /usr/local/mysql/data

3)  依次重演回滚redo log (恢复数据)

# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 /

# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 / --incremental-dir= /xtrabackup/ 2021-01-06_15-41-53 /

# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-06_15-33-55 /   --incremental-dir= /xtrabackup/ 2021-01-06_15-49-48 /

注: --apply-log --redo-only 用于合并全备目录数据,确保数据的一致性

--apply-log --redo-only --incremental-dir 用于将全备和增量备份数据目录进行合并,合并到全备目录中

2021-01-06_15-33-55 为全备的目录

2021-01-06_15-41-53 为第一次增量备份的目录

2021-01-06_15-49-48 为第二次增量备份的目录

恢复数据文件

# innobackupex --copy-back /xtrabackup/2021-01-06_15-33-55/

注:数据文件的备份位于第一次全量备份的路径下

4)  修改权限

# chown -R mysql:mysql /usr/local/mysql/data

5)  启动数据库

# service mysqld start

6)  验证数据

mysql> use test_db;

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

三、  差异增量备份

差异增量备份需要先执行一个全量备份,后面的每一个增量备份都是针对全量的,而不是针对上一次增量。所以在恢复时,只需要使用最后一次的增量就行。

1.  数据验证准备

mysql> create database test_db;

mysql> use test_db;

mysql> create table test_tab(id int);

-- 插入“ 1

mysql> insert into test_tab values(1);

mysql> select * from test_tab;

+------+

| id      |

+------+

|    1   |

+------+

1 row in set (0.00 sec)

2.  执行完全备份

# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock  /xtrabackup

3.  插入数据2

mysql> insert into test_tab values(2);

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

+------+

2 rows in set (0.00 sec)

4.  执行差异备份(基于全备)

# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup   --incremental - basedir=/xtrabackup/ 2021-01-08_10-34-36

: 2021-01-08_10-34-36 为全备目录

5.  插入数据3

mysql> insert into test_tab values(3);

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

6.  再次差异增量备份(基于全备)

(命令与上一次增量备份一模一样)

# innobackupex --user=root --password='P@ssw0rd' --socket=/usr/local/mysql/data/mysql.sock --incremental /xtrabackup   --incremental - basedir=/xtrabackup/ 2021-01-08_10-34-36

: 2021-01-08_10-34-36 为全备目录

7.  查看增量的备份

# cd /xtrabackup/increment/

# ls -lrt

2021-01-08_10-34-36

2021-01-08_10-39-28

2021-01-08_10-42-53

其中,第一个目录为全量备份,第二、三个目录分别为第一次增量和第二次增量的备份,注意两次增量的备份都是针对全量的。

8.  增量的恢复

1)  停止数据库

# ps -ef|grep mysql

# service mysqld stop

2)  清理数据文件

# rm -rf /usr/local/mysql/data

3)  重演回滚redo log (恢复数据)

# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-08_10-34-36 /

# innobackupex --apply-log --redo-only /xtrabackup/ 2021-01-08_10-34-36 / --incremental-dir= /xtrabackup/ 2021-01-08_10-42-53 /

注:--apply-log --redo-only 用于合并全备目录数据,确保数据的一致性

--apply-log --redo-only --incremental-dir 用于将全备和增量备份数据目录进行合并,合并到全备目录中

2021-01-08_10-34-36 为全备的目录

2021-01-08_10-42-53 为最后一次增量备份的目录

恢复数据文件

# innobackupex --copy-back /xtrabackup/ 2021-01-08_10-34-36 /

注:数据文件的备份位于第一次全量备份的路径下

4)  修改权限

# chown -R mysql:mysql /usr/local/mysql/data

5)  启动数据库

# service mysqld start

6)  验证数据

mysql> use test_db;

mysql> select * from test_tab;

+------+

| id   |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

最后需要注意一下,我们上面示例的三种备份方式,都只是恢复到了备份那个时间点,并没有通过binlog 恢复到最近的位置。比如我们在昨晚 11 点做了全备或增量备份,早上 9 点时出了故障,我们通过以上方式也只能恢复到昨晚 11 点的备份时间。 11 -9 点这段时间的数据并不会得到恢复。

 

 

---- end ----


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31529886/viewspace-2748606/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
勤奋,专注和练习

注册时间:2018-04-03

  • 博文量
    75
  • 访问量
    140880