使用xtrabackup备份/增量备份mysql数据库

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Powerful_Fy/article/details/102749992

Percona-xtrabackup工具的两个常用命令:

1.xtrabackup命令:只支持InnoDB和XtraDB存储引擎的数据库非阻塞地备份
2.innobackupex命令:通过perl封装了一层xtrabackup,对MyISAM的备份通过加表读锁的方式实现。

安装Percona-xtrabackup工具

安装Percona的yum拓展仓库:

[root@linux ~]# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

启动存储库:

[root@linux ~]# percona-release enable-only tools release

安装2.4版本的xtrabackup:

yum -y install percona-xtrabackup-24

创建备份数据库的用户:

mysql> grant reload,lock tables,replication client,process,super on *.* to userbak@'localhost' identified by 'user123';

#创建用户userbak,密码user123,授权权限:reload,lock tables,replication client,process,super

刷新权限:

mysql> flush privileges;

创建备份文件存储目录:

[root@centos02 ~]# mkdir /data/mysqlbak

全量备份与恢复mysql数据库

备份:

[root@centos02 ~]# innobackupex --defaults-file=/etc/my.cnf --user=userbak --password=user123 /data/mysqlbak -S /tmp/mysql.sock

#由于创建授权userbak用户时定义的host为localhost,所以需要使用-S参数指定socket文件,如果用户host授权为127.0.0.1或实际IP地址,需要使用-h参数指定host

查看备份的文件:

[root@centos02 ~]# ls /data/mysqlbak/2019-10-26_14-42-29/
backup-my.cnf  ibdata1  mysql  performance_schema  test  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

#存放备份文件的目录是根据备份时间自动命名

对比mysql目录与备份目录大小:

[root@centos02 ~]# du -sh /data/mysql
111M	/data/mysql
[root@centos02 ~]# du -sh /data/mysqlbak/
15M	/data/mysqlbak/

#可以看出通过strabackup工具备份非常节省磁盘空间

恢复:

停止mysql服务:

[root@centos02 ~]# service mysql stop

删除datadir目录中的文件:

[root@centos02 ~]# rm -rf /data/mysql/*

说明:
因为备份的数据中可能会包含尚未提交的事务或者已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。"准备"的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使用得数据文件处于一致性状态。

使相关数据文件保持一致性:

[root@centos02 ~]# innobackupex --apply-log /data/mysqlbak/2019-10-26_14-42-29/

#在实现此步的准备工作过程中,如果服务器空闲内存够多,可以使用–user-memory参数来指定内存,使其加快速度,默认100M

恢复:

