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

    一.备份与导出的区别

    1.数据导出用于把数据从一个系统迁移到另一个系统
    
    2.数据备份用于保存一个数据库实例的全部信息

    二.备份方式

    1.联机冷备份
    2.联机热备份

    备份时需要注意auto.cnf文件,如果跨主机应用应该区别auto.cnf

    三.整体表碎片文件

     alter table test1 engine = innodb;  

     四.xtrabackup

    1.优势

    1.xtrabackup备份过程加读锁,数据可以读,但是不可以写
    2.xtrabackup备份过程不会打断正在执行的事务
    3.xtrabackup能够基于压缩等功能节约磁盘空间和流量

    2.原理:

    xtrabackup是一种物理备份工具,通过协议连接到mysql服务端,然后读取并复制底层文件,完成物理备份

    xtrabackup支持innodb引擎做全量备份和增量备份

    xtrabackup只能对myisam引擎做全量备份

    3.安装

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
    
    yum install percona-xtrabackup-24

    4.全量热备份

    <1>xtrabackup命令种类

    序号 命令 描述
    1 xbcrypt 用于加密或者解密备份的数据
    2 xbstream 用于压缩或者解压缩xbstream文件
    3 xtrabackup 备份innodb数据表
    4 innobackupex 是上面三种命令的perl脚本封装

    <2>.备份命令

    A.全量热备份命令:

     innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata

    恢复:

    关闭数据库,将数据目录备份移动到其他目录 ,然后执行如下操作:
    innobackupex --apply-log /backdata/2019-01-18_10-23-56/

       innobackupex --defaults-file=/etc/my.cnf --copy-back /backdata/2019-01-18_10-23-56/

       然后将数据目录的权限改为mysql,启动数据库

    B.使用流式压缩备份

    参数如下:
    innobackupex ..... --no-timestamp --stream=xbstream -> /backdata2/bak.xbstream

    示例:
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
    --no-timestamp --stream=xbstream ->/backdata2/backup.xbstream

    恢复:
    关闭数据库,将数据目录移到其他目录,执行如下操作:
    mkdir /justbak
    xbstream -x < /backdata2/backup.xbstream -C /justbak

      innobackupex --apply-log /justbak/
      innobackupex --defaults-file=/etc/my.cnf --copy-back /justbak

      将数据目录的权限改为mysql,然后启动mysql

    C.使用加密备份

    序号 参数 描述
    1 encrypt 用于加密的算法:AES128,AES192,AES256
    2 encrypt-threads 执行加密的线程数
    3 encrypt-chunk-size 加密线程的缓存大小
    4 encrypt-key 密钥字符
    5 encryption-key-file 密钥文件
    命令参数如下:
    innobackupex --encrypt=AES256 --encrypt-threads=10 --encrypt-key=....... --encrypt-chunk-size 521 .....

    示例:
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
    --encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512
    --no-timestamp --stream=xbstream -> /backdata3/backup1.xbstream

    恢复:
    关闭数据库,将数据目录移到其他目录,执行如下操作:

     mkdir /justbak
     xbstream -x < /backdata3/backup1.xbstream -C /justbak
     innobackupex --decompress --decrypt=AES256 --encrypt-key=111111111111111111111111 /justbak

     innobackupex --apply-log /justbak/
     innobackupex --defaults-file=/etc/my.cnf --copy-back /justbak

    将数据目录的权限改为mysql,启动mysql

    D.其他参数

    序号 参数 描述
    1 compress 压缩innodb数据文件
    2 compress-threads 执行压缩的线程数
    3 compress-chunk-size 压缩线程的缓存
    4 include 需要备份的数据表的正则表达式
    5 galera-info 备份pxc节点状态文件
    命令参数如下:
     innobackupex .... --compress --compress-threads=10 --include=test1.t1,test1.t2 --galera-info ....

    示例:
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 
    --encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512 
    --compress --compress-threads=10 --include=test1.t1,test.t1 --galera-info
    --no-timestamp --stream=xbstream ->/backdata4/b.xbstream

    E.通过脚本自动备份

    #!/bin/bash
    time=$(date "+%Y-%m-%d %H:%M:%S")
    echo "执行全量热备份"
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 --encrypt=AES256 --encrypt-threads=10 --encrypt-key=111111111111111111111111 --encrypt-chunk-size 512 --no-timestamp --stream=xbstream -> /backdata5/backup1.xbstream

    <3>.恢复命令

    恢复前准备工作

    1.关闭mysql,清空数据目录,包括表分区的目录
    2.回滚没有提交的事务,同步已经提交的事务到数据文件

     5.增量备份

    1.无论全量热备份使用了流式压缩,还是内容加密,都必须解密解压缩成普通全量热备份
    
    2.增量热备份可以使用流式压缩或者内容加密

    例子:

    首先备份

    1.首先全备
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306 /backdata

    2.首次增备
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456 --port=3306
    --incremental-basedir=/backdata/2019-01-21_11-36-02/ --incremental /inc

    3.第二次增备
    innobackupex --defaults-file=/etc/my.cnf --host=192.168.192.135 --user=root --password=123456
    --incremental-basedir=/inc/2019-01-21_11-42-32/ --incremental /inc/

    然后恢复:

    处理事务日志
    1.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/

    2.innobackupex --apply-log --redo-only /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-42-32/

    3.innobackupex --apply-log /backdata/2019-01-21_11-36-02/ --incremental-dir=/inc/2019-01-21_11-46-18/

    4.关闭数据库,并移动数据目录到其他目录

    5.还原
    innobackupex --defaults-file=/etc/my.cnf --copy-back /backdata/2019-01-21_11-36-02

    6.将数据目录文件权限改为mysql,重启数据库
  • 相关阅读:
    JavaScript学习笔记之数组(一)
    Ajax与CORS通信
    JSONP跨域
    JavaScript原型与原型链
    CSS布局套路
    爱奇艺的自制节目
    2019.3.6错误经验
    Kickdown UVA
    ASP.NET Web
    C# Windows
  • 原文地址:https://www.cnblogs.com/hbxZJ/p/10281978.html
Copyright © 2011-2022 走看看