percona-xtrabackup备份及恢复mysql操作

1.安装percona-xtrabackup

下载地址为http://www.percona.com/downloads/XtraBackup/
  1)服务器搭建本地yum源;
  2)yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
  3)rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
  4)rpm -ivh percona-xtrabackup-24-2.4.7-1.el6.x86_64.rpm
  5)rpm -ivh percona-xtrabackup-24-debuginfo-2.4.7-1.el6.x86_64.rpm
  6)rpm -ivh percona-xtrabackup-test-24-2.4.7-1.el6.x86_64.rpm
  安装完成,包含以下两大模块:
  xtrabackup:支持innodb存储引擎表,xtradb存储引擎表;
  innobackupex:支持innodb存储引擎表、xtradb存储引擎表、myisam存储引擎表; 常用的是innobackupex,可以使用innobackupex –help查看更详细的参数。

2.增量备份示意图

image

3.percona-xtrabackup实现增量备份及恢复原理

1)与mysqldump的比较:
  Mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump,支持基于innodb的热备份。但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景。Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。
  对myisam存储引擎的表,只能使用温备份,这个时候要防止数据的写入,所以先加上读锁。这个时候也可以进入数据库手动加读锁,不过这样比较麻烦,可以在mysqldump工具中直接有一个加锁的选择,就是 --lock-all-tables ,例如mysqldump --databases test --lock-all-tables --flush-logs > /tmp/backuptestdate+%F-%H-%M.sql。
  如果是备份单张表,直接在库名字test后面加上表名字即可。
  对于innodb存储引擎表,可以热备,不必对数据库进行加锁的操作,加一个选项可以进行热备份,--single-transaction,例如:

mysqldump --databases test --single-transaction --flush-logs--master-data=2> /tmp/backup_test_`date +%F-%H-%M`.sql

PS:注意点,恢复的时候记得关闭二进制日志:

mysql> set sql_log_bin=0;

因为这是基于逻辑备份方式,所以执行sql会插入数据,会记录到二进制日志里面去,因为这事恢复,所以插入的二进制日志基本没有啥意思,可以关闭掉,缩短恢复时间。

2)percona-xtrabackup的优势
  支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展,可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份。

3)基本原理
  数据库首先,使用percona-xtrabackup工具对进行全备,然后再每次数据库 的数据更新后对数据进行增量备份,每次增量备份均在上一次备份的基础上。恢复时依次把每次增量备份的数据恢复到全备中,最后使用合并的数据进行数据恢复。

4.percona-xtrabackup实现增量备份及恢复过程

1)全量备份
  首先创建备份目录,执行:

mkdir –p /home/xtrabackup/
innobackupex --user=root --password=root /home/xtrabackup/

出现“completed”提示时说明备份成功:

150318 19:32:49 innobackupex: Connection to database serverclosed
150318 19:32:49 innobackupex: completed

2)增量备份
  执行命令:

innobackupex --user=root --password=root  --incremental  /home/xtrabackup/ --incremental-basedir=/home/xtrabackup/2017-06-29_16-04-29/

其中--incremental-basedir是刚刚生成的全量备份目录;
  同样出现“complete”提示是备份成功。
  3)对全量备份数据进行检查

innobackupex --apply-log --redo-only 2017-06-29_16-04-29

出现下述提示,说明数据没有问题可以用作恢复:

130910 22:23:35  InnoDB: Starting shutdown...
130910 22:23:36  InnoDB: Shutdown completed; log sequence number 2098700
130910 22:23:36  innobackupex: completed OK!

4)合并增量备份和全量备份

innobackupex --apply-log --redo-only --incremental /home/xtrabackup/2017-06-29_16-04-29/ --incremental-dir=/home/xtrabackup/2017-06-29_16-15-18

同样出现complet提示后合并完成。
  5)数据恢复
  假如存在数据丢失、误删数据库等问题,需要数据恢复时,首先确认上述全量数据库可以使用,然后执行:

/etc/init.d/mysql stop                #关闭数据库
mv /var/lib/mysql /var/lib/mysql_bak   #备份数据库目录
mkdir –p /var/lib/mysql       #创建新的数据库目录
innobackupex --datadir=/var/lib/mysql --copy-back 2017-06-29_16-04-29     #恢复数据库
chown –R mysql:mysql /var/lib/mysql  #赋予数据库目录用户权限
/etc/init.d/mysql restart              #启动数据库

执行完成没有错误即恢复完成,可以检查数据库已经成功恢复。 亲测25G的数据库恢复过程只需7min。 而如果采用mysqldump备份的数据库恢复同样大小的数据需要5~6小时。

5.一些重要参数

--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实例使用的内存量,用来取代my.cnf中的buffer_pool_size值,如果你是独立服务器,而且内存足够大的话,为了加快备份恢复的效率,你可以调大--use-memory这个参数值
--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.
--safe-slave-backup
  则会暂停Slave的SQL线程,等待到没有打开的临时表的时候开始备份.备份结束后SQL线程会自动启动,这样就可以确保一致性的复制状态.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容