[root@centos02 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /data/mysqlbak/2019-10-26_14-42-29/

更改恢复后的文件的属主和属组:

[root@centos02 ~]# chown -R mysql:mysql /data/mysql

#接下来启动mysql服务即可

增量备份与恢复mysql数据库

注意:增量备份的前提是得有一次全备

第一次增量备份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29

[root@centos02 ~]# innobackupex --user=userbak --password=user123 --incremental /data/mysqlbak/ --incremental-basedir=/data/mysqlbak/2019-10-26_14-42-29  -S /tmp/mysql.sock

说明:
增量备份需要使用- -incremental 指定增量备份存放路径
使用- -incremental-basedir 指定全量备份的路径,也就是说基于全量备份做增量

第二次增量备份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29  2019-10-26_16-31-37

[root@centos02 ~]# innobackupex --user=userbak --password=user123 --incremental /data/mysqlbak/ --incremental-basedir=/data/mysqlbak/2019-10-26_16-31-37  -S /tmp/mysql.sock

说明:
此次- -incremental-basedir 需要指定上一次增量备份的目录,也就是说基于上一次增量做增量备份

增量备份的恢复:

当前备份目录包含一个全量备份和两个增量备份:

[root@centos02 ~]# ls /data/mysqlbak/
2019-10-26_14-42-29  2019-10-26_16-31-37  2019-10-26_16-38-00

停止mysql服务:

[root@centos02 ~]# service mysql stop

清空mysql数据存放目录的文件:

[root@centos02 ~]# rm -rf /data/mysql/*

准备全量:

[root@centos02 ~]# innobackupex --apply-log --redo-only /data/mysqlbak/2019-10-26_14-42-29/

准备第一次增量:

[root@centos02 ~]# innobackupex --apply-log --redo-only /data/mysqlbak/2019-10-26_14-42-29/ --incremental-dir=/data/mysqlbak/2019-10-26_16-31-37

准备第二次增量(最后一次增量不加- -redo-only):

[root@centos02 ~]# innobackupex --apply-log  /data/mysqlbak/2019-10-26_14-42-29/ --incremental-dir=/data/mysqlbak/2019-10-26_16-38-00

再次准备全量(不加 - -redo-only):

[root@centos02 ~]# innobackupex --apply-log /data/mysqlbak/2019-10-26_14-42-29/

注意:准备最后一次增量备份和再次准备全量备份时,不加- -redo-only

恢复:innobackupex --copy-back /全量备份目录

[root@centos02 ~]# innobackupex --copy-back /data/mysqlbak/2019-10-26_14-42-29/

查看datadir目录:

[root@centos02 ~]# ls /data/mysql
ibdata1  ib_logfile0  ib_logfile1  ibtmp1  mysql  performance_schema  test  test_mysql  xtrabackup_info  xtrabackup_master_key_id

#数据文件已恢复

更改恢复的数据文件属主和属组:

[root@centos02 ~]# chown -R mysql:mysql /data/mysql

#接下来启动mysql服务即可

补充:
1.如果每一次的增量备份是基于前一次的增量备份来做增量备份,那么在恢复操作中准备的时候就需要准备第一次全备和每一次的增备
2.如果每一次的增量备份是基于第一次的全备,那么在恢复的时候只需要准备第一次的全备和最后一次增备

MariaDB10.3.x以上版本的全量/增量备份与恢复

MariaDB10.3.x及以上的版本用Percona XtraBackup工具会有问题,原因是MariaDB10.3以上版本的redo日志格式和之前不同了。

解决方案:使用mariabackup,它是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份,这个工具是基于Percona的XtraBackup(版本2.3.8)的解决方案。

全量备份与恢复:

备份:

[root@linux ~]# mariabackup --defaults-file=/etc/my.cnf --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026

#与xtrabackup工具不同的是Mariabackup备份文件存放目录需要自己定义,而xtrabackup工具会自动根据时间生成,只需指定/data/mysqlbak目录即可

恢复:

1.停止服务并清空datadir:

[root@linux ~]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service
[root@linux ~]# rm -rf /data/mysql/*

2.准备:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026/

3.开始恢复:

[root@linux ~]# mariabackup --copy-back --target-dir /data/mysqlbak/20191026/

4.更改恢复文件的属主和属组:

[root@linux ~]# chown -R mysql:mysql /data/mysql

#成功,接下来即可启动服务了

增量备份与恢复:

注意:增量备份的前提得需要有一次全备

第一次增备:

[root@linux ~]# mariabackup --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026_inc1 --incremental-basedir /data/mysqlbak/20191026/

# - -target-dir 定义增备文件存放路径,- -incremental-basedir 指定基于增备的全量目录

第二次增备:

[root@linux ~]# mariabackup --backup --user=bakuser --password=bak123 --target-dir /data/mysqlbak/20191026_inc2 --incremental-basedir /data/mysqlbak/20191026_inc1

# - -target-dir 定义第二次增备文件存放路径,- -incremental-basedir 指定基于第二次增备的第一次增备目录

恢复:

停止服务并清空datadir:

[root@linux ~]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service
[root@linux ~]# rm -rf /data/mysql/*

准备全量备份:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --apply-only

准备第一次增备:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --incremental-dir /data/mysqlbak/20191026_inc1 --apply-only

准备第二次增备:

[root@linux ~]# mariabackup --prepare --target-dir /data/mysqlbak/20191026 --incremental-dir /data/mysqlbak/20191026_inc2 --apply-only

开始恢复:

[root@linux ~]# mariabackup --copy-back --target-dir /data/mysqlbak/20191026

变更恢复的数据文件的属主和属组:

[root@linux ~]# chown -R mysql:mysql /data/mysql

#完成后启动mysql即可

补充:
与xtrabackup不同的事,Mariabackup的每一次增备都基于上一次的增备的情况下,恢复时准备操作每一次增备都可以直接基于主备目录,不需要基于上一次的增备目录

猜你喜欢

转载自blog.csdn.net/Powerful_Fy/article/details/102749992