zoukankan      html  css  js  c++  java
  • 记一次innobackupex备份恢复数据库过程

    简介:以前备份都是通过mysqldump备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台、版本都很容易。
    凡事有利必有弊,逻辑备份在你数据库比较大时,备份、恢复数据所耗费的时间也是蛮长的,所以要不断改进,可以使用物理备份。
    Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup由个部分组成:xtrabackup和innobackupex,其中xtrabackup工具用于备份innodb和 xtraDB引擎的表;而innobackupex工具用于备份myisam和innodb引擎的表。

    一.工具安装

    [root@danny ~]# yum -y list |grep xtrabackup
    percona-xtrabackup.x86_64               2.3.6-1.el7                     @epel   
    holland-xtrabackup.noarch               1.1.10-1.el7                    epel    
    percona-xtrabackup-test.x86_64          2.3.6-1.el7                     epel    
    [root@danny ~]# yum -y install percona-xtrabackup

    二.全量备份

    #全备
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 /data/
    #该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/data),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。
    备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/data/2019-02-18_13-15-45/),在该目录下存放备份文件。
    
    
    #在/data目录下可看到备份目录如下
    [root@danny data]# ls
    2019-02-18_13-15-45
    
    #查看原mysql库目录和当前备份目录区别
    [root@izm5edykqg8tzid352ga0iz data]# ls /var/lib/mysql.bak/
    auto.cnf                 ibdata1      lfc_oasys    mysql-bin.000009  mysql-bin.index          relay-log.info  sshmall
    binlog_rollback.py       ib_logfile0  lfc_wm       mysql-bin.000010  mysqld-relay-bin.000001  rollback        T1
    diymall                  ib_logfile1  master.info    mysqld-relay-bin.index   rollback.sql    wordpress
    electronicproductssh_db  lfcmall      mysql      mysql-bin.000012  performance_schema       sdbp2
    
    [root@izm5edykqg8tzid352ga0iz data]# ls /data/2019-02-18_13-15-45/
    backup-my.cnf            ibdata1      lfcmall    mysql               sdbp2     wordpress                     xtrabackup_checkpoints
    diymall                  ib_logfile0  lfc_oasys  performance_schema  sshmall  xtrabackup_binlog_info        xtrabackup_info
    electronicproductssh_db  ib_logfile1  lfc_wm     rollback            T1       xtrabackup_binlog_pos_innodb  xtrabackup_logfile

    三.备份恢复

    注:恢复之前,要先关闭数据库,并且删除数据文件和日志文件(本次我直接删除mysql目录下所有文件--有备份),否则恢复时会报错。

    /etc/init.d/mysqld stop
    rm -rf /var/lib/mysql/*
    innobackupex --defaults-files=/etc/my.cnf --user=root --password=123456 --apply-log /data/2019-02-18_13-15-45/
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2019-02-18_13-15-45/

    从上面可以看出,恢复分为两个步骤

    第1步是apply-log,为了加快速度,一般建议设置--use-memory,如:--use-memory=6G,这个步骤完成之后,目录/data/2019-02-18_13-15-45/下的备份文件已经准备就绪。

    注意:准备全备文件的操作只是对备份集(/data/2019-02-18_13-15-45)本身做相关处理,所以在准备恢复前最好对备份集再次备份


    第2步是copy-back,即把备份文件拷贝至原数据目录下。

    注意:恢复完成后一定要检查并修改权限,如下:
    chown -R mysql.mysql /var/lib/mysql
    /etc/init.d/mysqld start

    恢复并重启mysql后目录如下:

    [root@danny data]# ls /var/lib/mysql
    auto.cnf                 ibdata1      lfcmall    mysql             mysql.sock          sp2p     wordpress
    diymall                  ib_logfile0  lfc_oasys  mysql-bin.000001  performance_schema  sshmall  xtrabackup_binlog_pos_innodb
    electronicproductssh_db  ib_logfile1  lfc_wm     mysql-bin.index   rollback            T1       xtrabackup_info

    四.增量备份还原

    备份

    1.先全量备份

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg /data/

    2.第一次增量

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-48-41/ /data/

    3.第二次增量

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=5113041wsdg --incremental --incremental-basedir=/data/2019-02-19_09-53-55/ /data/

    备份目录如下

    [root@danny data]# ls
    2019-02-19_09-48-41     //全量备份
    2019-02-19_09-53-55     //第一次增量
    2019-02-19_09-56-19     //第二次增量

    还原

    1.停止mysql服务器并清空数据目录

    /etc/init.d/mysqld stop
    mv /var/lib/mysql /tmp/

    2.prepare全备

    innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41

    3.prepare第一个增量

    innobackupex --incremental --apply-log --redo-only /data/2019-02-19_09-48-41 --incremental-dir=/data/2019-02-19_09-53-55

    4.prepare第二个增量

    innobackupex --incremental --apply-log /data/2019-02-19_09-48-41 --incremental-dir=/data/2019-02-19_09-56-19    //注意最后一个增量没有--redo-only参数

    此时两次增量备份其实都合并到全备上了,恢复是只需要使用全备进行恢复就可以了

    5.所有整合数据还原

    innobackupex --defaults-file=/etc/my.cnf --copy-back /data/2019-02-19_09-48-41

    6.修改mysql数据目录权限启动服务

    chown -R mysql.mysql /var/lib/mysql
    /etc/init.d/mysqld start

    7.数据验证

    注意:

    1.通过上面三个备份目录里的xtrabackup_checkpoints文件(2019-02-19_09-53-55/xtrabackup_checkpoints),可以看出是哪种备份类型,全量(full-backuped)还是增量(incremental) 并且全量到增量的from_lsn和last_lsn是一一对应的。 

    2.--incremental指明是增量备份,--incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。

  • 相关阅读:
    查看git submodule更改
    /var/lib/docker空间占用过大迁移
    docker -修改容器
    docker重命名镜像repository和tag
    方法的重写、重载。
    方法的声明与使用。
    二维数组。
    标准输入输出流概述和输出语句。
    冒泡排序法。
    IO流,对象操作流优化。
  • 原文地址:https://www.cnblogs.com/dannylinux/p/10395265.html
Copyright © 2011-2022 走看看