Database-Mysql-XtraBackup备份实践

操作系统:ubuntu18

全量备份

备份阶段

创建备份并授权:

mysql> create user db_backup@‘localhost’ identified by ‘adson’;
Query OK, 0 rows affected (0.03 sec)
mysql> grant reload,process,lock tables,replication client on . to db_backup@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

创建备份路径:

adson@adson-ThinkPad-T450:~$ sudo mkdir /xtrabackup_dir
adson@adson-ThinkPad-T450:~$ sudo chown mysql:mysql /xtrabackup_dir

安装xtrabackup软件:

adson@adson-ThinkPad-T450:~$ sudo apt install percona-xtrabackup
adson@adson-ThinkPad-T450:~$ innobackupex -v
innobackupex version 2.4.9 Linux (x86_64) (revision id: a467167cdd4)

执行备份:

可加参数–defaults-file=/var/mysql/my.cnf
adson@adson-ThinkPad-T450:~$ sudo innobackupex --host=127.0.0.1 --port=3306 --user=db_backup --password=adson /xtrabackup_dir/
。。。。。。。。。。。。。。。。。。。。
181128 15:32:12 [00] Writing /xtrabackup_dir/2018-11-28_15-31-52/backup-my.cnf
181128 15:32:12 [00] …done
181128 15:32:12 [00] Writing /xtrabackup_dir/2018-11-28_15-31-52/xtrabackup_info
181128 15:32:12 [00] …done
xtrabackup: Transaction log of lsn (2615509) to (2615518) was copied.
181128 15:32:12 completed OK!

查看备份文件:

备份文件会存储在一个以备份时间命名的子目录下
adson@adson-ThinkPad-T450:~$ sudo ls /xtrabackup_dir/2018-11-28_15-31-52/
backup-my.cnf mysql test xtrabackup_logfile
ib_buffer_pool performance_schema xtrabackup_checkpoints
ibdata1 sys xtrabackup_info

准备阶段

在给创建备份之后,这时候的备份数据并不一致,因为在redo log中还可能存在着没有提交和已经提交的事务,因此还需要prepare阶段来备份redo里的内容。
格式:–apply-log 备份目录
adson@adson-ThinkPad-T450:~$ sudo innobackupex --apply-log /xtrabackup_dir/2018-11-28_15-31-52/
。。。。。。。。。
InnoDB: 32 non-redo rollback segment(s) are active.
InnoDB: 5.7.13 started; log sequence number 2615829
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown…
InnoDB: Shutdown completed; log sequence number 2615848
181128 15:59:33 completed OK!

这时候,备份数据达到一致状态。

恢复阶段

在取得一致备份后,如果需要用备份数据来恢复数据库,则只需要指定–copy-back和备份数据所在的目录即可。

模拟数据文件损坏:
停服务,删除数据库文件:
adson@adson-ThinkPad-T450:~$ systemctl stop mysqld
adson@adson-ThinkPad-T450:~$ sudo mv /var/mysql/data_3306/ /data_bak

恢复数据库:
注意:
1、数据目录必须为空,或是指定–force-non-empty-directories
2、数据库需处于关闭状态(导入部分备份不需要)

adson@adson-ThinkPad-T450:~$ sudo innobackupex --defaults-file=/var/mysql/my.cnf --copy-back /xtrabackup_dir/2018-11-28_15-31-52/
。。。。。。。
181128 16:13:11 [01] Copying ./test/db.opt to /var/mysql/data_3306/test/db.opt
181128 16:13:11 [01] …done
181128 16:13:11 completed OK!

更改datadir目录的权限,启动数据库:
adson@adson-ThinkPad-T450:~$ sudo chown -R mysql:mysql /var/mysql/data_3306/
adson@adson-ThinkPad-T450:~$ systemctl start mysqld

增量备份

备份阶段:

因为增量备份是基于全量的,所以首先需要创建数据库的全量备份。
在上面的备份目录中我们可以看到一个xtrabackup_checkpoints文件,这个文件记录了该备份的一些信息:
$ sudo cat /xtrabackup_dir/2018-11-28_15-31-52/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 2615509
last_lsn = 2615518
compact = 0
recover_binlog_info = 0

增量备份的命令格式:
–incremental --incremental-basedir

增量备份(基于上次全备):
$ sudo innobackupex --defaults-file=/var/mysql/my.cnf --host=127.0.0.1 --port=3306 --user=db_backup --password=adson --incremental --incremental-basedir=/xtrabackup_dir/2018-11-28_15-31-52 /xtrabackup_dir/incremental_backup_dir
。。。。。。。。。。
181128 16:44:37 [00] Writing /xtrabackup_dir/incremental_backup_dir/2018-11-28_16-44-25/xtrabackup_info
181128 16:44:37 [00] …done
xtrabackup: Transaction log of lsn (2615867) to (2615876) was copied.
181128 16:44:38 completed OK

增量备份完成后,会在/xtrabackup_dir/incremental_backup_dir/目录中创建一个时间目录。同样在该目录下存在xtrabackup_checkpoints文件:
$ sudo cat /xtrabackup_dir/incremental_backup_dir/2018-11-28_16-44-25/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2615509
to_lsn = 2615867
last_lsn = 2615876
compact = 0
recover_binlog_info = 0

增量备份(基于上次增量):
$ sudo innobackupex --defaults-file=/var/mysql/my.cnf --host=127.0.0.1 --port=3306 --user=db_backup --password=adson --incremental --incremental-basedir=/xtrabackup_dir/incremental_backup_dir/2018-11-28_16-44-25/ /xtrabackup_dir/incremental_backup_dir
查看xtrabackup_checkpoints:
adson@adson-ThinkPad-T450:/xtrabackup_dir$ sudo cat incremental_backup_dir/2018-11-28_16-53-14/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2615867
to_lsn = 2615867
last_lsn = 2615876
compact = 0
recover_binlog_info = 0

另外,也可指定incremental-lsn来进行备份:
sudo innobackupex --defaults-file=/var/mysql/my.cnf --host=127.0.0.1 --port=3306 --user=db_backup --password=adson --incremental --incremental-lsn=2615867 /xtrabackup_dir/incremental_backup_dir

Prepare阶段

这里,需要注意的是:
如果在全量备份上应用了已提交的事务并回滚未提交的事务,那么无法在此全量备份的基础上执行增量备份,对于增量备份也是如此,也将无法执行基于增量的增量备份。

准备阶段需要做的工作:
1、全量备份执行innobackup --apply-log --redo-only BASE_DIR
2、除去最后一个增量外所有的增量备份执行innobackup --apply-log --redo-only --incremental-dir=/path/INCREMENT_BACKUP_DIR BASE_DIR
3、在最后一个增量备份上执行innobackup --apply-log --incremental-dir=/path/INCREMENT_BACKUP_DIR BASE_DIR

恢复阶段

innobackup --copy-back /path/BASE_DIR

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值