欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

程序员文章站 2024-02-22 16:45:58
xtrabackup------mysql dba的必备工具 注意: 1)文档参照http://www.percona.com/docs/wiki/percona-xt...

xtrabackup------mysql dba的必备工具

注意:

1)文档参照http://www.percona.com/docs/wiki/percona-xtrabackup:start

2)mysql要使用5.1.50版本或以上。

一、xtrabackup简介及安装

1、xtrabackup  是percona的一个开源项目,可以热备份innodb ,xtradb,和myisam(会锁表),可以看做是innodb hotbackup的免费替代品。

                                                        percona support for mysql

benefit silver
(per server)
gold
(unlimited)
platinum
(unlimited)
annual price $1,500/server from $15,000 from $30,000
number of servers covered per-server unlimited unlimited
number of support incidents unlimited unlimited unlimited
response time sla 60 minutes 30 minutes 30 minutes
named support contact persons 5 10 20
email, web, & chat support 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
phone support 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
login support 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
24×7 support 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
fixes for verified bugs   利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
hot bug fixes     利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
onsite system audit   option 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
covers old server versions     利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)
covers non-standard platforms     option
covers custom code     option
 

参考:http://www.percona.com/mysql-support/

 

先看看如何安装xtrabackup,最简单的安装方式是使用rpm包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在mysql源代码上打补丁构建的方式安装的。

2、安装:

wget http://www.percona.com/downloads/xtrabackup/xtrabackup-1.4/linux/binary/i686/

tar zxf xtrabackup-1.4.tar.gz

cd xtrabackup-1.4

./configure

make

进行到这里时,千万别make install,那样就会接着安装mysql了,正确方法是:

cd innobase/xtrabackup/

make

make install

安装参照:http://www.percona.com/docs/wiki/percona-xtrabackup:installation:from-source

3、如此一来,就会在/usr/bin目录里安装上两个有用的工具:xtrabackup、innobackupex

1)xtrabackup 只能备份innodb和xtradb两种数据表,支持在线热备份,可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam引擎表

2)innobackupex  是一个脚本封装,封装了xtrabackup,能同时处理innodb和myisam,但在处理myisam时需要加一个读锁。

 

按如上的介绍,由于操作myisam时需要加读锁,这会堵塞线上服务的写操作,而innodb没有这样的限制,所以数据库中innodb表类型所占的比例越大,则越有利。实际应用中一般是直接使用innobackupex方法,它主要有三种操作方式,按手册中的介绍:

usage:

innobackup [--sleep=ms] [--compress[=level]] [--include=regexp] [--user=name]

           [--password=word] [--port=port] [--socket=socket] [--no-timestamp]

           [--ibbackup=ibbackup-binary] [--slave-info] [--stream=tar]

           [--defaults-file=my.cnf]

           [--databases=list] [--remote-host=hostname] backup-root-dir

innobackup --apply-log [--use-memory=mb] [--uncompress] [--defaults-file=my.cnf]

           [--ibbackup=ibbackup-binary] backup-dir

innobackup --copy-back [--defaults-file=my.cnf] backup-dir

——————————————————————————————————

第一个命令行是热备份mysql数据库。

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

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

xtrabackup还可以用来moving innodb tables between servers,更多的内容可以参考官方文档及例子。

参考链接:

1.官方文档:http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual

2.xtrabackup online backup for innodb/xtradb(pdf):

http://www.percona.com/ppc2009/ppc2009_xtrabackup.pdf

 
 
二、innobackupex 和 xtrabackup备份详解

注:innobackupex会根据/et/my.cnf来确定mysql的数据位置。

1.普通备份:

innobackupex [--defaults-file=/etc/my.cnf] --user=root [--host=192.168.1.52] [--password=xxx] [--port=3306]   /data/back_data/    2>/data/back_data/1.log

备份的目录是/data/back_data/,这里的2>/data/back_data/1.log,是将备份过程中的输出信息重定向到1.log

innobackupex-1.5.1 –slave-info …..

–slave-info会记录复制主日志的 复制点,便于重新做复制用。(用在备份从机器用)

备份后的文件:

xtrabackup_binlog_info — 存放binlog的信息。(binlog需要另外拷贝备份,如果需要binlog的话)

xtrabackup_checkpoints — 存放备份的起始位置和结束位置。

