ITPub博客

首页 > 数据库 > MySQL > xtrabackup备份mysql innodb

xtrabackup备份mysql innodb

原创 MySQL 作者:wang_0720 时间:2014-03-19 16:34:49 0 删除 编辑
在mysql数据量不大的时候用mysqldump来备份还可以凑合,当数据越来越大时,利用mysqldump出来的数据还原的话就很费时了,这时就需要一种高效率的备份还原工具来完成这个重要的任务。好在percona公司给用户提供了一款开源、免费的热备工具,xtrabackup.xtrabakup包含两个工具:
xtrabackup是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构
innobackupex是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力
本文将对innobackupex进行详细的说明和测试
原理
1 记录备份开始时InnoDB存储引擎重做日志产生的检查点LSN
2 复制共享表空间文件以及独立表空间文件
3 记录复制完表空间文件后,InnoDB存储引擎重做日志文件检查点LSN
4 复制在备份时产生的重做日志
安装xtrabackup很简单,要安装perl-DBD-MySQL包。从procona官网下载合适版本的xtrabackup,将其解包,在解开的包percona-xtrabackup-2.1.8-Linux-i686中有如下命令
innobackupex      
xbcrypt  
xtrabackup    
xtrabackup_56
innobackupex-1.5.1 
xbstream 
xtrabackup_55
将这些命令复制到/usr/bin下,方便以后使用。
到此xtrabackup安装工作结束
备份测试
全备
数据库建测试表
mysql> use test;
Database changed
mysql> create table book (id int,name varchar(5));
Query OK, 0 rows affected (0.01 sec)

mysql> desc book;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  |     | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
写入输入若干条
[root@localhost ~]# cat test.sh
#!/bin/bash
for i in `seq 1 1000`;do
mysql -e "insert into test.book values($i,"$i");"
done
执行该脚本,向book表中插入1000条数据
验证数据
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.02 sec)
全备数据
innobackupex --defaults-file=/etc/my.cnf  /home/databackup/full/
为了测试方便,这里没设mysql密码,可以加参数--user=xxx --password=yyy
如果没有报错,在/home/databackup/full/目录下会生成以当前时间命令的目录,其下有若干文件
[root@localhost ~]# ll /home/databackup/full/2014-03-19_15-51-43/
total 18464
-rw-r--r--. 1 root root      262 Mar 19 15:51 backup-my.cnf
-rw-r-----. 1 root root 18874368 Mar 19 15:51 ibdata1
drwxr-xr-x. 2 root root     4096 Mar 19 15:51 mysql
drwxr-xr-x. 2 root root     4096 Mar 19 15:51 performance_schema
drwx------. 2 root root     4096 Mar 19 15:51 test
-rw-r--r--. 1 root root       13 Mar 19 15:51 xtrabackup_binary
-rw-r--r--. 1 root root       26 Mar 19 15:51 xtrabackup_binlog_info
-rw-r-----. 1 root root       89 Mar 19 15:51 xtrabackup_checkpoints
-rw-r-----. 1 root root     2560 Mar 19 15:51 xtrabackup_logfile
ll /home/databackup/full/2014-03-19_15-51-43/test/
total 144
-rw-r-----. 1 root root   8586 Mar 19 15:51 book.frm
-rw-r-----. 1 root root 131072 Mar 19 15:51 book.ibd
-rw-r--r--. 1 root root     61 Mar 19 15:51 db.opt
有book.ibd文件,说明mysql使用了独立表空间。
删除表book,模拟灾难恢复
mysql> use test;
Database changed
mysql> drop table book;
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;
Empty set (0.00 sec)
关闭mysql,恢复数据
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
利用全备的数据来恢复,--apply-log参数是应用transaction_logfile产生新的重做日志 ,--redo-only只做redo,不做rollback,
再次执行,生成redolog,以便mysql能快速启动
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
复制文件到数据目录,建议先将数据目录中的数据打包,然后清空,否则会报错。
innobackupex --copy-back /home/databackup/full/2014-03-19_15-51-43/
该数据权限为mysql
chown mysql.mysql -R /var/lib/mysql
启动mysql
验证恢复结果
mysql> use test;
Database changed
mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
|     1000 |
+----------+
1 row in set (0.00 sec)
增量备份
innobackupex --defaults-file=/etc/my.cnf --incremental-basedir=/home/databackup/full/2014-03-19_15-51-43/ --incremental /home/databackup/delta/
--incremental-basedir指向全备目录,也可以指向最近一次增量备份的目录
--incremental 指向本次要增量备份的目录
上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录,在该目录下存放着增量备份的所有文件
恢复
innobackupex --apply-log --redo-only BASE-DIR  
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1  
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
BASE-DIR全备目录,INCREMENTAL-DIR-1第一次增量的目录,INCREMENTAL-DIR-2第二次增量的目录
本例:
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/
innobackupex --apply-log --redo-only /home/databackup/full/2014-03-19_15-51-43/ --incremental-dir=/home/databackup/delta/2014-03-19_16-23-11
如果有多个增量的话要依次把增量日志应用到全备。
innobackupex --apply-log BASE-DIR
再次执行apply-log回滚未完成的日志
最后拷贝文件
innobackupex --copy-back BASE-DIR
该权限,启动mysql

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27181165/viewspace-1125092/,如需转载,请注明出处,否则将追究法律责任。

下一篇: awk的一些用法
请登录后发表评论 登录
全部评论

注册时间:2013-11-05

  • 博文量
    111
  • 访问量
    915555