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

[经验分享] MySQL备份与恢复之percona-xtrabackup实现增量备份及恢复

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-11 17:26:12 | 显示全部楼层 |阅读模式
一 文章回顾在上一篇文章,我们讲到percona-xtrabackup软件的使用,这一篇文章我们讲解percona-xtrabackup实现增量备份及恢复。

二 增量备份示意图
SouthEast.jpg


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


四 percona-xtrabackup实现增量备份及恢复第一步,全备

    [iyunv@serv01 databackup]# innobackupex --user=root --password=123456 /databackup/



第二步,查看数据

    mysql> use larrydb;
    Database changed
    mysql> select * from class;
    +------+-------+
    | cid  | cname |
    +------+-------+
    |    1 | linux |
    |    2 | dab   |
    |    3 | Devel |
    +------+-------+
    3 rows in set (0.00 sec)

    mysql> select * from stu;
    +------+----------+------+
    | sid  | sname    | cid  |
    +------+----------+------+
    |    1 | larry007 |    1 |
    +------+----------+------+
    1 row in set (0.00 sec)



第三步,更新数据

    mysql> insert into stu values(2,'larry02',1);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from stu;
    +------+----------+------+
    | sid  | sname    | cid  |
    +------+----------+------+
    |    1 | larry007 |    1 |
    |    2 | larry02  |    1 |
    +------+----------+------+
    2 rows in set (0.00 sec)