恢复:

首先停掉数据库,然后删除数据库目录下的所有数据库文件.

cd /data/mysql_data

rm -rf * # 删除数据目录里的所有文件

innobackupex-1.5.1 --user=root --apply-log /data/back_data/2010-10-26_16-09-37 # 应用日志

innobackupex-1.5.1 --user=root --copy-back /data/back_data/2010-10-26_16-09-37

默认innobackupex-1.5.1会将二进制日志信息存放在文件xtrabackup_binlog_info中发(方便做slave)。

cd /data

chown -r mysql:mysql mysql_data/

重启mysql服务

2.打包(tar)备份:

innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar /data/back_data/2/ 2>/data/back_data/2.log   1>/data/back_data/2.tar

还原:

#cd /data/back_data/2/

#tar ixvf 2.tar

# ls

2.tar backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints  xtrabackup_logfile

准备还原

# innobackupex-1.5.1 --user=xxx [--password=xxx]--apply-log /data/back_data/

……

innobackupex: completed ok!

删除数据目录里的所有文件

rm -rf /data/mysql_data/*

拷贝:

# innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back  /data/back_data/

……

innobackupex: completed ok!

cd /data

chown -r mysql:mysql mysql_data/

重启mysql服务

3. 压缩(tar gzip)备份

innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar

/data/back_data/2/  2>/data/back_data/2.log | gzip > /data/back_data/2.tar.gz

这里使用了管道|将innobackupex-1.5.1作为gzip的标准输入。恢复,只需要使用tar -izxvf 解压对应的文件后,操作完全同普通备份。

还原:

使用tar –izxvf 解压对应的文件后,操作完全同普通备份。

#cd /data/back_data/2/

#tar ixvf 2.tar

# ls

backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints  xtrabackup_logfile

准备还原:

# innobackupex-1.5.1 --user=xxx [--password=xxx] --apply-log /data/back_data/2/

……

innobackupex: completed ok!

删除数据目录里的所有文件

rm -rf /data/mysql_data/*

# innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back   /data/back_data/2/

cd /data

chown -r mysql:mysql mysql_data/

重启mysql服务

———————————————————————————————————————

xtrabackup 备份和恢复

备份:

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

恢复:

需要执行两次xtrabackup –prepare

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

注意,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。

增量备份:

1. 全量备份

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

2. 增量备份

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/ --incremental-

basedir=/data/back_data/

在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page,所以增量备份只暂用较少的空间。增量备份可以在增量备份的基础上增量。

增量备份恢复:

我们需要分别对全量、增量备份各做一次prepare操作。

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/2010-10-26_16-09-37

xtrabackup --prepare --target-dir=/data/back_data/2010-10-26_16-09-37--incremental-

dir=/data/back_data_inc

xtrabackup --prepare --target-dir=/data/back_data/ #这一步不是必须的

这样,/data/back_data/下的数据文件就可以直接放到你的mysql数据目录下,恢复数据了。

再次提醒,xtrabackup只备份innodb数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)。

rm -rf /data/mysql_data/ib*

cp -i /data/back_data/2010-10-26_16-09-37/ib* /data/mysql_data/

cd /data

chown -r mysql:mysql mysql_data/

2.innobackupex 与 xtrabackup 相结合

首先,innobackupex全备份:

innobackupex  --user=root /data/back_data/ 2>/data/back_data/1.log #会生成一个时间文件夹,这里假如是2010-10-29_15-57-44

然后,xtrabackup 做增量备份:

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/4 --incremental-basedir=/data/back_data/2010-10-29_15-57-44

恢复:

首先停掉数据库,备份二进制日志(如果有的话),然后删除数据库目录下的所有数据库文件.

cd /data/mysql_data

rm -rf * # 删除数据目录里的所有文件

恢复全量备份:

innobackupex  --user=root --apply-log /data/back_data/2010-10-29_15-57-44 # 应用日志

innobackupex  --user=root --copy-back /data/back_data/2010-10-29_15-57-44 # 拷贝文件

恢复增量备份:

xtrabackup --prepare --target-dir=/data/back_data/2010-10-29_15-57-44 --incremental-dir=/data/back_data_inc/5

cd /data

chown -r mysql:mysql mysql_data/

重启mysql服务。