mysql增量备份backupex_Xtrabackup备份与还原(全备&增量)

Xtrabackup之备份与还原

Xtrabackup是percona的一个开源项目,可以热备份innodb,XtraDB,和MyISAM(会锁表),可以看做是mysql商业备份工具InnoDB Hotbackup的免费替代品。

①xtrabackup只能备份InnoDB和XtraDB两种数据库表,支持在线热备份,可以在不加锁的情况下备份Innodb数据表,不过此工具不能操作MyiSAM引擎表

②innobackupex是一个脚本封装,封装了xtrabackup,能同时处理Innodb和MyISAM,但在处理MyISAM时需要加一个读锁。

1.     准备工作

由于mysql版本号不同可能导致备份不成功,一次请尽量使用最新的版本,最新的版本会兼容旧版本。

xtrabackup版本:xtrabackup version 2.2.11 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

mysql版本:Server version: 5.5.5-10.0.15-MariaDB MariaDB Server

xtrabakcup官网下载地址:

mariadb官网下载地址:

2.    安装xtrabakcup包

安装xtrabackup需要的依赖包:

yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl perl-devel

安装xtrabakcup:

rpm -ivh percona-xtrabackup-2.2.11-1.el6.x86_64.rpm

一、 全库备份和还原

1.1    全库备份

innobackupex --defaults-file=/data/my.cnf  --user=root --password=Xushaojie  /backup/ --socket=/data/mysql/mysql.sock

看到innobackupex: completed OK! 表示成功.

1.2    全库恢复

①应用日志

innobackupex --defaults-file=/data/my.cnf  --apply-log /backup/2016-07-12_12-29-28/

看到innobackupex: completed OK! 表示成功.

②拷贝文件

innobackupex --defaults-file=/data/my.cnf  --copy-back /backup/2016-07-12_12-29-28/

③修改文件权限

chown -R mysql.mysql /data/

初始化mysql

./mysql_install_db --basedir=/data/mysql/ --no-defaults --skip-name-resolve --user=mysql  --datadir = /data/mysql/

或者启动的时候mysqld_safe --user=mysql --datadir=/data/mysql/ &

二、 增量备份和还原

1.1    增量备份  第1次

nnobackupex --defaults-file=/data/my.cnf  --user=root  --password=Xushaojie --incremental --incremental-basedir=/backup/2016-07-12_12-29-28  /backup/add/ --socket=/data/mysql/mysql.sock

增量备份要基于上面的全库备份目录进行。

*****************中间插入测试数据**************************

新建测试库

mysql> create database cisco_list;

Query OK, 1 row affected (0.00 sec)

新建测试表

mysql> use cisco_list;

Database changed

mysql>create table `cisco`(name varchar(20),module varchar(20) not null,price int(8));

Query OK, 0 rows affected (0.02 sec)

插入测试数据,后面恢复后可以看到这3条数据。

mysql>insert into cisco values('Cisco 2811','Cisco 2800',5800);

Query OK, 1 row affected (0.00 sec)

mysql>insert into cisco values('Cisco 2960-s','Cisco 2900',12800);

Query OK, 1 row affected (0.00 sec)

mysql>insert into cisco values('Cisco 3560-ws','Cisco 3500',22400);

Query OK, 1 row affected (0.00 sec)

查看数据

mysql> select * from cisco;

+---------------+------------+-------+

| name          | module     | price |

+---------------+------------+-------+

| Cisco 2811    | Cisco 2800 |  5800 |

| Cisco 2960-s  | Cisco 2900 | 12800 |

| Cisco 3560-ws | Cisco 3500 | 22400 |

+---------------+------------+-------+

3 rows in set (0.00 sec)

*****************中间插入测试数据**************************

1.2    增量备份  第2次

innobackupex --defaults-file=/data/my.cnf  --user=root  --password=Xushaojie--incremental --incremental-basedir=/backup/add/2016-07-12_13-18-20/backup/add/ --socket=/data/mysql/mysql.sock

第1次增量备份作为基础,再次进行第2次增量备份,依次类推

第2次备份的文件路径: /backup/add/2016-07-13_11-55-36

1.3    增量恢复

第一步:全库应用日志

innobackupex --defaults-file=/data/my.cnf  --user=root --apply-log  --redo-only  /backup/2016-07-12_12-29-28

第二步:增量1应用日志

innobackupex --defaults-file=/data/my.cnf  --user=root --apply-log  --redo-only /backup/2016-07-12_12-29-28--incremental-dir=/backup/add/2016-07-12_13-18-20

第三步:增量2应用日志

innobackupex --defaults-file=/data/my.cnf  --user=root --apply-log  --redo-only /backup/2016-07-12_12-29-28--incremental-dir=/backup/add/2016-07-13_11-55-36

第四步:清空datadir

恢复的数据在/data/my.cnf里面定义的datadir目录下,这里我的datadir=/data/mysql

清除数据文件,rm -rf /data/mysql/* (安全起见,也可以移动到其他目录备份起来)

第五步:拷贝还原数据

innobackupex --defaults-file=/data/my.cnf  --copy-back /backup/2016-07-12_12-29-28/

1.4    启动数据库

mysqld_safe  --user=mysql --datadir=/data/mysql &

登录数据库:

#/data/my.cnf里面socket定义的是在/data/mysql/mysql.sock,所以登录mysql也要指定,不能使用默认的。

mysql -S /data/mysql/mysql.sock  -uroot -pXushaojie;

1.5    验证数据

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| backup_test        |

| cisco_list         |

| discuz             |

| mysql              |

| test               |

| wordpress          |

+--------------------+

7 rows in set (0.00 sec)

mysql>use cisco_list;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables;

+----------------------+

| Tables_in_cisco_list |

+----------------------+

| cisco                |

+----------------------+

1 row in set (0.00 sec)

可以看到表里面的数据是之前插入的3条记录,至此,增量数据恢复成功。

mysql>select * from cisco;

+---------------+------------+-------+

| name          | module     | price |

+---------------+------------+-------+

| Cisco 2811    | Cisco 2800 |  5800 |

| Cisco 2960-s  | Cisco 2900 | 12800 |

| Cisco 3560-ws | Cisco 3500 | 22400 |

+---------------+------------+-------+

3 rows in set (0.00 sec)

PS:第一次备份报错不行,发现是mysql版本和xtrabackup版本不对应导致,2.2.11不行,换为2.0.0版本以后就可以使用。

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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值