设为首页 收藏本站
查看: 468|回复: 0

[经验分享] 使用innobackupex在线增量备份及恢复mysql数据库

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-11 17:26:37 | 显示全部楼层 |阅读模式
  这几天一直在研究mysql备份这一块,前几天由于手误对线上生产数据库造成误操作,虽然没有太大影响,但是为了把风险度降到最低,因此最近一直在倒腾mysql的在线热备份,在线热备份有免费开源的,也收费的产品,在这里我们值讨论免费的产品,支持热备的的软件mysqlLVM以及接下来的这款Xtrabackup;Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表,本文将介绍如何用innobackupex工具做全量和增量备份。
一、安装解压
1.安装数据库
1
2
3
官网:http://www.percona.com
下载地址:http://www.percona.com/redir/dow ... up-2.0.8-587.tar.gz
yum -y install mysql mysql-libs mysql-server MySQL-python



2.创建数据库
1
2
3
4
5
6
7
8
9
create database dotatest;
mysql -uroot -p dotatest > zhan_data.sql
python mysql_update.py --host localhost --user root --passwd "" --db dotatest
use dotatest;
show tables;
desc item;
insert into item (player, item, count) values (1, 1, 1 );    插入一条数据
insert into item (player, item, count) values (2, 2, 2 );
select * from item;



3.安装依赖包(如果安装新版本需要安装)
1
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel libgcrypt libgcrypt-devel perl-Time-HiRes



4.解压安装

1
2
3
4
5
6
7
8
9
10
[iyunv@localhost home]# tar xf percona-xtrabackup-2.0.8-587.tar.gz
[iyunv@localhost home]# mysql --version
mysql  Ver 14.14 Distrib 5.1.61, for redhat-linux-gnu (x86_64) using readline 5.1
[iyunv@localhost percona-xtrabackup-2.0.8]# pwd
/home/percona-xtrabackup-2.0.8
[iyunv@localhost percona-xtrabackup-2.0.8]# cp bin/
innobackupex        xbstream            xtrabackup_51       xtrabackup_56     
innobackupex-1.5.1  xtrabackup          xtrabackup_55     
[iyunv@localhost percona-xtrabackup-2.0.8]# cp bin/innobackupex /usr/bin/
[iyunv@localhost percona-xtrabackup-2.0.8]# cp bin/xtrabackup* /usr/bin/



二、常规备份文件以及对单个数据库备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
备份全部数据库
[iyunv@localhost /]# mkdir /home/data/backup/
[iyunv@localhost /]# innobackupex --defaults-file=/etc/my.cnf --user=root  /home/data/backup/
--defaults-file 指定mysql的配置文件
--user 指定用户
/home/data/backup/ 备份文件的路径
需要注意的是 如果不指定--defaults-file 默认会读取/etc/my.cnf。如果你的配置文件是自定义的,那么一定要指定目录,然后会在目录下创建一个时间戳的目录(我们本次创建的/home/data/backup/2014-03-11_11-08-23)
查看备份是否成功
[iyunv@localhost /]# cd /home/data/backup/2014-03-11_11-08-23/
[iyunv@localhost 2014-03-11_11-08-23]# pwd
/home/data/backup/2014-03-11_11-08-23
[iyunv@localhost 2014-03-11_11-08-23]# ls
backup-my.cnf  ibdata1  test               xtrabackup_binlog_info  xtrabackup_logfile
dotatest       mysql    xtrabackup_binary  xtrabackup_checkpoints  zabbix
[iyunv@localhost 2014-03-11_11-08-23]#
只针对一个数据库备份
--database 是指定需要备份的数据库
[iyunv@localhost ~]# innobackupex --user=root  --defaults-file=/etc/my.cnf --database=dotatest  /home/data/backup/



三、常规恢复数据库
恢复之前先停止数据库,并且要删除数据和日志文件
1
2
3
4
01.首先停止数据库
[iyunv@localhost 2014-03-11_16-52-44]# /etc/rc.d/init.d/mysqld stop
Stopping mysqld:                                           [  OK  ]
[iyunv@localhost 2014-03-11_16-52-44]#



