Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
https://blog.51cto.com/13555753/2106506
数据库备份与恢复是数据库管理员必须掌握的。没有任何系统能免遭硬盘物理损坏、粗心用户的错误操作、或一些可能会威胁到存储数据的潜在灾难的侵袭。为了能够最大限度地恢复数据库数据,保证数据库的安全运行,应该选择最合理的备份方法来防止各种故障所导致的用户数据丢失,本次主要介绍三种备份恢复技术,即RMAN技术、数据泵技术及闪回技术。
备份的定义及分类
恢复的定义及分类
恢复就是发生故障后,利用已备份的数据或控制文件,重新建立一个完整的数据库。恢复分为以下两种类型。
1)实例恢复:当oracle实例出现失败后,oracle自动进行的恢复。
2)介质恢复:当存放数据库的介质出现故障时所做的恢复。介质恢复又分为完全恢复和不完全恢复。
完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份,并用全部的重做日志做到的。
不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。进行不完全恢复后,必须在启动数据库时用resetlogs选型重设联机重做日志
一、使用RMAN工具
RMAN(recovery manager)是oracle的一个重要工具,用于备份和恢复数据库文件、归档日志和控制文件。也可以用来执行完全或不完全的数据库恢复。RMAN有3种不同的用户接口:命令行方式,GUI方式(集成在OEM中的备份管理器)、api方式(用于集成到第三方的备份软件中)。它具有如下优点:
1)支持在线热备份
2)支持多级增量备份
3)支持并行备份、恢复
4)减少所需要的备份量
5)备份、恢复使用简单
RMAN有丰富的特性集。随着oracle新版本的发布,RMAN特性也不断增强,使得RMAN几乎在任何情况下都可以备份和恢复数据库。其中很多的新特性都是针对日常工作中所遇到的问题和困难开发的。
1.RMAN组件
1)target database(目标数据库)
目标数据库就是需要RMAN对其进行备份与恢复的数据库。RMAN可以备份数据文件、控制文件、归档日志文件、spfile。
2)server session(服务器会话)
RMAN启动数据库上的oracle服务器进程,并建立一个与目标数据库的会话。由目标数据库上的服务器进程进行备份、还原、恢复的实际操作。
3)RMAN repository(RMAN资料库)
RMAN使用过程中会用到的控制信息,是一些关于备份、归档日志及RMAN活动的元数据。
4)recovery catalog(恢复目录)
恢复目录是建立在RMAN恢复目录数据库上的一种schema对象,用于保存RMAN资料库数据。
恢复目录是一个可选的组件。RMAN会将资料库数据记录在目标数据库的控制文件中,但这样不够安全,因为一旦目标数据库的控制文件损坏就意味着所有的RMAN备份失效。所以建议在单独的一个数据中建立恢复目录另外保存一份资料库数据。
对于
对于大部分中等环境的企业环境,将RMAN备份信息存储在恢复目录数据库中,而不是存储在目标数据库的控制文件中,这样能够发挥RMAN工具的全部功能,此外,RMAN的很多高级功能也只有在创建了恢复目录的环境下才被支持。
5)MML(媒体管理库)
MML(media management layer)是第三方工具或软件,用于管理对磁带的读写与文件的跟踪管理,如果你要想直接通过RMAN备份到磁带上,就必须配置媒体管理层,媒体管理层的工具和RMAN共同完成备份与恢复。
6)快闪恢复区
快闪恢复区是oracle数据库用于保存所有与恢复相关的文件的默认磁盘位置。这些相关文件包括归档日志、RMAN备份、控制文件自动备份、复用的控制文件和重做日志副本及闪回日志文件。
7)辅助数据库
在正常使用时,RMAN会与目标数据库一起使用,如果创建了恢复目录数据库,那么也会与恢复目录数据库一起使用。在某些情况下,希望创建辅助数据库,辅助数据库是使用RMAN从目标数据库的备份中创建新的数据库。辅助数据库能被创建作为备用数据库使用。在产品数据库发生灾难时,能够在不丢失任何数据及停机时间最短的情况下切换至备用数据库。
2.创建恢复目录
恢复目录存在于RMAN的目录数据库中,类似于标准的数据库目录,主要包含如下几个部分的信息。
1)备份和恢复信息,可以是多个目标数据库
2)RMAN脚本,可以存储供重复使用
3)关于数据文件和日志文件的本分信息
4)关于目标数据库的表空间和数据文件的信
创建恢复目录数据库
在恢复目录数据库中创建RMAN用户并授权
在恢复目录数据库中创建恢复目录
3.注册目标数据库到恢复目录
登录目标数据库,如果要对目标数据库进行注册,可以按照以下操作
至此,完成了目标数据库在恢复目录中的注册操作,此时就可以使用RMAN的恢复目录对目标数据库进行备份和恢复操作。
4.通道分配
使用RMAN进行备份和恢复操作时,必须进行通道的分配,一个通道是RMAN和目标数据库之间的一个连接,通道指定了某种类型的设备用于备份和恢复,RMAN可以使用的通道设备包括磁盘与磁带两种。
(1)自动通道配置
使用CONFIGURE命令配置自动通道
语法格式如下:
CONFIGURE DEVICE TYPE sbt/disk PARALLELISM n; 指定自动通道并行个数
CONFIGURE DEFAULT DEVICE TYPE TO sbt/disk; 指定自动通道的默认设备
在语法中:
sbt/disk:磁带/磁盘
n:设置自动通道的个数
例如:指定RMAN可以打开5个磁盘通道
(2)手动通道配置
在RUN块中使用ALLOCATE CHANNEL手动分配通道
语法格式如下:
RUN
{
ALLOCATE CHANNEL 通道名称 DEVICE TYPE 设备类型;
......
}
一、 导出/导入(Export/Import)
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
1、 简单导出数据(Export)和导入数据(Import)
Oracle支持三种方式类型的输出:
(1)、表方式(T方式),将指定表的数据导出。
(2)、用户方式(U方式),将指定用户的所有对象及数据导出。
(3)、全库方式(Full方式),瘵数据库中的所有对象导出。
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。
2、 增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
(1)、“完全”增量导出(Complete)
即备份三个数据库,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量导出
备份上一次备份后改变的数据,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累积型”增量导出
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
比如数据库的被封任务可以做如下安排:
星期一:完全备份(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入A:
imp system/manager inctype=RESTOREFULL=y FILE=A
第四步:累计增量导入E:
imp system/manager inctype=RESTOREFULL=Y FILE=E
第五步:最近增量导入F:
imp system/manager inctype=RESTOREFULL=Y FILE=F
二、 冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快和最安全的方法。冷备份的优点是:
1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。
但冷备份也有如下不足:
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
1、 所有数据文件
2、 所有控制文件
3、 所有联机REDO LOG文件
4、 Init.ora文件(可选)
值得注意的使冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
下面是作冷备份的完整例子。
(1) 关闭数据库
sqlplus /nolog sql>;connect /as sysdba sql>;shutdown normal;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
{$PageTitle=sql>;cp ; ;}
(3) 重启Oracle数据库
sql>;startup
三、 热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
1. 数据文件一个表空间一个表空间的备份。
(1) 设置表空间为备份状态
(2) 备份表空间的数据文件
(3) 回复表空间为正常状态
2. 备份归档log文件
(1) 临时停止归档进程
(2) log下那些在archive rede log目标目录中的文件
(3) 重新启动archive进程
(4) 备份归档的redo log文件
3. 用alter database bachup controlfile命令来备份控制文件
热备份的优点是:
1. 可在表空间或数据库文件级备份,备份的时间短。
2. 备份时数据库仍可使用。
3. 可达到秒级恢复(恢复到某一时间点上)。
4. 可对几乎所有数据库实体做恢复
5. 恢复是快速的,在大多数情况下爱数据库仍工作时恢复。
热备份的不足是:
1. 不能出错,否则后果严重
2. 若热备份不成功,所得结果不可用于时间点的恢复
3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”
与数据库备份和还原相关的两个重要的文件夹:
……\Microsoft SQL Server\MSSQL.1\MSSQL\Backup
-------存放备份的数据文件
……\Microsoft SQL Server\MSSQL.1\MSSQL\Data
--------存放.mdf和.ldf文件
1.4、通过sql server的命令来备份还原数据库
我们通常备份数据库时,需要通过sql server客户端登录数据库服务器去备份和恢复,这样很不方便,其实SQL SERVER自带的命令就可以备份和还原数据库。这些命令可以在sql server客户端的sql脚本窗口直接执行,也可以很通过ADO.Net调用这些命令实现远程备份和恢复数据库。
(1)、备份还原数据库的命令
备份:
BACKUP DATABASE'被备份的数据库名'TO DISK = '备份文件路径';
--注意:被备份的数据库名必须是存在的,否则会出错
还原:
--将数据库置于离线状态
ALTER DATABASE'被恢复的数据库名'SET OFFLINE WITH ROlLBACK IMMEDIATE;
--恢复数据库
RESTORE DATABASE '被恢复的数据库名'FROM DISK = '还原文件路径(源文件)';
--将数据库置于在线状态
ALTER DATABASE'被恢复的数据库名'SET ONLINE WITH ROlLBACK IMMEDIATE;
--注意:被恢复的数据库名必须是存在的,并且该数据库将会被覆盖掉,还原文件路径(源文件)必须是存在的,另外,在执行前后的两个ALTER语句的时候,所选择的数据库必须是master,
有时候为了保险起见,ALTER语句可以不要。
(2)、命令应用
A、可以直接在sql server客户端的sql窗体中执行命令。
B、可以在数据库上写存储过程,然后配置JOB,定期调用这个存储过程。
C、通过应用程序的ADO.NET来执行这些命令或者命令组成的存储过程,实现应用程序控制备份还原数据库,这些应用程序可以写成服务,定期调用。
---------------------
https://blog.csdn.net/lcl_xiaowugui/article/details/81541357
MySQL数据库最常用的备份方法如下:
直接cp备份
sqlhotcopy备份
主从同步复制
Mysqldump备份
xtrabackup备份
二、mysqldump备份
通常小于100GB的MySQL数据库可以使用mysqldump备份工具进行备份,如果是超过100GB的数据,由于mysqldump备份方式采用的是逻辑备份,最大的缺陷是备份和恢复速度较慢。
基于mysqldump备份耗时会比较长,而且备份期间会锁表,锁表直接导致数据库只能访问select,不能执行insert、update等操作,进而导致部分web应用无法写入新数据。
如果数据库采用的是MyISAM引擎,可以执行参数--lock-tables=false禁用锁表,但是有可能造成数据信息不一致。
如果是支持事务的表,例如InnoDB,--single-transaction参数不支持锁定表,具体使用为mysqldump -uroot -p123456 --all-databases --opt --single-tarnsaction > tt.sql,--opt选项可以让mysqldump快速导出数据,并且可以很快导回。该选项默认开启,但是可以使用--skip-opt禁用。
如果运行mysqldump没有指定–quick或–opt选项,会将整个结果集中放在内存中,如果导出大数据的话可能会导致内存溢出而异常退出。
三、xtrabackup备份
MySQL冷备、mysqldump、MySQL热拷贝均不能实现对数据库进行增量备份。
所以就出现了Percona-xtrabackup,xtrabackup主要有两个工具,分别为xtrabackup和innobackupex。
xtrabackup只能备份InnoDB和xtraDB两种数据引擎的表,不能备份MyISAM数据表,innobackupex 1.5.1 封装了xtrabackup,是一个封装好的脚本,使用它可以同时备份处理innoDB和MyISAM,但处理MyISAM需要加一个读锁。
xtrabackup备份原理: innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。复制完成后,日志的复制线程也会结束。这样就得到了不在同一个时间点的数据副本和开始备份以后的事务日志。完成后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),从而达到数据的一致型。
备份优点为:
备份速度快,物理备份更可靠
备份过程不会打断正在执行的事务,无须锁表
能够基于压缩等功能节约磁盘空间和流量
自动备份校验
还原速度快
可以流传将备份传输到另外一台机器上
节约磁盘空间和网络带宽
innobackupex备份过程:首先启动xtrabackup_log后台检测的进程,实时检测MySQL redo的变化,一旦发现redo有新的日志写入,立刻将日志写入到日志文件xtrabackup_log中,并复制InnoDB的数据文件和系统表空间文件idbdatal到备份目录。innodb引擎表备份完之后,执行flush table with read lock操作进行MyISAM表备份。复制.frm .myd .myi文件,并且在这一时可获得binary log的位置,将表进行解锁unlock tables,停止xtraback_log进程,完成整个数据库的备份。
四、Percona-xtrabackup备份
1、官网下载安装
这里直接下载的rpm包,因为这里为了方便,数据库直接用的yum源的rpm包安装的,所以mysql版本较低,percona-xtrabackup包也只能下版本较低的包。但也要注意percona-xtrabackup目前还不支持mysql 5.7版本,最多只能到5.6
##安装依赖包
yum -y install libaio perl perl-devel perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL perl-Digest-MD5 libev rsync
wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.1/RPM/rhel6/x86_64/percona-xtrabackup-2.0.1-446.rhel6.x86_64.rpm
rpm -ivh percona-xtrabackup-22-2.2.13-1.el6.x86_64.rpm
2、MySQL数据库全备份
命令为innobackupex --user=root --password=Lcl@0514 /data/backup/mysql ##用户名和密码都是mysql设定的
最后结果出现completed ok代表数据库全备份成功!
3、innobackupex数据库恢复
innobackupex数据库恢复,恢复前要先保证数据的一致性,执行命令为:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log /data/backup/mysql/xxx
通常数据库备份完成后,数据不能直接用于恢复操作,因为备份数据是一个过程,在备份过程中,有任务会写入数据,可能会包含尚未提交的事务或已经提交但并没有同步到数据文件的事务。
所以数据文件会处于不一致的状态,基于--apply-log可以通过回滚未提交的事务及同步已经提交的事务到数据文件处于一致性状态,才可以进行恢复数据。
apply-log过程可以在任何机器上进行,可以把备份复制在闲置的服务器上去运行,以此来降低备份库的压力,但必须保证backup和apply-log所使用的mysqlbackup版本一致
4、恢复完整数据
删除原数据目录的数据,使用--copy-back参数恢复完整数据,授权MySQL用户给所有的数据库文件
##执行命令为
rm -fr /var/lib/mysql/*
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --copy-back /data/backup/mysql/xxx
chown -R mysql:mysql /var/lib/mysql
##恢复完毕后,重启数据库,直接登录会发现数据库备份成功
五、数据库增量备份
增量备份只能应用于InnoDB或xtraDB表,对于MyISAM表而言,执行增量备份实际上执行的是完全备份。
1、innobackupex增量备份
(1)全备份
增量备份之前必须执行全备份,这里用sql_db_test库来做测试,代码为
innobackupex --user=root --password=Lcl@0514 --databases=sql_db_test /data/backup/mysql
假设这一次备份出来的文件为/data/backup/mysql/aaa
(2)第一次增量备份
执行第一次增量备份,代码为
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --databases=sql_db_test --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/aaa
并且假设这次备份出来的文件名为bbb
(3)数据库插入新数据
(4)执行第二次增量备份
执行第二次增量备份,代码为
innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --databases=sql_db_test --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/bbb
假设这次备份出来的文件名为ccc
2、MySQL增量备份的恢复
(1)删除数据库
删除原数据库中表及数据记录信息
(2)确保数据一致性
基于apply-log确保数据的一致性,代码为innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa
(3)第一次增量数据恢复
执行第一次增量数据恢复,代码为:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa --incremental-dir=/data/backup/mysql/bbb
(4)第二次增量数据恢复
执行第二次增量数据恢复,代码为:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --apply-log --redo-only /data/backup/mysql/aaa --incremental-dir=/data/backup/mysql/ccc
(5)完整数据恢复
执行完整数据恢复,代码为:innobackupex --defaults-file=/etc/my.cnf --user=root --password=Lcl@0514 --copy-back /data/backup/mysql/aaa
(6)测试