0

0

使用xtrabackup在线增量备份及恢复数据库_MySQL

php中文网

php中文网

发布时间:2016-05-30 17:10:48

|

1020人浏览过

|

来源于php中文网

原创

一、Percona Xtrabackup 简介

 

I-Shop购物系统
I-Shop购物系统

部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/

下载

1、Xtrabackup  bin目录文件 介绍

 

1)innobackupex

 

innobackupex 是xtrabackup的一个符号链接 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.

 

2)xtrabackup

 

一个由C编译而来的二进制文件,可以整备MySQL database instance with MyISAM, InnoDB, and XtraDB tables

 

3)xbcrypt

 

用来加密或解密备份的数据

 

4)xbstream

 

用来解压或压缩xbstream格式的压缩文件

 

5)xbcloud

 

utility used for downloading and uploading full or part of xbstream archive from/to cloud.

 

2、Percona XtraBackup info

 

是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)

 

you can achieve the following benefits: (https://www.percona.com/doc/percona-xtrabackup/2.3/intro.html)

 

Backups that complete quickly and reliably

Uninterrupted transaction processing during backups

Savings on disk space and network bandwidth

Automatic backup verification

Higher uptime due to faster restore time

features  

Create hot InnoDB backups without pausing your database

Make incremental backups of MySQL

Stream compressed MySQL backups to another server

Move tables between MySQL servers on-line

Create new MySQL replication slaves easily

Backup MySQL without adding load to the server

 

无需停止数据库进行InnoDB热备

 

增量备份MySQL

 

流压缩到传输到其它服务器

 

在线移动表

 

能比较容易地创建主从同步

 

备份MySQL时不会增大服务器负载

 

3、Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下

 

1、在InnoDB内部会维护一个redo/undo日志文件,也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

 

2、Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。

 

3、上面就是xtrabackup的备份过程。接下来是准备(prepare)过程,在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了,这个过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。

 

4、备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。

 

5、Xtrabackup 和 innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。

 

二、安装xtrabackup

 

1、安装

 

yum -y install perl perl-devel libaio libaio-devel

yum -y install  perl-DBI  perl-DBD-MySQL  perl-TermReadKey perl-devel perl-Time-HiRes

 

cd /usr/local/src

wget -c https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.2/ \

binary/tarball/percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz

 

tar -zxf percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz

cd percona-xtrabackup-2.3.2-Linux-x86_64/

mkdir  /usr/local/xtrabackup

mv bin  /usr/local/xtrabackup/

ln -s /usr/local/xtrabackup/bin/* /usr/bin/

 

2、修改my.cnf

 

[mysqld] 

datadir=/var/lib/mysql

 

innodb_data_home_dir = /data/mysql/ibdata

innodb_log_group_home_dir = /data/mysql/iblogs

innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend

innodb_log_files_in_group = 2

innodb_log_file_size = 1G

 

三、全部数据库备份与还原

 

1、备份

 

//全部数据库备份

innobackupex --user=root --password=123456 /data/backup/

 

//单数据库备份

innobackupex --user=root --password=123456 --database=backup_test /data/backup/

 

//多库

innobackupex--user=root --password=123456 --include='dba.*|dbb.*' /data/backup/

 

//多表

innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /data/backup/

 

//数据库备份并压缩

log=zztx01_`date +%F_%H-%M-%S`.log

db=zztx01_`date +%F_%H-%M-%S`.tar.gz

innobackupex --user=root --stream=tar /data/backup  2>/data/backup/$log | gzip 1> /data/backup/$db

//不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件,疑惑了好长时间

 

//如果有错误可以加上  --defaults-file=/etc/my.cnf

 

2、还原

 

service mysqld stop

mv /data/mysql /data/mysql_bak && mkdir -p /data/mysql

 

//--apply-log选项的命令是准备在一个备份上启动mysql服务

innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2015-09-18_16-35-12

 

//--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置

innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2015-09-18_16-35-12

 

chown -R mysql.mysql /data/mysq

service mysqld start

 

四、增量备份与还原

 

1、创建测试数据库和表

 

create database backup_test; //创建库

 

CREATE TABLE `backup` ( //创建表

`id` int(11) NOT NULL AUTO_INCREMENT ,

`name` varchar(20) NOT NULL DEFAULT '' ,

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,

`del` tinyint(1) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

 

2、增量备份

 

#--incremental:增量备份的文件夹

#--incremental-dir:针对哪个做增量备份

 

//第一次备份

mysql> INSERT INTO backup (name) VALUES ('xx'),('xxxx'); //插入数据

innobackupex  --user=root --incremental-basedir=/data/backup/2015-09-18_16-35-12 --incremental /data/backup/

 

//再次备份

mysql> INSERT INTO backup (name) VALUES ('test'),('testd'); //在插入数据

innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_18-05-20 --incremental /data/backup/

 

3、查看增量备份记录文件

 

[root@localhost 2015-09-18_16-35-12]# cat xtrabackup_checkpoints //全备目录下的文件

backup_type = full-prepared

from_lsn = 0 //全备起始为0

to_lsn = 23853959

last_lsn = 23853959

compact = 0

 

[root@localhost 2015-09-18_18-05-20]# cat xtrabackup_checkpoints //第一次增量备份目录下的文件

backup_type = incremental

from_lsn = 23853959

to_lsn = 23854112

last_lsn = 23854112

compact = 0

 

[root@localhost 2015-09-18_18-11-43]# cat xtrabackup_checkpoints //第二次增量备份目录下的文件

backup_type = incremental

from_lsn = 23854112

to_lsn = 23854712

last_lsn = 23854712

compact = 0

增量备份做完后,把backup_test这个数据库删除掉,drop database backup_test;这样可以对比还原后

 

4、增量还原

 

分为两个步骤

 

a.prepare

 

innobackupex --apply-log /path/to/BACKUP-DIR

此时数据可以被程序访问使用;可使用—use-memory选项指定所用内存以加快进度,默认100M;

 

b.recover

 

innobackupex --copy-back /path/to/BACKUP-DIR

从my.cnf读取datadir/innodb_data_home_dir/innodb_data_file_path等变量

 

先复制MyISAM表,然后是innodb表,最后为logfile;--data-dir目录必须为空

 

开始合并

 

innobackupex --apply-log --redo-only /data/backup/2015-09-18_16-35-12

innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-05-20

innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-11-43

 

#/data/backup/2015-09-18_16-35-12 全备份目录

#/data/backup/2015-09-18_18-05-20 第一次增量备份产生的目录

#/data/backup/2015-09-18_18-11-43 第二次增量备份产生的目录

 

恢复数据

 

service mysqld stop

innobackupex --copy-back /data/backup/2015-09-18_16-35-12

service mysqld start

五、innobackup 常用参数说明

--defaults-file

同xtrabackup的--defaults-file参数

 

--apply-log

对xtrabackup的--prepare参数的封装

 

--copy-back

做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;

 

--remote-host=HOSTNAME

通过ssh将备份数据存储到进程服务器上;

 

--stream=[tar]

备 份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup binary文件中获得.如果备份时有指定--stream=tar, 则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩, 在XtraBackup的binary包中可获得该文件)。

在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。

 

--tmpdir=DIRECTORY

当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir

 

--redo-only --apply-log组,

强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。

 

--use-memory=#

该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量

 

--throttle=IOS

同xtrabackup的--throttle参数

 

--sleep=是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册 ;

 

--compress[=LEVEL]

对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;

 

--include=REGEXP

对 xtrabackup参数--tables的封装,也支持ibbackup。备份包含的库表,例如:--include="test.*",意思是要备份 test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:test1和test2,则写 成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。

 

--databases=LIST

列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份;

 

--uncompress

解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;

 

--slave-info,

备 份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

 

--socket=SOCKET

指定mysql.sock所在位置,以便备份进程登录mysql.

相关文章

数据恢复工具app
数据恢复工具app

手机里的数据丢失了怎么办?聊天记录不小心删掉了怎么办?不用担心,这里为大家提供了数据恢复工具app下载,安全正规,有需要的小伙伴保存下载,就轻松恢复数据啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

2

2026.02.24

Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址
Asianfanfics官网入口与访问指南_AFF官方平台最新登录地址

本专题系统整理Asianfanfics(AFF)官方网站最新可用入口,涵盖官方平台最新直达地址、官网登录方式及中文访问指引,帮助用户快速、安全地进入AFF平台浏览与使用相关内容。

0

2026.02.24

Go分布式服务治理与链路追踪实践
Go分布式服务治理与链路追踪实践

本专题围绕 Go 语言在分布式系统中的服务治理实践展开,系统讲解服务注册与发现、配置中心、限流熔断、灰度发布以及分布式链路追踪方案。通过完整项目示例,帮助开发者构建可观测性完善、稳定性高、易扩展的 Go 微服务架构体系,提升线上系统问题定位与运维效率。

0

2026.02.24

Python自动化测试与持续集成实战
Python自动化测试与持续集成实战

本专题聚焦 Python 在自动化测试与持续集成中的工程化实践,系统讲解测试框架选型、测试用例设计、接口自动化、测试数据管理及测试报告生成。结合 CI/CD 流水线场景,讲解如何将自动化测试融入持续集成流程,实现代码提交即自动测试,提升项目交付质量与团队协作效率。

0

2026.02.24

Java高并发系统设计与性能调优
Java高并发系统设计与性能调优

本专题围绕 Java 在高并发业务场景下的系统设计与性能调优展开,系统讲解线程模型、并发容器、锁机制、异步编程及 JVM 性能调优思路。结合真实高并发业务场景,深入分析接口限流、线程池配置、热点资源优化与系统稳定性保障方案,帮助开发者构建高性能、高可用的 Java 后端系统。

3

2026.02.24

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1250

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

402

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

252

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

39

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
TypeScript 教程
TypeScript 教程

共19课时 | 3.1万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号