1
2
3
4
5
6
7
8
9
02.备份删除mysql文件
[iyunv@localhost lib]# cp -a mysql/ mysql.bak
[iyunv@localhost lib]# ls
alternatives  dav   dhclient  games             misc     mysql      nfs  plymouth  postfix  random-seed  rpm      stateles
authconfig    dbus  fprint    logrotate.status  mlocate  mysql.bak  ntp  polkit-1  prelink  readahead    rsyslog  udev
[iyunv@localhost lib]# cd mysql
[iyunv@localhost mysql]# ls
dotatest  ibdata1  ib_logfile0  ib_logfile1  mysql  test  zabbix
[iyunv@localhost mysql]# rm -rf *



03.来恢复文件
恢复文件分两步,
第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/backup/mysql/data/2013-10-29_09-05-25下的备份文件已经准备就绪。
因为我们的文件比较少,因此我们不需要设置--user-memory产数文件
第2步是copy-back,即把备份文件拷贝至原数据目录下。
1
2
[iyunv@localhost mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root  --apply-log /home/data/backup/2014-03-11_16-52-44/
[iyunv@localhost mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /home/data/backup/2014-03-11_16-52-44/



04.修改权限 启动服务
[iyunv@localhost lib]# chown mysql:mysql /var/lib/mysql/ -R
[iyunv@localhost lib]# /etc/rc.d/init.d/mysqld start
Starting mysqld:                                           [  OK  ]
[iyunv@localhost lib]#

四、配置增量备份
增量备份及其恢复
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。
01.首先在数据库插入一条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
mysql> use dotatest;
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> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
|  1 |      1 |    1 |     1 |
|  2 |      2 |    2 |     2 |
+----+--------+------+-------+
2 rows in set (0.00 sec)
mysql> insert into item (player, item, count) values (3, 3, 3 );
Query OK, 1 row affected (0.00 sec)
mysql> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
|  1 |      1 |    1 |     1 |
|  2 |      2 |    2 |     2 |
|  3 |      3 |    3 |     3 |
+----+--------+------+-------+
3 rows in set (0.00 sec)
mysql>



02.增量备份是基于一个数据库的全部备份文件的,在刚才我们备份了一个全备份,我们现在的增量备份就基于刚才的全部备份来做(2014-03-11_16-52-44)
需要注意如下两个参数:
--incremental-basedir指向全备目录;
--incremental指向增量备份的目录;
1
2
3
4
5
[iyunv@localhost backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/data/backup/2014-03-11_16-52-44/ --incremental /home/data/backup/
……略……
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_17-33-57'
innobackupex: MySQL binlog position: filename '', position
140311 17:34:16  innobackupex: completed OK!



03.查看是否有备份文件,最新的配置文件就是我们刚才的增量备份文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[iyunv@localhost backup]# pwd
/home/data/backup
[iyunv@localhost backup]# ls
2014-03-11_16-52-44  2014-03-11_17-33-57
[iyunv@localhost backup]#
在如下的文件中我们可以发现增量备份的文件from_lsn刚好等于全部备份的to_lsn
[iyunv@localhost 2014-03-11_17-33-57]# cat xtrabackup_checkpoints    增量备份文件
backup_type = incremental
from_lsn = 657645
to_lsn = 659090
last_lsn = 659090  
[iyunv@localhost 2014-03-11_17-33-57]# cat ../2014-03-11_16-52-44/xtrabackup_checkpoints     全局备份
backup_type = full-prepared
from_lsn = 0
to_lsn = 657645
last_lsn = 657645
[iyunv@localhost 2014-03-11_17-33-57]#



五、在增量备份的基础上再做增量备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
在备份之前我们在item表中再插入数据
mysql> insert into item (player, item, count) values (4, 4, 4 );
Query OK, 1 row affected (0.03 sec)
mysql> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
|  1 |      1 |    1 |     1 |
|  2 |      2 |    2 |     2 |
|  3 |      3 |    3 |     3 |
|  4 |      4 |    4 |     4 |
+----+--------+------+-------+
4 rows in set (0.00 sec)
mysql>



在增量备份的基础上再做增量备份,我们需要添加如下参数
--incremental-basedir执行上一次增量备份的目录
1
2
3
4
5
6
7
8
9
如下备份:
[iyunv@localhost 2014-03-11_17-33-57]# innobackupex --defaults-file=/etc/my.cnf --user=root --incremental-basedir=/home/data/backup/2014-03-11_17-33-57/ --incremental /home/data/backup/
………中间部分略………
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_18-03-54'
innobackupex: MySQL binlog position: filename '', position
140311 18:04:13  innobackupex: completed OK!
innobackupex: Backup created in directory '/home/data/backup/2014-03-11_18-10-13'
innobackupex: MySQL binlog position: filename '', position
140311 18:10:31  innobackupex: completed OK!



然后来查看lsn号来:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@localhost 2014-03-11_18-10-13]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 659090
to_lsn = 659214
last_lsn = 659090
[iyunv@localhost 2014-03-11_18-10-13]# cat ../2014-03-11_17-33-57/
backup-my.cnf           ibdata1.meta            xtrabackup_binary       xtrabackup_logfile   
dotatest/               mysql/                  xtrabackup_binlog_info  zabbix/               
ibdata1.delta           test/                   xtrabackup_checkpoints
[iyunv@localhost 2014-03-11_18-10-13]# cat ../2014-03-11_17-33-57/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 657645
to_lsn = 659090
last_lsn = 659090
[iyunv@localhost 2014-03-11_18-10-13]#



六、恢复增量数据库
1
2
3
4
5
6
7
8
9
停止数据库
[iyunv@localhost backup]# /etc/rc.d/init.d/mysqld stop
Stopping mysqld:                                           [  OK  ]
[iyunv@localhost backup]#
备份数据库
[iyunv@localhost lib]# mv mysql mysql.bak.2
[iyunv@localhost lib]# pwd
/var/lib
[iyunv@localhost lib]#



这个恢复比恢复全部备份稍微复杂点,接下来我们来恢复,如果有多个增量备份,需要叠加就可以
1
2
3
innobackupex --apply-log --redo-only BASE-DIR   BASE-DIR指完整的全部备份目录
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1           INCREMENTAL-DIR-1指第一次增量备份的目录
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2                       BASE-DIR指完整的全部备份目录 INCREMENTAL-DIR-2第二次增量备份的目录



01.在我们的环境中我们来执行如下操作,因为我们只有两次的增量备份如下即可:
1
2
3
innobackupex --apply-log --redo-only /home/data/backup/2014-03-11_16-52-44/
innobackupex --apply-log --redo-only /home/data/backup/2014-03-11_16-52-44 --incremental-dir=/home/data/backup/2014-03-11_17-33-57/
innobackupex --apply-log /home/data/backup/2014-03-11_16-52-44/ --incremental-dir=/home/data/backup/2014-03-11_18-10-13/



02.回滚未完成的日志(需要注意的是恢复的时候,我们只恢复全备份文件就可以了)
1
2
innobackupex --apply-log /home/data/backup/2014-03-11_16-52-44/
innobackupex --copy-back /home/data/backup/2014-03-11_16-52-44/



03.授权启动
1
2
3
4
[iyunv@localhost lib]# chown mysql:mysql /var/lib/mysql -R
[iyunv@localhost lib]# /etc/rc.d/init.d/mysqld start
Starting mysqld:                                           [  OK  ]
[iyunv@localhost lib]#



04.检查备份是否回来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> use dotatest;
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> select * from item;
+----+--------+------+-------+
| id | player | item | count |
+----+--------+------+-------+
|  1 |      1 |    1 |     1 |
|  2 |      2 |    2 |     2 |
|  3 |      3 |    3 |     3 |
|  4 |      4 |    4 |     4 |
+----+--------+------+-------+
4 rows in set (0.00 sec)
mysql>



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-42390-1-1.html 上篇帖子: MySQL备份与恢复之percona-xtrabackup实现增量备份及恢复 下篇帖子: xtraBackup备份原理剖析 数据库 mysql 在线
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表