zoukankan      html  css  js  c++  java
  • 数据备份与恢复

    一、mysqldump备份

    mysqldump 备份数据会丢失掉从备份点开始的数据,所以需要结合mysqlbinlog的二进制日志增量备份恢复。

    【常用的选项】

    --all-databases :导出全部数据库。
    --add-drop-table :每个数据表创建之前添加drop删表语句,防止恢复时冲突。 (all-databases默认包含)
    --add-locks :每个表导出之前增加增加lock tables 之后unlock tables。这就防止在导入数据时,其他用户会对表进行操作。(all-databases默认包含)

    --databases:导出多个数据库,参数后的所有名字都被看作数据库名。

    全库备份:

    mysqldump -h localhost -uroot -p123456 --all-databases >/tmp/qk.sql

    多库备份:

    mysqldump -h localhost -uroot -p123456 --databases databases1  databases2 >/tmp/dk.sql

    单库备份:

    #也可以省略--databases 来备份单个库,不过省略后导致的是备份文件名中没有 建表与use语句,所以在恢复时,必须制定一个默认的数据库名,即可以导入任意数据库。
    mysqldump -h localhost -uroot -p123456 database >/tmp/dk.sql

    备份库中的多个表:

    mysqldump  -h localhost -uroot -p123456 表名1 表名2 > /tmp/table.sql

    2.)mysqldump恢复:

    启用*databases选项的恢复:

    mysql -uroot -p123456  < /tmp/qk.sql
    mysql>  source /tmp/qk.sql

    普通的单库备份:

    mysql -uroot -p123456  database1 < /tmp/dk.sql
    mysql>  use database1;source /tmp/dk.sql

    二、Percona Xtrabackup/innobackupex 的备份与恢复

    InnoDB 有个商业的InnoDB Hotbackup,可以对InnoDB引擎的表实现在线热备。而 percona出品的Xtrabackup,是InnoDB Hotbackup的一个开源替代品,可以在线对InnoDB/XtraDB引擎的表进行物理备份,效率很不错。

    作用;在线(热)备份整个库的InnoDB、 XtraDB表或增量备份,可以在线对InnoDB/XtraDB引擎的表进行物理备份。

    增量备份,工作原理如下:
    1.首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。
    2.在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。

    1.安装Xtrabackup

    安装依赖的包:yum install perl-DBI  perl-DBD-MySQL  perl-Time-HiRes perl-IO-Socket-SSL installperl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
    
    rpm  -ivh   https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm

    或者
    配置好yum源,直接yum安装下载好的rpm包,可以自动安装依赖。

    wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/Centos-7.repo
    
    yum -y install percona-xtrabackup-24-2.4.7-2.el7.x86_64.rpm

    2.备份

    创建备份目录:mkdir       /opt/backups/full     /opt/backups/inc

    2.1)进行数据库全备:

    innobackupex   --defaults-file=/etc/my.cnf   --user=root   --password=123456    --socket=/tmp/mysql.sock    /opt/backups/full

    压缩备份:

    innobackupex   --defaults-file=/etc/my.cnf   --user=root   --password=123456    --socket=/tmp/mysql.sock   /opt/backups/full/  --stream=tar | gzip > /opt/backups/full/a.tar.gz

    2.2)增量备份:(增量备份的前提是一定要有一个全备)

    插入数据,或更改之后,进行增量备份:

    innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 --socket=/tmp/mysql.sock --incremental /opt/backups/inc --incremental-basedir=/opt/backups/full/2017-10-11_16-02-21 --parallel=2

    更改第二次,并执行增量备份:

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/tmp/mysql.sock --incremental /opt/backups/inc --incremental-basedir=/opt/backups/inc/2017-10-11_17-12-58 --parallel=2

    每次更改后执行的增量备份都是基于上个时间点的增量备份,备份完成后后提示171012 11:00:03 completed OK!并且备份目录中有相应文件即可。

    3.备份恢复:

    3.1)模拟数据库损坏,全备恢复:

    innobackupex    --apply-log     /opt/backups/full/2017-10-11_16-02-21/  
    innobackupex    --defaults-file=/etc/my.cnf    --copy-back   --rsync   /opt/backups/full/2017-10-11_16-02-21/

    3.2)增量备份恢复:

    1.恢复完全备份
    2.恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)
    3.对整体的完全备份进行恢复,回滚未提交的数据

    准备全备:

    innobackupex    --apply-log    --redo-only    /opt/backups/full/2017-10-11_16-02-21/

    将增量1恢复至全备

    innobackupex     --apply-log   --redo-only    /opt/backups/full/2017-10-11_16-02-21     --incremental-dir=/opt/backups/inc/2017-10-11_17-12-58/

    将增量2恢复至全备

    innobackupex --apply-log  /opt/backups/full/2017-10-11_16-02-21  --incremental-dir=/opt/backups/inc/2017-10-11_17-26-22

    把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据

    注意:回滚操作不仅仅是用作于增量备份,当在全备时数据库有执行长事务等操作,会造成备份数据的短缺,此时也需要进行回滚操作,否则会因为数据的短缺造成主从的中断。

    innobackupex   --apply-log   backups/full/2017-10-11_16-02-21

    进行全备恢复:

    innobackupex   --defaults-file=/etc/my.cnf   --copy-back   --rsync   /opt/backups/full/2017-10-11_16-02-21/

    ***注意的是***当执行完增量备份恢复后就无法基于前者做增量了,最好是执行完恢复操作后再次进行全备,并在此基础上进行增量。反之
    “xtrabackup: error: The transaction log file is corrupted.
    xtrabackup: error: The log was not applied to the intended LSN!”

  • 相关阅读:
    directUI
    PyLucene测试成功
    MFC笔记(1)CPaintDC, CClientDC
    sprintf缓冲区溢出
    2.5 攻击示例:对Microsoft C++编译器的攻击 ZZ
    C++笔记(3)类中与类外的运算符重载
    C++笔记(2)public,private,protected关键字
    RTSP协议
    使用虚函数,减少累赘的if/else/switch
    C++笔记(4)成员函数定义在类内与类外
  • 原文地址:https://www.cnblogs.com/Confession/p/8117365.html
Copyright © 2011-2022 走看看