第四步,增量备份,进行了全备和第一次增量备份,所以有两个备份文件夹。我们每次增量备份都是针对上一次备份。

    #--incremental:增量备份的文件夹
    #--incremental-dir:针对哪个做增量备份
    [iyunv@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-12-50/

    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Inc 2009-2012.  All Rights Reserved.
    ……
    innobackupex: Backup created in directory '/databackup/2013-09-10_22-15-45'
    innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position 353
    130910 22:16:04  innobackupex: completed OK!

    [iyunv@serv01 databackup]# ll
    total 8
    drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
    drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45


第五步,再次插入数据

    mysql> insert into stu values(3,'larry03',1);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from stu;
    +------+----------+------+
    | sid  | sname    | cid  |
    +------+----------+------+
    |    1 | larry007 |    1 |
    |    2 | larry02  |    1 |
    |    3 | larry03  |    1 |
    +------+----------+------+
    3 rows in set (0.00 sec)



第六步,再次增量备份

    [iyunv@serv01 databackup]# ll
    total 8
    drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
    drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
    [iyunv@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-15-45/



第七步,再次插入数据

    mysql> insert into stu values(4,'larry04',1);
    Query OK, 1 row affected (0.00 sec)

    mysql> select * from stu;
    +------+----------+------+
    | sid  | sname    | cid  |
    +------+----------+------+
    |    1 | larry007 |    1 |
    |    2 | larry02  |    1 |
    |    3 | larry03  |    1 |
    |    4 | larry04  |    1 |
    +------+----------+------+
    4 rows in set (0.00 sec)



第八步,再次增量备份。一次全备,三次增量备份,所以有四个备份文件夹

    [iyunv@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-19-21/


    [iyunv@serv01 databackup]# ll
    total 16
    drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
    drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
    drwxr-xr-x. 9 root root 4096 Sep 10 22:19 2013-09-10_22-19-21
    drwxr-xr-x. 9 root root 4096 Sep 10 22:22 2013-09-10_22-21-42


第九步,模拟数据丢失

    mysql> drop database larrydb;
    Query OK, 2 rows affected (0.02 sec)



第十步,对全部的数据进行检查。可以看到增量备份和全备的文件占用磁盘大小有很大的差别,显然全备占用磁盘空间多,增量备份占用磁盘空间少

    [iyunv@serv01 databackup]# innobackupex --apply-log --redo-only /databackup/2013-09-10_22-12-50/

    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Inc 2009-2012.  All Rights Reserved.
    ……
    xtrabackup: starting shutdown with innodb_fast_shutdown = 1
    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!

    [iyunv@serv01 databackup]# du -sh ./*
    22M ./2013-09-10_22-12-50
    1.5M  ./2013-09-10_22-15-45
    1.5M  ./2013-09-10_22-19-21
    1.5M  ./2013-09-10_22-21-42



第十一步,对第一次做的增量备份数据进行合并到全备份中去

    [iyunv@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-15-45/

    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Inc 2009-2012.  All Rights Reserved.
    ……
    innobackupex: Copying '/databackup/2013-09-10_22-15-45/hello/db.opt' to '/databackup/2013-09-10_22-12-50/hello/db.opt'
    130910 22:32:26  innobackupex: completed OK!



第十二步,对第二次做的增量备份数据进行合并到全备份中去

    [iyunv@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-19-21/



第十三步,对第三次做的增量备份数据进行合并到全备份中去

    [iyunv@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-21-42/



第十四步,恢复时需要停掉MySQL,所以我们停掉MySQL

    [iyunv@serv01 databackup]# /etc/init.d/mysqld stop
     ERROR! MySQL server PID file could not be found!
    [iyunv@serv01 databackup]# pkill -9 mysql



第十五步,恢复数据。注意这里指定的文件夹是2013-09-10_22-12-50

    [iyunv@serv01 databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

    InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
    and Percona Inc 2009-2012.  All Rights Reserved.

    This software is published under
    the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

    IMPORTANT: Please check that the copy-back run completes successfully.
               At the end of a successful copy-back run innobackupex
               prints "completed OK!".

    Original data directory is not empty! at /usr/bin/innobackupex line 571.

    #报以上错需要删除数据目录下的东西
    [iyunv@serv01 data]# pwd
    /usr/local/mysql/data
    [iyunv@serv01 data]# ls
    game     ib_logfile0  mysql             mysql-bin.000003  performance_schema   test
    hello    ib_logfile1  mysql-bin.000001  mysql-bin.000004  serv01.host.com.err  xtrabackup_binlog_pos_innodb
    ibdata1  mnt          mysql-bin.000002  mysql-bin.index   serv01.host.com.pid

    [iyunv@serv01 data]# rm -rf  *

    #再次恢复数据,并更改数据库数据目录的拥有者和所属组
    [iyunv@serv01 databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

    [iyunv@serv01 data]# ll
    total 18464
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 game
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 hello
    -rw-r-----. 1 root root 18874368 Sep 10 22:33 ibdata1
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 larrydb
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mnt
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mysql
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 performance_schema
    drwxr-xr-x. 2 root root     4096 Sep 10 22:37 test
    -rw-r--r--. 1 root root       24 Sep 10 22:37 xtrabackup_binlog_pos_innodb
      
    [iyunv@serv01 data]# chown mysql.mysql /usr/local/mysql/data/ -R



第十六步,启动服务

    [iyunv@serv01 data]# /etc/init.d/mysqld start
    Starting MySQL.. SUCCESS!



第十七步,登录数据库,然后查看数据

    [iyunv@serv01 data]# mysql -uroot -p123456
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | game               |
    | hello              |
    | larrydb            |
    | mnt                |
    | mysql              |
    | performance_schema |
    | test               |
    +--------------------+
    8 rows in set (0.00 sec)

    mysql> select * from larrydb.class;
    +------+-------+
    | cid  | cname |
    +------+-------+
    |    1 | linux |
    |    2 | dab   |
    |    3 | Devel |
    +------+-------+
    3 rows in set (0.00 sec)

    mysql> select * from larrydb.stu;
    +------+----------+------+
    | sid  | sname    | cid  |
    +------+----------+------+
    |    1 | larry007 |    1 |
    |    2 | larry02  |    1 |
    |    3 | larry03  |    1 |
    |    4 | larry04  |    1 |
    +------+----------+------+
    4 rows in set (0.00 sec)





运维网声明 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-42389-1-1.html 上篇帖子: MySQL备份与恢复之percona-xtrabackup软件的使用 下篇帖子: 使用innobackupex在线增量备份及恢复mysql数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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