精华内容
下载资源
问答
  • 还是已经工作了,想必多多少少都听说过删库跑路、rm -rf的情况,主要指的就是被有意或无意的删除掉了数据库的数据,而数据是整个业务最重要的价值体现,如果你的公司或者项目组没有一个成熟的数据库数据备份方案,...

    【实战背景】

    不管你是正在上学,还是已经工作了,想必多多少少都听说过发生rm -rf删库跑路的情况,主要指的就是被有意无意的删除掉了数据库的数据,而数据是整个业务最重要的价值体现,如果你的公司或者项目组没有一个成熟的数据库数据备份方案,一旦发生意外,我只能说年轻人,大意了吧,没有备份数据库!!!

    数据库备份方案根据实际需要进行定制,一般比较主流的方案是方案一:每周一次全量备份+每天一次增量备份,主要是为了节省MySQL数据库服务器的空间(省钱),当然如果老板比较有钱,光是MySQL服务器的空间就有几千个G,空间大,比较任性的,直接方案二:每天做一次全量备份也可以~

    本文主要介绍基于Xtrabackup实现MySQL数据库的全量备份+增量备份方案~

    很细,建议先点⭐收藏,预防走丢❤️‍,进入正文~

    一、Xtrabackup介绍

    官方介绍文档
    在这里插入图片描述

    简单总结下来就是XtraBackupPercona旗下的一款产品,支持MySQL数据库的热备份(在线不停机),并且是免费开源,适用所有MySQL版本非阻塞紧密压缩高度安全~

    在这里插入图片描述
    心动就先点一下⭐收藏呗! 哈哈哈,回归正题,进入实战演练~

    二、Xtrabackup安装

    2.1 版本说明

    (1)Percona XtraBackup 2.4版本,支持 MySQL 5.1 [1]、5.5、5.6 和 5.7服务器上的InnoDB数据库备份,但不支持MySQL 8.0 数据库备份。
    (2)Percona XtraBackup8.0版本,仅支持MySQL 8.0服务器上存储引擎为InnoDB的数据库备份,但不支持在MySQL 8.0之前版本的数据库备份~

    Percona XtraBackup 8.0 官方文档
    在这里插入图片描述
    Percona XtraBackup 2.4 官方文档
    在这里插入图片描述

    2.2 资源准备

    2.2.1 查看操作系统

    查看服务器 lsb_release -a
    在这里插入图片描述
    我的操作系统信息是Linux CentOS 7.7.1908 位数64,那么我后面我需要下载对应的相关安装包~

    2.2.2 查看MySQL版本号

    方式一:Linux终端命令行
    mysql -V
    在这里插入图片描述

    方式二:MySQL终端命令行
    mysql> select version();
    在这里插入图片描述
    根据前面【版本说明】提到的MySQL5.7应该选择的是Percona XtraBackup 2.4相关版本~

    2.2.3 资源下载

    这里我个人操作系统环境对应安装的资源及版本如下:

    XtraBackup其他版本官方下载 https://www.percona.com/downloads/

    XtraBackup 8.0
    XtraBackup 2.4
    在这里插入图片描述
    在这里插入图片描述

    (1)问题:
    有同学问,你为啥下载的是rpm包,我选择的却是tar.gz安装包?而且你为啥不直接在服务器通过wget +资源url在线下载呢?简单又省事~
    (2)回答:
    首先下载什么包,这个跟你选择的操作系统有关,选择Linux-Generic是通用版本的,对应tar.gz包,我选择的是CentOS7,对应rpm安装包~
    其次下载好rpm的安装包后,再进行离线安装这种方式,我个人觉得比较稳妥,因为实际生产环境很多都是内网,无法直接在线下载安装,因此需要提前下载好离线安装包,再上传到服务器,进行安装~
    在这里插入图片描述

    2.2.4 资源上传

    按实际需要,创建存放安装资源的目录~

    mkdir -p /opt/mysql/xtrabackup
    cd /opt/mysql/xtrabackup
    

    2.3 开始安装

    2.3.1 安装xtrabackup

    先查看是否已安装~

    rpm -qa |grep xtrabackup
    

    若没有任何提示信息,说明未安装,再使用root用户进行操作安装~

    cd /opt/mysql/xtrabackup
    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    提示如下,表明安装成功~
    在这里插入图片描述

    2.3.2 安装libv

    libvxtrabackup的依赖包,如果使用yum命令已经正常安装Xtrabackup,这步可以跳过~

    但是有的小伙伴可能没有使用yum命令安装Xtrabackup:

    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    而是使用了rpm命令进行安装Xtrabackup:

    rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    PS:yumrpm最大的区别就是通过yum命令安装缺失包时,会自动去加载需要的包,而通过rpm命令安装缺失包时,不会自动去加载缺失的包,而是直接报错~

    所以当使用rpm命令安装xtrabackup时,此时安装xtrabackup需要依赖libev,如果libev没安装,则会安装失败,报错关键信息如下:
    libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.19-1.el7.x86_64

    这种情况就需要下载对应版本的依赖包libev进行安装,再继续安装xtrabackup~

    (1)下载libev包
    推荐比较靠谱的rpm包下载地址:http://rpm.pbone.net/
    在这里插入图片描述
    根据我的操作系统及操作系统版本号(CentOS 7.7.1908 位数x64)对应的libevrpm安装包版本是 libev-4.04-2.el5.x86_64.rpm~
    在这里插入图片描述

    另外两个也挺靠谱的rpm包下载地址:
    https://pkgs.org/search/?q=libev
    https://rpmfind.net/linux/rpm2html/search.php?query=libev

    (2)查看是否已安装libev~

    rpm -qa |grep libev
    

    若没有任何提示信息,说明未安装,再使用root用户进行操作安装~

    cd /opt/mysql/xtrabackup
    rpm -ivh libev-4.15-7.el7.x86_64.rpm
    

    再使用rpm命令进行安装Xtrabackup:

    rpm -ivh percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    安装成功,提示如下信息:
    在这里插入图片描述
    不过还是更推荐大家使用yum命令进行安装Xtrabackup:

    yum -y localinstall percona-xtrabackup-24-2.4.19-1.el7.x86_64.rpm
    

    2.3.3 卸载重装

    如果想要重装libevxtrabackup,需要先卸载原来安装的,不需要卸载这步可以忽略~

    (1)查询

    rpm -qa |grep libev
    rpm -qa |grep xtrabackup
    

    (2)卸载

    yum -y remove libev
    yum -y remove percona-xtrabackup
    

    (3)再次查询

    rpm -qa |grep libev
    rpm -qa |grep xtrabackup
    

    2.3.3 安装qpress

    需要使用root用户操作安装qpressqpress主要用于xtrabackup备份数据库时对数据文件进行压缩(压缩文件后缀.qp)以及还原数据库时再对压缩数据文件(后缀.qp)进行解压,大大节省存储空间,当然如果老板非常有钱,服务器空间超大,不需要进行压缩的可以忽略~

    安装过程

    cd /opt/mysql/xtrabackup
    tar -xvf qpress-11-linux-x64.tar
    mv qpress /usr/bin
    chmod 755 /usr/bin/qpress
    

    三、MySQL开启binlog日志

    3.1 什么是binlog日志?

    简单点的说就是记录了MySQL修改和添加的操作信息,主要用于数据库的主从复制以及备份还原,几乎所有的第三方数据库备份及恢复,都需要依赖于这个binlog日志实现,非常重要!!!
    MySQL的binlog主要有STATEMENTROWMIXED三种模式,比较主流的是ROW模式,建议大家有空可以了解了解~

    3.2 如何开启binlog日志?

    修改MySQL的配置文件vim /etc/my.cnf,设置binlog为开启:

    #=====设置binlog方式1===========
    log_bin=ON
    log_bin_basename=/data/mysqllog/bin-log/mysql-bin
    log_bin_index=/data/mysqllog/bin-log/mysql-bin.index
    
    #=====设置binlog方式2===========
    log_bin=/data/mysqllog/bin-log/mysql-bin
    

    建议使用方式2,比较简洁,相当于方式1的三行配置~

    同样vim /etc/my.cnf设置binlog模式(具体模式按实际需要进行设置):

    #设置binlog模式,ROW表示日志格式为记录每行数据的变化
    binlog_format=ROW
    

    三、Xtrabackup备份及还原命令

    3.1 xtrabackup全量备份命令

    全备命令:

    xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --backup表示备份操作
    --user有权限的备份用户
    --password备份用户密码
    --socketmysql的lock文件
    --compress使用qpress压缩数据文件,文件后缀.qp
    --compress-thread压缩文件线程数(不清楚就不写该参数,使用默认的)
    --parallel并发数(不清楚就不写该参数,使用默认的
    --throttle每秒IO操作的次数(不清楚就不写该参数,使用默认的
    --target-dir备份数据目录

    3.2 xtrabackup增量备份命令

    增备命令

    xtrabackup --defaults-file=/etc/my.cnf --backup --user=bkpuser --password=123456 --socket=/data/mysqldata/mysql.sock --compress --compress-thread --parallel=4 --throttle=400 --target-dir=/data/mysqlbackup/incr --incremental-basedir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --backup表示备份操作
    --user有权限的备份用户
    --password备份用户密码
    --socketmysql的lock文件
    --compress使用qpress压缩数据文件,文件后缀.qp
    --compress-thread压缩文件线程数(不清楚就不写该参数,使用默认的)
    --parallel并发数(不清楚就不写该参数,使用默认的
    --throttle每秒IO操作的次数(不清楚就不写该参数,使用默认的
    --target-dir备份数据目录
    --incremental-basedir备份要基于前面哪个基础备份目录

    3.3 xtrabackup恢复备份命令

    3.3.1 解压数据

    没对数据进行压缩的,这步可以直接跳过~
    如果在备份(全备或增备)时使用了--compress 压缩数据文件,此时的数据文件后缀为.qp,恢复数据库数据时,需要先通过qpress进行解压.qp得到正常的数据文件,再删除原.qp压缩文件~

    for j in $(find /data/mysqlbackup/full -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    for j in $(find /data/mysqlbackup/incr -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    

    3.3.2 预恢复备份

    使用xtrabackup进行恢复数据库数据之前,需要先进行预恢复备份~
    假设数据库备份方案是全量备份+增量备份,那么这个预恢复就分为两步来完成~

    第一步:先进行预恢复全量备份

    xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbackup/full
    

    第二步:再进行预恢复增量备份,合并当前预恢复备份到前一个备份(可能是全量或增量备份)目录,如果有多个增量备份,依次完成所有增量备份的预恢复操作~

    xtrabackup --prepare --target-dir=/data/mysqlbackup/full --incremental-dir=/data/mysqlbackup/incr
    

    参数说明:

    参数说明
    --prepare表示预恢复
    --apply-log-only指定该参数时,表示防止未提交事务的回滚
    --target-dir预恢复目标目录
    --incremental-dir预恢复备份基于上一个备份的目录(全量或增量备份)

    全量+增量预恢复备份,最核心的部分就是 --apply-log-only 参数,可以看下
    增量备份官方文档说明
    在这里插入图片描述
    简单的总结就是预恢复备份时必须要指定 --apply-log-only 参数,用来防止未提交事务的回滚,当预恢复备份到最后一个备份版本时,需要去掉该参数~

    3.3.3 恢复备份数据

    恢复命令

    xtrabackup --defaults-file=/etc/my.cnf  --copy-back --target-dir=/data/mysqlbackup/full
    

    参数说明:

    参数说明
    --defaults-filemysql配置文件全路径
    --copy-back表示恢复操作
    --target-dir要恢复数据的备份目录

    这里需要注意的是--target-dir指定恢复的备份目录,是经过预恢复备份之后~

    四、MySQL数据库备份及还原(完整方案)

    4.1 完整方案介绍

    前面介绍了如何xtrabackup对MySQL进行全量备份增量备份预恢复备份恢复备份的基本命令~
    本文实际上实施整套MySQL数据库备份及还原方案的话,需要通过Shell脚本+定时服务来实现~

    (1)Shell脚本主要用来来编写Xtrabackup的基本命令~

    (2)定时服务主要目的是定时每天执行Shell脚本,完成数据库备份,定时服务方式很多,本文主要介绍Linux自带的Crond定时服务,简单易上手~
    (3)本文采用周日全量备份+非周日增量备份的完整数据库备份方案,需要注意的是数据库的备份方案都是比较严谨的,一般都是定制化好的,该方案要保证每天只有一份备份,如果当天有多份备份,那又需要重新定制备份和恢复的Shell脚本了~

    4.2 数据库备份脚本

    4.2.1 创建目录

    分别规划以下几个目录:

    • 脚本存放目录:mkdir -p /data/mysqlbackup/tools
    • 全量备份主目录:mkdir -p /data/mysqlbackup/full
    • 增量备份主目录:mkdir -p /data/mysqlbackup/incr
    • 备份日志主目录:mkdir -p /data/mysqlbackup/logs

    4.2.2 创建脚本

    mysqlbackup.sh内容如下:

    #!/bin/sh
    #基于XtrabackupMySQL数据库备份脚本,每周日全量备份,其他增量备份
    
    #MySQL配置文件
    mysqlConfig="/data/mysqldata/my.cnf"
    #MySQL的sock文件
    mysqlSocket="/data/mysqldata/mysql.sock"
    #数据库用户
    dbUser="bkpuser"
    #数据库密码
    dbPassword="abc@123456"
    
    #全量备份主目录
    fullBackupPath="/data/mysqlbackup/full"
    #增量备份主目录
    incrBackupPath="/data/mysqlbackup/incr"
    #备份日志主目录及
    logPath="/data/mysqlbackup/logs"
    #备份日志文件名
    logfile="/data/mysqlbackup/logs/backup_$(date +%Y%m%d).log"
    
    #数据库备份保存天数
    SAVE_DAYS=7
    
    #清理备份保存天数之前的数据文件
    find $fullBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf
    find $incrBackupPath -type d -mtime +$SAVE_DAYS |xargs rm -rf
    
    #格式化今天的日期(年月日)
    todayFormat=$(date -d "today" +%Y%m%d)
    #格式化昨天的日期(年月日)
    yesterdayformat=$(date -d "yesterday" +%Y%m%d)
    #格式化昨天的星期标识(0~6表示周日~周六)
    todayWeekFlg=`date -d ${todayFormat} +%w`
    #格式化昨天的日期标识(0~6表示周日~周六)
    yesterdayWeekFlg=`date -d ${yesterdayformat} +%w`
    
    #一、第一次备份
    if [ ! -d $fullBackupPath/$todayFormat ] && [ ! -d $fullBackupPath/$yesterdayformat ] && [ ! -d $incrBackupPath/$todayFormat ] && [ ! -d $incrBackupPath/$yesterdayformat ];then
      #全量备份
      xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
    #二、不是第一次备份
    else
      #2.1 今天是周日
      if [ $todayWeekFlg == "0" ];then
        #全量备份
        xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$fullBackupPath/$todayFormat 2>> ${logfile}
      #2.2 今天不是周日
      else
        #2.2.1 昨天是周日或昨天有全量备份
        if [ $yesterdayWeekFlg == "0" ] || [ -d $fullBackupPath/$yesterdayformat ];then
          #增量备份: 依赖于昨天的全量备份  
          xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$fullBackupPath/$yesterdayformat 2>> ${logfile}
        #2.2.1 昨天不是周日并且昨天也没有全量备份
        else
          #增量备份: 依赖于昨天的增量备份
          xtrabackup --defaults-file=$mysqlConfig --backup --user=$dbUser --password=$dbPassword --socket=$mysqlSocket --compress --target-dir=$incrBackupPath/$todayFormat --incremental-basedir=$incrBackupPath/$yesterdayformat 2>> ${logfile}
        fi
      fi
    fi
    exit 0
    

    4.2.3 执行脚本

    (1)手动修改时间
    生产环境,要通过后面设置的定时服务来执行Shell脚本~
    不过实际开发环境时,一般需要马上验证脚本是否正确,这时可以通过修改Linux操作系统的日期,两个间隔的日期分别手动执行一次备份脚本,模拟按日的数据库备份方案,修改操作时间需谨慎!!!不能修改系统时间的可以当天手动执行一次备份脚本,隔天后再手动执行一次备份脚本进行验证~

    date
    date -s  "2021-08-26 04:00:00"
    date -s  "2021-08-27 04:00:00"
    

    (2)同步网络时间(最后)
    这步仅用于修改Linux操作系统时间后,分别在不同日期下执行完备份脚本后,再将Linux操作系统时间同步为互联网的时间,没修改系统时间的可以忽略~

    yum install -y ntpdate
    ntpdate 0.asia.pool.ntp.org
    hwclock --systohc
    或(指定具体时间)
    date -s  "2021-08-27 04:00:00"
    hwclock --systohc
    

    (3)执行备份脚本

    /bin/sh /data/mysqlbackup/tools/mysqlbackup.sh
    

    (4)查看日志

    tail -f /data/mysqlbackup/logs/backup_20210826.log
    

    备份成功会提示如下:
    在这里插入图片描述

    如果给的权限不够可能会报错:
    210826 21:02:01 Connecting to MySQL server host: localhost, user: bkpuser, password: set, port: 3306, socket: /data/mysqldata/mysql.sock
    Using server version 5.7.29-log
    Error: failed to execute query ‘SHOW ENGINE INNODB STATUS’: 1227 (42000) Access denied; you need (at least one of) the PROCESS privilege(s) for this operation

    说明执行备份的MySQL用户权限不够~

    查看权限

    mysql> select * from mysql.user where user = 'bkpuser' \G;
    

    授权如下权限:

    GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE ON *.* TO `bkpuser`@`localhost`;
    FLUSH PRIVILEGES;
    

    实在不确定啥权限,可以授权所有权限给备份用户也可以:

    GRANT ALL PRIVILEGES ON  *.* TO `bkpuser`@`localhost`;
    FLUSH PRIVILEGES;
    

    4.2.4 配置定时服务

    (1)定时服务作用?

    配置定时服务主要目的是定时每天执行Shell备份脚本,完成数据库备份,定时服务方式很多,本文主要介绍Linux自带的Crond定时服务,简单易上手~

    (2)什么是Crond服务?

    • crond是Linux操作系统自带的定时服务,自带守护进程,一般用于运行计划任务如系统备份、日志分割及清理。
    • crond服务适合在那些24x7不间断运行的机器如服务器上运行的计划任务。
    • crond表达式
      示例1:0 0 * * * 每天整点执行
      示例2:0 4 * * * 每天4点整执行
      示例3:*/1 0 * * * 每隔一分钟执行
      –参数说明
      crond表达式从左右分别表示分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)
    • 验证crond配置
      配置当前用户crond的执行命令/usr/bin/crontab -e
      编辑内容为: crond表达式 要执行的Command命令
    • 实时查看cron执行日志(这里只有root用户有权限查看~)
      tail -f /var/log/cron

    (3)Crond常用命令

    Linux通过Crond服务配置定时服务,需要确保Crond处于运行状态~

    查看启动状态命令
    systemctl status crond.service
    在这里插入图片描述
    其他常用命令
    systemctl start crond.service
    systemctl restart crond.service
    systemctl stop crond.service

    关于Crond定时服务,也可以看下我的这篇博文学习
    Linux-- 定时服务crond VS anacron和 crontab VS anacrontab区别对比

    (4)定时执行备份脚本
    使用启动MySQL的Linux终端用户进行操作,我这里是mysql用户~
    执行命令

    /usr/bin/crontab -e
    

    添加内容:

    0 4 * * * /bin/sh /data/mysqlbackup/tools/mysqlbackup.sh
    

    表示每天凌晨4点整,会自动执行基于Xtrabackup的MySQL数据库全量备份+增量备份的Shell脚本~

    4.3 数据库恢复脚本

    4.3.1 创建脚本

    vim mysqlrecovery.sh添加内容:

    #!/bin/sh
    #基于Xtrabackup的MySQL数据库恢复脚本,手动执行恢复
    
    #全量备份主目录
    fullBackupPath="/data/mysqlbackup/full"
    #增量备份主目录
    incrBackupPath="/data/mysqlbackup/incr"
    #全量备份日期(最新)
    fullBackupDate="20210826"
    #增量备份日期(最新)
    incrBackupDate="20210827"
    #MySQL配置文件
    mysqlConfig="/data/mysqldata/my.cnf"
    
    #数据恢复日志文件
    logfile="/data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log"
    
    #格式化全量备份日期为秒数
    fullBackupTime=`date -d "$fullBackupDate" +%s`
    #格式化增量备份日期为秒数
    incrBackupTime=`date -d "$incrBackupDate" +%s`
    #计算两个日期之间的天数差
    diffTimes=$[$incrBackupTime - $fullBackupTime]
    #天数差
    diffDays=$[diffTimes/86400]
    
    #解压全量备份的压缩文件
    for j in $(find $fullBackupPath/$fullBackupDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
    
    #按天数差遍历:从最新全量备份依次预恢复到最新增量备份
    for((i=0;i<=diffDays;i++))
    do
      #预恢复备份日期
      prepareRevoveryDate=`date -d "$fullBackupDate $i day" +%Y%m%d`
      #一、天数差为0
      if [ $diffDays == 0 ];then
        #预恢复最新全量备份,后面没有增量备份,不需要指定--apply-log-only,回滚未提交事务
        xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
      #二、天数差不为0
      else
        #2.1 预恢复备份日期等于全量备份日期
        if [ $prepareRevoveryDate == $fullBackupDate ];then
          #预恢复最新全量备份,后面还有增量备份,需指定--apply-log-only,防止回滚未提交事务
          xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
        #2.2 预恢复备份日期不等于全量备份日期
        else
          #解压预恢复增量备份
          for j in $(find $incrBackupPath/$prepareRevoveryDate -name "*.qp"); do qpress -d $j $(dirname $j) && rm -rf $j; done;
          #2.2.1 最新增量备份
          if [ i == $diffDays ];then
            #预恢复最新增量备份,不需要指定--apply-log-only,回滚未提交事务
            xtrabackup --prepare --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
          #2.2.2 非最新增量备份
          else
            #预恢复非最新增量备份,需指定--apply-log-only,防止回滚未提交事务
            xtrabackup --prepare --apply-log-only --target-dir=$fullBackupPath/$fullBackupDate --incremental-dir=$incrBackupPath/$prepareRevoveryDate 2>> ${logfile}
          fi
        fi
      fi
    done
    
    #xtrabackup恢复预恢复完成的全量备份数据
    xtrabackup --defaults-file=$mysqlConfig --copy-back --target-dir=$fullBackupPath/$fullBackupDate 2>> ${logfile}
    
    #退出程序
    exit 0
    

    4.3.2 删库跑路(模拟)

    手动备份数据目录(预防恢复失败)

    cd /data/mysqldata
    tar -czvf 3306_$(date +%Y%m%d)_$(date +%H%M%S)2.tar.gz 3306
    

    删库跑路(模拟)~

    cd /data/mysqldata
    rm -rf 3306
    

    在这里插入图片描述

    4.3.3 手动执行恢复脚本

    查看MySQL进程

    ps -ef|grep mysql
    

    如果存在进程,需要先停止mysql

    service mysql stop
    

    或者

    kill -9 进程号
    

    执行恢复脚本

    /bin/sh /data/mysqlbackup/tools/mysqlrecovery.sh
    

    查看恢复日志

    tail -f /data/mysqlbackup/logs/recovery_$(date +%Y%m%d).log
    

    在这里插入图片描述

    启动mysql
    如图所示,表示恢复成功~
    在这里插入图片描述
    最后连接MySQL查看全量备份和增量备份恢复是否完整~
    $ mysql -uroot -p


    肝完了,兄弟们,冲冲冲!!!!!

    原创不易,觉得有用的小伙伴来个一键三连(点赞+收藏+评论 )+关注支持一下,非常感谢~
    在这里插入图片描述

    展开全文
  • Oracle 11g R2 Rman备份与恢复

    万次阅读 多人点赞 2018-06-08 09:49:31
    Oracle 11g R2 Rman备份 备份与恢复的定义及分类 备份的定义及分类: 备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为...

    Oracle 11g R2 Rman备份

     备份与恢复的定义及分类

    备份的定义及分类:

             备份就是把数据库复制到转储设备的过程。其中,转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本,从不同的角度分类如下:

    从物理与逻辑的角度来分类:

    从物理与逻辑的,备份可以分为物理备份和逻辑备份。

    物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。

    逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。

    从数据库的备份角度分类:

    从数据库的备份角度,备份可以分为完全备份增量备份差异备份

    完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。

    增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。

    差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,因此只需要两份数据---最后一次完整备份和最后一次差异备份,缺点是每次备份需要的时间较长。

    恢复的定义及分类

             恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库,恢复分为以下两种类型:

    实例恢复:当oracle实例出现失败后,oracle自动进行的恢复

    介质恢复:当存放数据库的介质出现故障时所作的恢复。介质恢复又分为完全恢复和不完全恢复

    完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应用全部的重做日志做到的。

    不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选项重设联机重做日志。

    RMAN的存储类型有三种方式:

    1.备份集 默认类型

    2.压缩备份集

    3.镜像copy

    组成每个备份集的每个文件称之为备份片

    RMAN备份可以存放在两种位置:

    1.目标数据库的控制文件

    2.恢复目录中

    RMAN备份的优点:

    1.RMAN只备份有效数据

    2.RMAN可以实现增量备份

     使用RMAN工具

    RMAN是oracle的一个重要工具,用于备份和恢复数据文件,归档日志和控制文件,也可以用来执行完全或不完全的数据库恢复。RMAN有3种不同的用户接口,命令行方式,GUI方式(集成在OEM中的备份管理器),API方式(用于集成到第三方的备份软件中),它具有以下特点:

    支持在线热备份

    支持多级增量备份

    支持并行备份、恢复

    减少所需要备份量

    备份、恢复使用简单

    RMAN的组件

    target database(目标数据库)

    目标数据库就是需要RMAN 对其进行备份与恢复的数据库,RMAN可以备份数据文件,控制文件,归档日志,spfile;

    service session(服务器会话)

    RMAN启动数据库上的oracle服务器进程,将建立一个与目标数据库的会话,有目标数据库上的服务器进程进行备份、还原、恢复的实际操作。

    RMAN Repository(RMAN资料库)

    RMAN使用过程中会用到的控制信息,是一些关于备份、归档日志及RMAN活动的元数据

    Recovery Catalog(恢复目录)

    恢复目录是建立在RMAN恢复目录数据库上的一种schema对象,用于保存RMAN资料库数据。恢复目录是一个可选的组件。RMAN会将资料数据记录在目标数据库的控制文件中,但这样不够安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。所以建议在单独的一个数据库中建立一个恢复目录另外保存一份资料库数据。

    MML(媒体管理库)

    MML是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理。如果你想直接通过RMAN备份到磁带上,就必须配置媒体管理层,媒体管理层的工具和RMAN共同配合完成备份与恢复。

    快闪恢复区

    快闪恢复区是oracle数据库用于保存所有与恢复相关的文件的默认磁盘位置。这些相关文件包括归档日志,RMAN备份,控制文件自动备份,复用的控制文件和重做日志副本及闪回日志文件。

    辅助数据库

    在正常使用时,RMAN会与目标数据库一起使用,如果创建了恢复目录数据库,那么也会与恢复目录数据库一起使用。在某些情况下,希望创建辅助数据库。辅助数据库时使用RMAN从目标数据库的备份中创建的新数据库。辅助数据库能够被创建作为备用数据库使用。在数据库发生灾难时,能够在不丢失任何数据及停机时间最短的情况下切换至备用数据库。

    创建恢复目录

    恢复目录存在于RMAN的目录数据库中,类似于标准的数据库目录,主要包含如下几个部分信息:

    备份恢复信息,可以是多个目标数据库

    RMAN脚本,可以存储重复使用

    关于数据文件和日志文件的备份信息

    关于目标数据库的表空间和数据文件信息

    RMAN资料库可以存放在目标数据库控制文件里,也可以存放在恢复目录中;

    创建恢复目录:用来存储RMAN资料库的。

    SQL>create tablespace yy datafile '/opt/oracle/oradata/yy.dbf' size 20m autoextend on next 5m maxsize unlimited;

    在恢复目录数据库中创建RMAN用户并授权

    SQL>create user lilei identified by oracle default tablespace yy quota unlimited on yy;

    SQL>grant connect,resource,recovery_catalog_owner to lilei;

    连接到RMAN恢复目录数据库

    创建恢复目录

    提示已经连接到目标数据库、连接到恢复目录数据库

    向恢复目录注册数据库ORCL,提示已经启动全部恢复目录的resync,已完成全部的resync。此时就可以使用RMAN的恢复目录对目标数据库进行备份和恢复操作。

    通道的分配

    使用RMAN进行备份和恢复时,必须进行通道的分配,一个通道是RMAN和目标数据库之间的一个连接,通道指定了某种类型的设备用于备份和恢复,RMAN可以使用的通道设备包括磁盘与磁带两种。

    通道分配可以自动或手动进行

    自动通道配置

    RMAN>configure device type disk paralielism 5;

    RMAN>configure default device type to disk;

    手动通道配置

     RMAN>run

    2>{

    3>allocate channel ch1 device type disk;

    4>allocate channel ch2 device type disk;

    5>allocate channel ch3 device type disk;

    6>}

    可以使用show all命令可以显示已经配置过的有默认值的参数,其中包括通道参数

    RMAN>show all;

     备份与恢复的概念与操作

    备份集与备份片

    备份集(backup set)

    备份集是一次备份的集合,它包含本次备份的所有备份片,以oracle专有的格式保存,是一个逻辑数据的集合。

    备份片:

    一个备份集由若干个备份片组成。每个备份片是一个单独输出文件,一个备份片的大小是有限制的,他的大小不能大于文件系统所支持的文件长度的最大值。

    配置备份集文件的格式:

    使用backup命令进行备份时,需要明确备份文件的存储路径及文件名称的格式。其路径和格式可以使用FORMAT参数进行统一设置。FORMAT格式由两部分组成:即存储路径和文件名称格式;

    如果没有使用FORMAT指定存储路径和文件名称格式,则默认情况下BACKUP所产生的备份集将存储在快闪恢复区中,RMAN自动使用%U来确定文件名称不会被重复。

    FORMAT命令格式如下:

    FORMAT '格式字符串'

    其中格式字符串的文件名称部分可以使用替换变量,例如FORMAT '/BACKUP/YY/%U'.

    常用的替换变量如下:

    %c : 备份片的拷贝数

    %d:数据库名称

    %D : 位于该月中的第几天(DD)

    %M : 位于该年中第几月(MM)

    %F : 一个基于DBID的唯一名称,它的形式为C-DBID-YYYYMMDD-QQ。其中DBID为数据库的DBID,YYYYMMDD为日志,QQ是一个1-256的序列

    %n:数据库名称,向右填补到最大8个字符

    %u:一个8个字符的名称,它是根据备份集个数与创建时间信息生成的。

    %p:该备份集中的备份片号,从1开始到创建的文件数。

    %U:系统生成的一个唯一文件名,对于备份片来说,它的含义相当于%u_%p_%c。

    %s:备份集的号

    %t:备份集时间戳

    %T:年月日格式(YYYYMMDD)

    备份与恢复命令

    backup命令用于备份数据库文件,可以将多个文件、表空间、整个数据库已备份集形式备份到磁盘或磁带上,在RUN命令外使用BACKUP命令,会自动使用自动通道。在RUN命令内使用BACKUP命令,如果定义了手动通道,则优先使用手动定义通道。

    使用RMAN备份的数据库也只能使用RMAN提供的恢复命令进行恢复。RMAN的恢复目录中存储了目标数据库的备份信息。RMAN根据恢复目录中的存储信息,自动将数据库同步到某一个数据一致的状态。

    RMAN恢复数据库时用到两个命令,即RESTORE和RECOVER。RESTORE命令将备份数据恢复到指定的目录,RECOVER命令对数据库进行同步恢复。

    RESTORE命令:由于备份集中的备份片是以专有的RMAN格式存储的,需要使用RESTORE命令进行重建。重建的结果是自动产生目标数据库的物理文件结构。

    RECOVER命令:负责把归档日志文件用于重建的数据文件,来完成数据库的同步恢复。在执行RECOVER命令时,RMAN需要读取归档日志。如果没有归档日志,或者数据库运行在非归档模式下,则恢复过程会报错。

    举例说明在归档模式下备份与恢复

    要用RMAN进行联机备份,数据库必须处于归档模式,恢复目录必须打开,目标数据库进程必须启动,数据库已加载或者打开。

    查看数据库是否处于归档模式下:

    关闭数据库并启动数据库到mount状态

    使用ALTER DATABASE ARCHIVELOG命令将数据设置为归档模式,并验证数据库的归档模式是否改变

    备份和恢复整个数据库

    备份和恢复整个数据库,自动分配通道,FORMAT默认使用%U,备份集存储在数据库快闪恢复区内,备份文件包括数据文件,控制文件,重做日志文件和参数文件

    RMAN>backup database;

    备份到了快闪恢复区,

    如果备份整个数据库时要包含归档日志文件,则要加上plus archivelog关键字,delete input的意思是在备份完成后,删除archivelog文件

    RMAN>backup database plus archivelog delete input;

    创建目录/OPT/ORACLE/ORADATA

    自动分配通道,通过FORMAT制定具体的路径和格式

    RMAN>backup database FORMAT '/opt/oracle/oradata/backup/rmanbak/%U';

    备份文件存储的路径

    使用手动分配通道,备份数据库的方法:

    RMAN>run

    2>{

    3>allocate channel ch1 device type disk;

    4>backup database format '/opt/oracle/oradata/backup/rmanbak/%U';

    5>release channel ch1;

    6>}

    备份结果

    如何恢复数据库

    全库备份的恢复,数据库要在mount状态下执行,删除system01.dbf,使用RMAN恢复

    此时数据库无法启动了,因为删除了system01.dbf

    数据库的当前状态,连接RMAN

    恢复数据库

    打开数据库

    数据库已经处于OPEN状态了

    system01.dbf表空间已经被恢复了

    备份和恢复表空间

    备份表空间

    备份USERS表空间

    RMAN>backup tablespace users;

    备份多个表空间

    RMAN>backup filesperset=3 tablespace users,system,sysaux;

    在RUN命令中备份表空间

    RMAN>run

    2>{

    3>allocate channel ch1 device type disk;

    4>backup format '/opt/oracle/oradata/backup/rmanbak/%U' (tablespaceusers,system,sysaux);

    5>release channel ch1;

    6>}

    如果只丢失了特定的表空间的数据文件,那么可以选择只恢复这个表空间,而不是恢复整个数据库,表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的表空间offline

    模拟删除表空间

    恢复被删除的表空间

    已经恢复了users01.dbf

    备份数据文件2

    备份sysaux01.dbf

    查看当前系统中的数据文件

    删除数据文件sysaux01.dbf

    对数据文件或表空间做恢复的时候数据文件和表空间一定要处于offline状态, 数据文件丢失了,但数据库实例还可以用,

    此时数据文件sysaux01.dbf的状态为RECOVER

    恢复数据文件sysaux01.dbf

    将数据文件datafile 2处于online状态

    查看数据文件的状态,已经变成online状态了

    使用数据泵技术实现逻辑备份

    逻辑备份概述

    逻辑备份时创建数据库对象的逻辑副本,并存入一个二进制转储文件的过程。从本质上来讲逻辑备份与恢复实际就是对数据库事实数据的导入和导出。

    导出:

    导出就是数据库的逻辑备份,实质是读取一个数据库记录并将这个记录集写入一个文件(扩展名通常是dmp),这些记录的导出与物理位置无关

    导入:

    导入即数据库的逻辑恢复,实质是读取被导出的二进制转储文件并将其恢复到数据库。

    使用数据泵技术导入/导出

    数据泵(DATA PUMP)是一种在数据库之间或在数据库与操作系统之间高速传输数据的技术。数据泵工具运行在服务器上,数据库管理员需要指定数据库目录来保存转储的数据。

    连接oracle 数据库

    创建一个操作目录

    授予用户操作dump_dir目录的权限

    使用EXPDP命令导出数据(可以按照表导出,按照用户模式导出,按照表空间导出和全库导出),使用IMPDP命令导入数据(可以按照表导入,按照用户模式导入,按照表空间导出和全库导入)。

    使用基于命令行的数据泵技术对数据库实施导入和导出。

    SQL>col DIRECTORY_NAME for a20

    SQL>col DIRECTOR_PATH for a60

    SQL>col OWNER for a8

    创建测试用户tom并授权

    导出SCOTT用户下的emp和dept表

    [oracle@dbserver~]$ expdp scott/oracle directory=dump_dir dumpfile=scotttab.dmp tables=emp,dept

    以SCOTT用户连接,删除SCOTT用户下的EMP表

    导入emp表

    [oracle@dbserver~]$ impdp scott/oracle directory=dump_dir dumpfile=scotttab.dmp tables=emp

    emp表已经导入成功了。

    将导出的SCOTT用户下的DEPT表和EMP表导入到tom用户下

    [oracle@dbserver~]$ impdp system/oracle11g directory=dump_dir dumpfile=scotttab.dmptables=scott.emp,scott.dept REMAP_SCHEMA=SCOTT:TOM

    查看导入的结果,使用tom用户连接

    导出表空间

    在xx表空间上创建一个表aa,并为表插入记录

    导出表空间

    删除表空间xx的同时删除数据文件

    aa表没有了。

    导入表空间

    导入表空间之前,需要创建一个xx表空间

    导入表空间xx

    验证,aa表恢复回来了。

    导出全库

    [oracle@dbserverorcl]$ expdp system/oracle11g directory=dump_dir dumpfile=full.dmp full=y

    导入全库

    [oracle@dbserverorcl]$ impdp system/oracle11g directory=dump_dir dumpfile=full.dmp full=y

    使用闪回技术

    为了使数据库能够从任何逻辑错误中迅速恢复,oracle推出了闪回技术。采用该技术,可以对行级和事物级的数据变化进行恢复,减少了数据恢复的时间,而且操作简单。通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。

    闪回技术包括以下各项:

    闪回查询:(FLASHBACK QUERY):查询过去某个时间点或某个SCN值时表中的数据信息

    闪回版本查询(FLASHBACK Version query):查询过去某个时间段或某个SCN段内表中数据变化的情况。

    闪回事物查询(FLASHBACK Transaction Query):查看某个事物或所有事物在过去一段时间对数据进行的修改。

    闪回数据库(FLASHBACK Database):将数据库恢复到过去某个时间点或某个SCN值时的状态

    闪回删除(FLASHBACK drop):将已经删除的表及其关联的对象恢复到删除前的状态。

    闪回表(FLASHBACK table):将表恢复到过去的某个时间点或某个SCN值时的状态。

    SCN是当oracle数据库更新后,有DBMS自动维护而累积递增的一个数字。可以通过查询数据字典V$DATABASE中的CURRENT_SCN获得当前的SCN号。

    闪回恢复区的含义

    oracle推荐指定一个闪回恢复区(FLASHRECOVERY AERA)作为存放备份与恢复相关的默认位置,这样ORACLE就可以实现自动的基于磁盘的备份与恢复。闪回恢复区是一块用来存储恢复相关的文件的存储空间,允许用户集中存储所有恢复相关的文件。以下几种文件可以存放在闪回恢复区。

    控制文件

    归档日志文件

    闪回日志

    控制文件和SPFILE自动备份

    RMAN备份集

    数据文件拷贝

    闪回恢复区主要通过以下3个初始化参数来设置和管理

    db_recovery_file_dest:指定闪回恢复区的位置

    db_recovery_file_dest_size:指定闪回恢复区的可用空间

    db_flashback_retention_target:该参数用来控制闪回日志中数据保留的时间,或者说,希望闪回数据库能够恢复到的最早的时间点。单位为min,默认是1440min,即一天。当然实际上可回退的时间还取决于闪回恢复区的大小,因为里面保存了回退所需要的闪回日志,所以这个参数要和db_recovery_file_dest_size配合修改。

    如果要撤销闪回恢复区,把初始化参数DB_RECOVERY_FILE_DEST的值清空。

    db_recovery_file_dest_size只有在DB_RECOVERY_FILE_DEST清空之后才可以清空

     设置闪回数据库

    设置了闪回恢复区,要启动闪回数据库功能,还需要进一步配置,数据必须处于归档模式,在设置闪回数据库

    数据库已经处于归档模式:

    数据库未启用闪回数据库

    建立闪回区域

    设置闪回数据库的数据保留周期为一天以min为单位

    启用闪回日志

    查询是否成功启用闪回恢复区

    查询是否成功启用闪回数据库

    闪回数据库

    闪回数据库能够使数据迅速的回滚到以前的某个时间点或者某个SCN上,这对数据库从逻辑错误中恢复特别有用。而且也是大多数发生逻辑损坏时恢复数据库最佳的选择。

    使用SCN闪回数据库

    查看数据库系统当前SCN

    改变数据库当前状态,模拟创建表TEST10,并插入一条记录

    进行闪回数据库恢复,将数据库恢复到创建表之前的状态,即SCN为1238544

    用RESETLOGS选项打开数据库

    验证数据库的状态,TEST10表不存在。

    查询数据库中当前最早的闪回SCN和时间

    按照指定时间闪回数据库

    查询数据库中当前时间和当前SCN

    改变数据库的当前状态,模拟创建表test11,并插入1条记录

    进行闪回数据库恢复,将数据库恢复到创建表之前的状态。

    使用RESETLOGS打开数据库

    验证数据库的状态test11表是否存在。

    闪回数据库操作的限制:

     数据文件损坏或丢失等介质故障不能使用闪回数据库进行恢复。闪回数据库只能基于当前正常运行的数据文件

    闪回数据库功能启动后,如果发生数据控制文件重建或利用备份恢复控制文件,则不能使用闪回数据库

    不能使用闪回数据库进行数据文件收缩操作

    不能使用闪回数据库将数据库恢复到在闪回日志中可获得的最早的SCN之前的SCN,因为闪回日志文件在一定的条件下被删除,而不是始终保存在闪回恢复区中

    闪回表

             闪回表是将表恢复到过去的某个时间点或者指定的SCN而不用恢复数据文件,为DBA提供了一种在线、快速、便捷的恢复方式,可以恢复对表进行的修改、删除、插入等错误的操作。

             利用闪回表技术恢复表中的数据的过程,实际上是对表进行DML操作的过程。oracle自动维护与表相关联的索引、触发器、约束等。

    为了使用数据库闪回功能,必须满足下列条件

    用户具有FALSHBACKANY TABLE系统权限,或者具有所操作表的FLASHBACK对象权限

    用户具有所操作表的SELECT/INSERT/DELETE/ALTER对象权限

    启动被操作表的ROW MOVEMENT特性,可以采用下列方式进行:

    SQL> ALTER TABLE 表名 ENABLE ROWMOVEMENT;

    闪回表语法格式:

    FLASHBACK TABLE [schema].table TO SCN |TIMESTAMP expression [ENABLE|DISABLE TRIGGERS]

    参数说明:

    SCN:将表恢复到指定的SCN时的状态

    TIMESTAMP:将表恢复到指定额时间点

    ENABLE|DISABLETRIGGERS:在恢复表中数据的过程中,表上的触发器时禁用还是激活(默认是引用)

    举例说明:

    使用SCOTT用户登录

    创建表,插入记录,提交事物

    查询当前SCN号,如果当前用户没有权限查询v$database,则以sys用户登录,授予当前用户访问数据字典的权限。

    更新记录,并提交事物

    查看表中的记录

    删除ID=3的记录

    启动test01表的ROW MOVEMENT特性

    将test01表恢复到2015-11-22 05:44:48时刻的状态

    将test01表恢复到SCN为1240503的状态。

    闪回删除

    闪回删除可以恢复使用DROP table语句删除的表,是一种对意外删除的表恢复机制。闪回删除的功能的实现主要是通过oracle数据库中的“回收站”技术实现的。在oracle数据库中,当执行DROP table操作时,并不立即收回表及其关联对象的空间,而是将他们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除他们或存储该表的表空间或存储空间不足时,表才真正被删除,为了使用数据库的闪回删除技术,必须开启数据库的“回收站”

    启动“回收站”将参数RECYCLEBIN设置为ON,在默认情况下“回收站”已经启动

    如果没有启动可以使用:

    查看回收站。当执行DROP table 时,表及关联的对象被命名后保存在“回收站”中,可以通过查询USER_RECYCLEBIN DBA_RECYCLEBIN视图获得被删除的表及其关联对象。

    通过USER_RECYCLEBIN查看被删除的表

    不支持sys用户和system用户,这两个用户下的表被删除之后,无法从回收站里拿到,查询时为“空”

    如果删除表的时候使用了PURGE短语,则表及其关联对象呗直接释放,空间被回收,相关信息不会进入“回收站”中

    清空回收站,由于被删除的表级其关联对象信息保存在“回收站”中,其存储空间并没有释放,因此需要定期清空“回收站”。或清除“回收站”中没有用的对象(表,索引,表空间)释放其所占用的磁盘空间

    语法如下:

    PURGE [TABLE 表名 | INDEX index]

    [RECYCLEBIN | DBA_RECYCLEBIN] | [TABLESPACEtablespace [USER user]]

    参数说明:

    TABLE:从回收站中清除指定的表

    INDEX:从回收站中清除指定的索引,并回收其磁盘空间

    RECYCLEBIN:清空用户“回收站”,并回收所有对象的磁盘空间

    DBA_RECYCLEBIN:清空整个数据库系统的“回收站”,只有具有SYSDBA权限的用户才可以使用

    TABLESPACE :清除“回收站”中指定额表空间,并回收磁盘空间

    USER:清除回收站中指定表空间中特定用户的对象,并回收磁盘空间

    闪回删除操作,闪回删除的基本语法

    FLASHBACK TABLE [schema.]table to BEFOREDROP [RENAME TO table]

    闪回删除

    闪回删除举例说明:

    需要注意:只有本地管理的,非系统表空间中的表可以使用闪回删除操作。

     闪回查询

    允许根据时间点timestamp或SCN查看就的数据,除了可以查看旧数据,需要时可以通过检索旧数据来撤销错误的更改。

    使用SCOTT用户登录,对EMP表基于AS of TIMESTAMP的闪回查询

    SQL> show user;

    USER is "SCOTT"

    更新员工号为7900的工资,更新为2000,并提交事物

    更新员工号为7900的工资,更新两次,提交事物。

    更新员工号为7900的工资,更新为3500,并提交事物

    查看7900号员工的更新后工资。

    查询7900号员工前一个小时的工资是多少

    查询第一个事物提交,第二个事物还没有提交时7900员工的工资

    查询第二个事物提交,第三个事物还没有提交时的7900号员工的工资

    如果需要,可以将数据恢复到过去某个时刻的状态。

     如果对此有兴趣,请扫下面二维码免费获取更多详情,如果文章对您有帮助,请打赏博主一两毛钱。

    展开全文
  • 首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。 gitlab-rake gitlab:backup:create...

    首先进入到gitlab容器

    docker exec -it gitlab /bin/bash

    1、Gitlab 创建备份
    1.1 创建备份文件
    首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。

    gitlab-rake gitlab:backup:create

    使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1563430612_2019_07_18_11.0.4_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1563430612_2019_07_18_11.0.4是备份创建的日期

    /etc/gitlab/gitlab.rb 配置文件须备份
    /var/opt/gitlab/nginx/conf nginx配置文件
    /etc/postfix/main.cfpostfix 邮件配置备份

    生成完后,/var/opt/gitlab/backups目录创建一个名称类似为1563430612_2019_07_18_11.0.4_gitlab_backup.tar的压缩包

    1.1 更改Gitlab备份目录

    当然你也可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录

    gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
    1
    /var/opt/gitlab/backups修改为你想存放备份的目录即可,例如下面代码将备份路径修改为/mnt/backups

    gitlab_rails['backup_path'] = '/mnt/backups'
    è¿éåå¾çæè¿°

    修改完成之后使用下面命令重载配置文件即可

    gitlab-ctl reconfigure

    1.2 Gitlab自动备份

    1.2.1 定时自动备份

    在crontab文件里面,每一行代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,每个字段之间用空格分割,没用的段用*代替,格式如下:

    1 m h dom mon dow user command
    其中:

    m: 表示分钟,可以是从0到59之间的任何整数。
    h:表示小时,可以是从0到23之间的任何整数。
    dom:表示日期,可以是从1到31之间的任何整数。
    mon:表示月份,可以是从1到12之间的任何整数。
    dow:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    user : 表示执行的用户。
    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件(如shell文件)。


    实现每天凌晨2点进行一次自动备份:通过crontab使用备份命令实现,需重启cron服务 
    方法1、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。

    #输入命令crontab -e
    sudo crontab -e  
    #输入相应的任务
    0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

    方法2、直接编辑/etc/crontab 文件,即vi /etc/crontab,然后添加相应的任务

    #编辑 /etc/crontab
    vi /etc/crontab 

    然后再编辑框内输入相应的任务

    # 添加定时任务,每天凌晨两点,执行gitlab备份
    0  2   * * *   root    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1  

    或者直接定时执行一个脚本 auto_backup.sh ,脚本内容为

    /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

    然后再 /etc/crontab中,添加相关任务定时执行 auto_backup.sh 脚本文件

    chmod +x auto_backup.sh
    vim auto_backup.sh


    /etc/crontab 中添加执行脚本的定时任务,代码如下:

    0 2 * * * root /data/gitlabData/backups/auto_backup.sh -D 1

    编写完 /etc/crontab 文件之后,需要重新启动cron服务

    #重新加载cron配置文件

    /usr/sbin/service cron reload

    #重启cron服务

    /usr/sbin/service cron restart

    1.2.2 设置备份过期时间

    设置只保存最近7天的备份,编辑 /etc/gitlab/gitlab.rb 配置文件,找到gitlab_rails[‘backup_keep_time’],设置为你想要设置的值,然后保存。

    gitlab_rails['backup_keep_time'] = 604800  


    2、 Gitlab迁移

    2.1 copy老服务器上面的备份文件到新服务器

    2.1.1 确保新Gitlab服务器和老Gitlab服务器版本相同

    第一步,新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同. 比如新服务器安装的是最新的11.0.4版本的Gitlab, 那么迁移之前, 最好将老服务器的Gitlab 升级为11.0.4再进行备份.

    2.1.2 copy老服务器上面的备份文件到新服务器

    第二步,如果你没修改过默认备份目录的话,需要将老服务器上的备份文件目录(/var/opt/gitlab/backups目录)下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups目录。

    docker cp 5b82f7221e12:/var/opt/gitlab/backups/1563430612_2019_07_18_11.0.4_gitlab_backup.tar /mnt

    使用scp命令从远程服务器copy文件或者目录到本地

    scp 用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

    [用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

    可能有用的几个参数 :

    -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

    -C 使能压缩选项 .

    -P 选择端口 . 注意 -p 已经被 rcp 使用 .

    -4 强行使用 IPV4 地址 .

    -6 强行使用 IPV6 地址 .

    例如我使用如下命令,从远程服务器copy刚才的备份文件到了新服务器的/var/opt/gitlab/backups/ 目录下

    scp root@xxxx:/mnt/1563430612_2019_07_18_11.0.4_gitlab_backup.tar /var/opt/gitlab/backups/

    copy完后,查看copy的文件如下

    2.1.3 从备份文件中恢复gitlab

    1、将备份文件权限修改为777

    第一步,将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题

    chmod 777 1563430612_2019_07_18_11.0.4_gitlab_backup.tar

    2、执行命令停止相关数据连接服务

    第二步,执行命令停止相关数据连接服务

    # 停止相关数据连接服务

    gitlab-ctl stop unicorn

    gitlab-ctl stop sidekiq

    3、执行命令从备份文件中恢复Gitlab

    第三步,执行命令从备份文件中恢复Gitlab

    gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

    例如我们的备份文件的编号是1563430612_2019_07_18_11.0.4,因此执行下面的命令即可恢复gitlab

    gitlab-rake gitlab:backup:restore BACKUP=1563430612_2019_07_18_11.0.4

    敲完命令后,出现第一个交互页面,

    root@gitlab:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1563430612_2019_07_18_11.0.4
    Unpacking backup ... done
    Before restoring the database we recommend removing all existing
    tables to avoid future upgrade problems. Be aware that if you have
    custom tables in the GitLab database these tables and all data will be
    removed.

    Do you want to continue (yes/no)? 

    全部yes

    恢复过程中。。。。。

    4、执行命令从备份文件中恢复Gitlab

    第四步,启动Gitlab

    gitlab-ctl start

    3、打开迁移后的Gitlab,进行对比

    老Gitlab服务器这样就迁移完成了。

    注意:

    重要的事情说3遍! gitlab-secrets.json 文件要备份过去!!!!!!

    重要的事情说3遍!gitlab-secrets.json 文件要备份过去!!!!!!

    重要的事情说3遍!gitlab-secrets.json 文件要备份过去!!!!!!

    展开全文
  • postgreSQL使用pgAdmin备份服务器数据

    万次阅读 2021-02-01 15:17:16
    使用postgresql的时候,有时候需要备份数据,但是数据库又比较多,比如我们的数据库如下: 这就很烦了,需要一种一键备份还原的方法来备份还原。 1、备份 备份可以使用pgadmin自带的备份服务器。右键服务器连接,...

    使用postgresql的时候,有时候需要备份数据,但是数据库又比较多,比如我们的数据库如下:
    在这里插入图片描述
    这就很烦了,需要一种一键备份还原的方法来备份还原。

    1、备份

    备份可以使用pgadmin自带的备份服务器。右键服务器连接,点击备份服务器,再选择创建的文件与数据库编码(一般为UTF8),即可,感觉比命令行的方式好用多了。
    在这里插入图片描述
    当然也可以使用命令行的方式,以下来自百度,试过没有成功,觉得太麻烦了就放弃了,供参考:

    SQL备份

    pg_dumpall.exe -h localhost -p 5432 -U postgres -v -f C:All.sql 2> C:All.log
    

    bak备份

    pg_dump.exe -c -b -E UTF8 -U postgres -h 127.0.0.1 -p 5432 -f "f:estdb001.bak" testdb001
    

    –Linux

    pg_dump -U postgres -c -C --if-exists -d cmsss -f F:/cmsss.sql
    

    2、还原

    还原在pgadmin中还没有找到,有操作方法可以告诉我-.-,我使用命令行的方式成功了。
    首先找到psql.exe所在位置如下所示
    在这里插入图片描述
    接着使用cmd命令行如下,第一个路径是psql.exe所在的路径,-f为还原文件所在的路径,-h后为主机地址,-p后为数据库端口,-U后为用户名

    D:\PostgreSQL\12\bin\psql.exe -h localhost -p 5432 -U postgres -f D:\A_Projects\OMS1.0\11111111111111111111.sql
    

    以下来自百度供参考:

    SQL还原

    psql.exe -h localhost -p 5432 -U postgres -f C:All.sql
    

    bak还原

    psql.exe -h 127.0.0.1 -U postgres -d testdb001 -E -f "f:estdb001.bak"
    
    展开全文
  • xtrabackup备份和恢复数据脚本

    万次阅读 2020-06-04 19:27:11
    该脚本用于备份和恢复MySQL数据库。 总结xtrabackup备份的两个坑: 1、在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复。 2、在恢复过程中,如果版本过低,在准备全量数据的时候会卡在等待...
  • 最新版本的华为手机自带的备份工具,开始不再支持备份到手机内部存储功能。这个不再提供当然是为了用户更安全的使用备份功能(由于备份到手机内步存储,手机初始化会后丢失备份文件)。不过却失去了最高效的备份方式...
  • jenkins备份和发布

    万次阅读 2021-03-29 10:13:36
    ansible安装 安装ansible依赖 yum -y install epel-release 安装ansible yum -y install ansible ...远端备份 ansible all -m shell -a "tar -czf code.tar.gz ." 2> /log/errorLog/tar_czvf.log
  • #创建备份目录,下载完整的包 #备注:2.3.3之后不备份死锁,如果数据库是mysql 5.7之后的 #必须要装2.4.4才可以用,可以向下兼容。 mkdir -p /xtrabackup/full/ cd /xtrabackup/ wget ...
  • MySQL备份和还原操作

    万次阅读 2019-03-18 11:50:28
    MySQL备份和还原操作 目标  备份的概念  Mysqldump备份操作  MySQL还原操作  MySQL双机热备份 概述  在数据库表丢失或损坏的情况下,备份数据库是很重要的。如果发生系统崩溃,能够将表尽可能丢失最少的...
  • SQL Server2008备份方式、完整备份,差异备份、日志备份
  • 完全备份、增量备份和差异备份

    千次阅读 2019-04-21 16:18:00
    在进行数据备份时,可以采用不同的备份策略,主要的备份策略一般分为完全备份、增量备份和差异备份,我们分别来介绍。 完全备份完全备份是指把所有需要备份的数据全部备份。当然,完全备份可以备份整块硬盘、整个...
  • mysql备份策略(全量备份+增量备份

    万次阅读 多人点赞 2018-07-25 18:46:20
    最近项目需要对数据库数据进行备份,通过查阅各种资料,设计了一套数据库备份策略,通过调试运行一周后,目前已经处于平稳运行状态。现在将思路分享出来,同时感谢gredn大佬。 设计场景 1)增量备份在周一到周六...
  • 本地备份就是将数据备份到本地,它的优点是备份及还原的效率高,因为是备份在本地,备份的速率不会受到链路带宽的影响,磁盘快照就属于本地备份的一种。由于备份是保存在本地,因此一旦磁盘受损,将会影响到备份的...
  • 备份概述数据备份分类完整数据库备份文件备份部分备份差异备份日志备份事务日志备份最常用的备份方法选择备份策略和恢复模式备份策略简单恢复模式下的备份简单恢复模式下的完整数据库备份+差异数据库备份完整恢复...
  • 增量备份和全量备份

    千次阅读 2018-09-07 17:13:44
    增量备份和全量备份 1. 全量备份full backup  每隔一段时间对系统进行一次完全备份,这样在备份时间间隔内一旦系统发生故障导致数据丢失,就可以用上一次的备份数据恢复到上一次备份时的情况。例如,星期一用一...
  • RMAN差异备份与累积备份区别

    万次阅读 2017-02-06 15:41:09
    RMAN是一个专业的数据库备份工具,在RMAN中对数据库进行备份的类型也有很多种。例如下面是两种比较常用的备份类型:完全备份(Full Backup)和增量备份(Incremental Backup)等。 1 .完全备份 顾名思义,完全...
  • 备份、增量备份与差量备份

    千次阅读 2017-08-10 09:15:20
    基本概念: ...增量备份:以上一次全备份或增量备份为基本做的备份。 看了概念以后是不是还是一头雾水?呵呵,正常!不过没关系,下面会举例说明。如果版本库不是很大,直接做全备份就好了。但如果
  • SCDPM2019客户端备份

    万次阅读 2020-07-02 11:42:33
    SCDPM2019客户端备份 1.保护-新建 2.选择客户端 3.添加需要备份的客户端 如果备份的客户端较多可以选择右下角的从文件添加(在txt文本里每行一台客户端) 4.指定你要备份的文件(例如我这里是备份微信的记录) ...
  • Mysql数据库备份(一)------数据库备份和表备份

    万次阅读 多人点赞 2017-10-15 17:17:42
    一、Mysql中的数据备份: Mysql中数据备份使用的命令是:mysqldump命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。mysqldump命令的 工作原理很简单。它先查出需要备份的表...
  • 数据备份的方式有完全备份、差异备份以及增量备份,那么这三种备份方式有什么区别,在具体应用中又该如何选择呢?本文就这些问题作以介绍。 一、备份方式简介 1、完全备份(Full Backup) 备份全部选中的...
  • 备份、温备份、冷备份 详解

    万次阅读 2018-05-29 21:52:23
    备份系统的准备程度,可将其分为 冷备份、温备份和热备份三大类 :1&gt; 冷备份 : 备份系统未安装或未配置成与当前使用的系统相同或相似的运行环境,应用系统数据没有及时装入备份系统。一旦发生灾难,需安装...
  • mongoDB4.2.8备份恢复与导出导入

    万次阅读 2020-07-30 15:41:37
    备份 数据备份就是要保存数据的完整性,防止断电,病毒感染等等情况,使数据丢失。有必要的话,最好勤备份,防止数据丢失。 创建备份目录: mkdir -p /bigdata/mongodb-4.2.8/mongodump 语法: mongodump -h ...
  • 今天我司服务器工程大牛看我在备份数据,冷不丁提到了差异备份; 但是才疏学浅的我却从未可知何为差异备份,故而以此为引,开始了 对全量备份,增量备份,差异备份这三者的研习;经过一番寻觅,最终 找到了他们.呵呵 希望...
  • 数据备份 一、数据备份方法及策略 MySQL数据库最常用的...通常小于100GB的MySQL数据库可以使用mysqldump备份工具进行备份,如果是超过100GB的数据,由于mysqldump备份方式采用的是逻辑备份,最大的缺陷是备份...
  • 备份集是RMAN创建的具有特定格式的逻辑备份对象,备份集在逻辑上由一个或多个备份片段(Backup Piece)组成,每个备份片段在物理上对应一个操作系统文件,一个备份片段中可能包含多个数据文件、控制文件或归档文件,...
  • 差异备份的特点:完全备份相当于全部备份,理所当然速度最慢,差异备份是以完全备份为基准,只要在这个基准之上增加的内容都会备份,所以排第二,增量备份只是相对于每天增加或者改动那一部分,所以速度最快 ...
  • 为了保证安全,可以开启当有数据没有备份成功时,不删除历史备份。 5.较完善的环境检测,能准确的提醒用户那里配置出现问题。 和上一版本比较做了如下调整: 1.完善的环境和参数校验。 2.代码结构更加整洁 3.调整...
  • 本文转自听风吹雨的SQL Server备份和还原全攻略一、知识点完全备份备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之...
  • Rsync备份

    千次阅读 2020-03-10 14:45:27
    rsync是一款开源的备份工具,它可以在不同的主机之间进行同步数据,可以实现完全备份和增量备份,因此非常适合用于架构集中式备份和异地备份。 常见备份方式: 完全备份: 增量备份: 差异备份: ...
  • RMAN备份

    千次阅读 2021-05-19 13:50:09
    通道 ORA_DISK_1: 启动全部数据文件备份集 RMAN 查看备份、通道和并行度配置、 RMAN中的交叉校验crosscheck RMAN实战 RMAN备份数据库、控制文件、参数文件、FRA、归档日志

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,111,342
精华内容 444,536
关键字:

备份