前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Xtrabackup实现MySQL数据库的增量备份

使用Xtrabackup实现MySQL数据库的增量备份

作者头像
yuanfan2012
发布2019-09-17 11:12:11
1.6K0
发布2019-09-17 11:12:11
举报
文章被收录于专栏:WalkingCloudWalkingCloud

接上一篇文章使用Xtrabackup备份MySQL数据库,下面介绍使用Xtrabackup实现MySQL数据库的增量备份

先在users表中插入10条记录,全库做一次全量备份

[root@localhost ~]# mkdir /backup

[root@localhost ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock /backup

接下面我们再在表中插入几条新数据

要实现第一次增量备份,可以使用下面的命令进行:

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

其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。

--incremental-basedir应该指向上一次的增量备份所在的目录。

--incremental /backup/ 指定增量备份文件备份的目录

innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --incremental /backup --incremental-basedir=/backup/2019-09-15_14-12-17/

下面我们删除几条数据,然后通过之前的增量备份进行还原

“准备”(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指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作

下面模拟只有一次增量备份的增量备份还原过程

先确认两个备份目录哪一个是全量备份,哪一个是增量备份

然后进行prepare操作

innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --apply-log --redo-only /backup/2019-09-15_14-12-17/

innobackupex --defaults-file=/etc/my.cnf --user=root --password=MySQL@2019 --socket=/tmp/mysql.sock --apply-log --redo-only /backup/2019-09-15_14-12-17/ --incremental-dir=/backup/2019-09-15_14-22-35/

接下来停掉数据库服务,移除当前的数据库数据目录

service mysqld stop

mv /usr/local/mysql/data/ /backup/mysql_data_backup

进行备份还原

innobackupex --copy-back /backup/2019-09-15_14-12-17/

然后chown -R mysql:mysql /usr/local/mysql/data/

service mysqld start

登录数据库验证是否恢复成功

可以看出增量备份恢复成功

当然有时也可以通过mysqlbinlog来查看某个时间段的二进制日志进行恢复

mysqlbinlog --start-datetime="2019-09-15 09:12:51" --stop-datetime="2019-09-15 09:14:00" mysqlbin.000001 > /root/bak.sql

--start-datetime : 指定起始的时间点。

--stop-datetime: 指定结束的时间点。

--start-position: 指定二进制日志开始日志点。

--stop-position : 指定二进制日志结束的日志点。

上面四个参数可以配合使用

然后把上面导出sql文件导入到MySQL服务中。

mysql> set sql_log_bin=0; #导入时,若文件较大会产生很多二进制日志文件,可以先把二进制日志文件关闭,

mysql> source bak.sql; #导入文件,可以使用mysql直接导入

mysql> set sql_log_bin=1; #导入完成之后,开启二进制日志文件

具体的操作就不演示了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WalkingCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档