xtrabackup的备份与恢复操作

xtrabackup的备份与恢复

环境
  • 系统: arm架构下的麒麟V10操作系统
  • mysql版本: arm架构下的msyql5.7.32
全量备份

流程

备份:
innobackupex --user=DBUSER --password=DBUSERPASS --defaults-file=/etc/my.cnf /path/to/BACKUP-DIR/

恢复:
innobackupex --apply-log /path/to/BACKUP-DIR/
innobackupex --copy-back --defaults-file=/etc/my.cnf  /path/to/BACKUP-DIR/
  1. innobackupex全量备份,并指定备份目录路径;

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

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

  • 全量备份
mkdir /backup
/usr/local/xtrabackup/bin/innobackupex --user=root --password='DBUSERPASS' --host=localhost  --port=3306 /backup
# --user: 指定数据库用户
# --password: 指定密码
# --host: 指定主机
# --port: 指定端口

输出:

210621 05:20:03 Executing UNLOCK TABLES
210621 05:20:03 All tables unlocked
210621 05:20:03 [00] Copying ib_buffer_pool to /backup/2021-06-21_05-19-59/ib_buffer_pool
210621 05:20:03 [00]        ...done
210621 05:20:03 Backup created in directory '/backup/2021-06-21_05-19-59/'
210621 05:20:03 [00] Writing /backup/2021-06-21_05-19-59/backup-my.cnf
210621 05:20:03 [00]        ...done
210621 05:20:03 [00] Writing /backup/2021-06-21_05-19-59/xtrabackup_info
210621 05:20:03 [00]        ...done
xtrabackup: Transaction log of lsn (119169212) to (119169622) was copied.
210621 05:20:04 completed OK!

查看备份文件

[root@integration backupTest]# cd /backup/2021-06-21_05-19-59/
[root@integration 2021-06-21_05-19-59]# ls
  • 恢复前准备

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。

innobackupex命令的–apply-log选项可用于实现上述功能,如下面的命令:

# /usr/local/xtrabackup/bin/innobackupex --apply-log /path/to/BACKUP-DIR
如果执行正确,其最后输出的几行信息通常如下:

120407 09:01:04 innobackupex: completed OK!

在开始之前,确保数据文件的权限是否正确,如

chown -R mysql:mysql /usr/local/mysql/data
  • 开始恢复

关闭数据库服务

/usr/local/mysql/bin/mysqld stop

模拟数据库故障,删除数据库数据

cd /usr/local/mysql/data/ && rm -rf *

此时,登录数据库已查询不到数据

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)

恢复备份:

# /usr/local/xtrabackup/bin/innobackupex --copy-back /backup/2021-06-21_05-19-59/

输出:

...
210621 05:57:11 [01]        ...done
210621 05:57:11 [01] Copying ./xtrabackup_master_key_id to /usr/local/mysql/data/xtrabackup_master_key_id
210621 05:57:11 [01]        ...done
210621 05:57:11 [01] Copying ./ibtmp1 to /usr/local/mysql/data/ibtmp1
210621 05:57:11 [01]        ...done
210621 05:57:11 completed OK!

启动数据库

/usr/local/mysql/bin/mysqld start

再次查看数据库即可看到恢复:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| manage_service     |
| mysql              |
| netdisk-service    |
| performance_schema |
| preview-service    |
| solr-service       |
| storage-service    |
| sys                |
+--------------------+
9 rows in set (0.00 sec)
增量备份
  • 流程
基于全量备份的增量备份与恢复
做一次增量备份(基于当前最新的全量备份)
innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --incremental /backups/ --incremental-basedir=/backups/2018-07-30_11-01-37
1. 准备基于全量
innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37
2. 准备基于增量
innobackupex --user=root --password=root --defaults-file=/etc/my.cnf --apply-log --redo-only /backups/2018-07-30_11-01-37 --incremental-dir=/backups/2018-07-30_13-51-47/
3. 恢复
innobackupex --copy-back --defaults-file=/etc/my.cnf /opt/2017-01-05_11-04-55/
解释:
1. 2018-07-30_11-01-37指的是完全备份所在的目录。
2. 2018-07-30_13-51-47指定是第一次基于2018-07-30_11-01-37增量备份的目录,其他类似以此类推,即如果有多次增量备份。每一次都要执行如上操作。

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

  • 进行一次全量备份

    /usr/local/xtrabackup/bin/innobackupex --user=root --password='DBUSERPASS' --host=localhost  --port=3306 /backup
    
  • 此时,往数据库插入数据(这里我在创建一个账号)

  • 进行增量备份

    /usr/local/xtrabackup/bin/innobackupex --user=root --password='DBUSERPASS' --host=localhost  --port=3306 --incremental /backup/ --incremental-basedir=/backup/2021-06-21_05-35-31
    
  • 模拟故障,关闭数据库,删除数据库

    /usr/local/mysql/bin/mysqld stop
    cd /usr/local/mysql/data && rm -rf *
    
  • 合并全备数据目录,确保数据的一致性

    innobackupex --apply-log --redo-only /backup/2021-06-21_05-35-31
    
  • 将增量备份数据合并到全备数据目录当中

    innobackupex --apply-log --redo-only /backups/2018-07-30_11-01-37/ --incremental-dir=/backups/2018-07-30_13-51-47/
    
  • 查看检查点

    [root@integration 2021-06-21_05-35-31]# cat xtrabackup_checkpoints 
    backup_type = log-applied
    from_lsn = 0
    to_lsn = 118420520
    last_lsn = 118420520
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 125484958
    
  • 恢复数据

    /usr/local/xtrabackup/bin/innobackupex --copy-back /backup/2021-06-21_05-35-31
    
  • 更改数据文件的数组,否则会报错

    chown -R mysql:mysql /usr/local/mysql/data
    
  • 启动数据库

    /usr/local/mysql/bin/mysqld start
    
  • 在查看数据,发现有了之后插入的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值