各种数据库的备份与恢复_第1页
各种数据库的备份与恢复_第2页
各种数据库的备份与恢复_第3页
各种数据库的备份与恢复_第4页
各种数据库的备份与恢复_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库的备份与恢复概论这是一遍综合性描述数据库备份的文章,要把所有的数据库的备份与恢复全部描述清楚,不是我这遍文章的初衷。我只想给那些想做备份。却不怎么了解备份的人一个整体认识。本人的水平是有限的。我只能抛砖引玉。很多经验总结也是个人一家之言。有错误请斧正。一:数据库备份的重要性硬件总会坏,系统总会崩溃的,数据文件总是会损坏的,人也不可能永远不犯错误的。数据库备份就是在你硬盘坏了。系统崩溃坏了。数据文件损坏了,工作人员误删除数据的时候让你不伤心,不害怕。数据库的备份不同与一般的文件备份。一个备份方案总是跟客户的需求有关系的,一个从来没有新数据增加的查询数据库。一次冷备份就足够了。而对一个7X2

2、4小时数据库。数据不能丢失的系统。备份的方案就复杂多了。怎么样才能保证数据库不丢失数据呢?这将受到两个条件的制约。一:数据库种类。二:备份的方法。二:数据库备份与恢复种类2.1逻辑备份与恢复逻辑备份是使用软件技术从数据库中提取数据并将结果写入一个输出文件,逻辑备份因为灵活性受到开发人员的青睐。但是对一个数据库管理员来说。就对它不放心了。一:他是点的逻辑。他只能描述数据库在一点上逻辑结构。然后抽取这些逻辑对象写入到一个或者多个输出文件。一般一个完整的备份是一个点另一个点(终止点)的连续发生。逻辑备份是不可能记录连续发生的事情的过程的。2.2冷备份与恢复冷备份。又叫脱机备份。就是停掉数据库服务。拷

3、贝数据库数据目录。一般是 data 目录。Oracle 一般是oradata目录。Mysql ,postgres 都是data目录。而且这些默认举例说明。在实质的生产中这些目录文件是变化的。不过不用担心。数据库管理员肯定知道在那里。具体他怎么知道。不同数据库有不同方法。不是本文的重点。为什么要把数据库停掉。才能做数据拷贝?我直接在数据库运行的时候拷贝不一样吗?如果你运气好的好。那样确实也可以。不过不要因为运气。就证明你可以那样做。其实一件事物不但要有证据去证明他。就是还需要一个明确的理论去支持他。不然是容易犯经验主义错误的。一个数据块正被复制。然后他或许前半部分是修该前。后半部分是修改后的。这

4、就是split data .但数据库启动时候,数据库读到这样的数据库块就迷糊了。数据库不一致的错误就出来。数据库肯定提示要你恢复。数据库备份一定要遵循数据库的一致性。2.3热备份与恢复热备份也叫在线备份。什么在线备份,就是数据库在运行的时候一种物理备份。(如果是逻辑的不能叫在线备份。)。不同数据库在线备份都不同。数据库要能热备份。都需要开启数据库归档模式。并设置归档路径。但是有数据库。特别开源数据库对这方面做的非常不好。Postgres 7.3后才有 在线备份。Mysql更是乱的。一个引擎一个种方式。而且有的还不是免费的。怪的很。商用性软件oracle,db2 ,Informix ,就做的好的

5、多。归档究竟有什么意义?如果说逻辑备份是一张照片或者素描,他记录的是点的真实反映或者逻辑印象,那么归档就是录象带。他记录的是一个连续发生的事物的过程。一个开始点的全备份+这个点后的归档+完好的在线redo。那么在这个全备份后所有时间都是可以回放的。三:各数据库的备份恢复对比(以下每种数据库每种备份都可以写一本书,在这里不详细叙述,只概括其作用,在数据库备份与恢复中详细阐述)。(由于第三方备份软件比较,在这个不讨论第三方的问题)。数据库名备份Oracle逻辑备份9i以前 exp/imp i后: 一:exp/imp具体使用也不是本问的初衷逻辑备份。可以备份单个表。逻辑查询语句记录,模式,整个数据库

6、,创建对象语句不包括数据等。花样繁多。不一一列举。 二:expdp/impdp(具体怎么使用也不是本问的初衷)oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中.数据泵导出导入(EXPDP和IMPDP)的作用1,实现逻辑备份和逻辑恢复.2,在数据库用户之间移动对象.3,在数据库之间移动对象4,实现表空间搬移.与exp/imp的区别:expdp/impdp与传统expimp的速度相比:要快的次方以上。EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务段

7、使用.EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.逻辑备份优点与缺点:优点:方便,灵活,不受操作系统,数据库版本等限制。适合处理小数据量,特别适合开发人员迁移数据库。缺点:有数据库丢失。不能实时。速度慢。冷备份冷备份又叫脱机备份。就是停数据库服务。然后Copydatafile,controlfile,spfile,passwdfile。恢复过程也很简单。把相关文件

8、拷贝到相关目录。建立实例。启动数据库既可。热备份Oracle 热备份条件:.必须起用数据库归档模式。热备份可以备份一个数据文件,一个表空间,一个数据库等。热备份备份方式:一:Oracle 备份工具:之rman恢复管理器(Recovery Manager,RMAN)是一个与操作系统无关的数据库备份工具,可以跨越不同的操作系统进行数据库备份。RMAN必须运行在一个数据库上。与常用的数据库备份、逻辑数据库备份不同,RMAN使用数据库对数据库进行备份的原理。在RMAN中,可以使用COPY命令将数据库文件复制到磁盘或磁带上,也可以用BACKUP命令对整个数据库、一个指定的表空间、控制文件、日志文件进行备

9、份备份方式:1:full 全备份,:级增量全备份,他与full备份的区别是可以在这个全备份上做增量备份。而full全备份不可以。:级增量备份。:级增量备份:三级增量备份。详细过程不多说。见详细文档)。二:普通的热备份:alter database begin backup;(9i无),只有alter tablespace begin backup;然后拷贝文件。重点注意:一旦把数据库,或者表空间,数据文件处于备份状态。用copy命令拷贝完成后。一定要alter database end backup; alter tablespace end backup;把数据库或者表空间处于正常状态。Db

10、2逻辑备份Db2loook 导出创建对象的ddl语句。db2move 导入导出对象的数据。如:db2look -d YOURDB -a -e -x -o creatab.sql 导出建库表的SQL db2move YOURDB export vi creatab.sql 如要导入的数据库名与原数据库不同,要修改creatab.sql中CONNECT 项 如相同则不用更改 执行脚本:db2 -tvf creatab.sql db2move NEWDB load (在该目录执行db2move 命令)注:由于某些表数据违反了唯一约束。外键约束可能会有错误出现。不过出错没有关系。可以把出错的表单独处理

11、。冷备份 1)、首先确保没有用户使用DB2:$db2 list applications for db sample 2)、停掉数据库并重新启动,以便断掉所有连接:1.db2stop 2.force db2start 3)、执行备份命令:(使用TSM作为备份的介质)db2 backup db sample use tsm 备份成功,将会返回 一个时间戳。 4)、检查备份成功:Db2 list history backup all for sample ,可以看到多了这个备份的纪录 Db2adutl query命令也可以看到返回值。 5)、备注:离线备份最重要的就是要数据库在offline 做.

12、就是数据库在离线的状态.热备份1)、首先打开一下支持在线备份的数据库配置参数:8.2以前备份:db2 update db cfg for sample using userexit on 启用用户出口db2 update db cfg for sample using logretain on 启用归档日志db2 update db cfg for sample using trackmod on 启用增量备份功能8.2以后db2 update db cfg for sample using LOGARCHMETH1=./db2/backup/(常用办法)(需要各个Node都分别做设置)开启这

13、些参数后,数据库处于backup pending状态,要求做数据库的离线全备份。做一下离线全备份,参考上面的命令。2)、在线备份命令如下:db2 backup db sample online use tsm备份成功,返回一个时间戳。3)、同样可以用db2adutl 和db2 list history察看备份纪录。4)、备注:同样,对每个节点都做这个操作。3、 在线增量备份1)、在开启了必须的三个参数的情况下,做增量备份:db2 backup db sample online incremental use tsm备份成功,返回一个时间戳。2)、同样可以用db2adutl 和db2 list

14、history察看备份纪录。3)、还有一种delta的备份:db2 backup db sample online incremental delta use tsm这两种备份的区别,类似Oracle Exports的Incremental和Cumulative方式,db2的incremental对应.oracle的cumulative方式,而db2的delta方式则对应oracle的incremental方式。4)、备注:同样,对每个节点都做这个操作。postgresql逻辑备份逻辑备份1Pg_dump 如:pg_dump dbname > outfile(导出单个数据库)2pg_du

15、mpall 如: pg_dumpall > outfile(导出所有数据库)3处理大数据库:  3.1:pg_dump dbname | split -b 1m dbname (备份分片)3.2:pg_dump dbname | gzip > filename.gz(备份压缩)逻辑恢复1pg_dump -h host1 dbname | psql -h host2 dbname(从一个数据库备份恢复到另一个数据库)2psql dbname < infile(直接恢复)3. cat filename.gz | gunzip | psql dbname(压缩恢

16、复)冷备份另一个备份的策略是直接拷贝PostgreSQL用于存放数据库数据的文件。 也叫冷备份。是数据块的备份。tar -cf backup.tar /usr/local/pgsql/data 为了进行有效的备份,数据库服务器必须被关闭。象拒绝所有联接这样的折衷的方法是不行的,因为总是有一些缓冲区数据存在。 (主要因为 tar 和类似的工具在做备份的时候并不对文件系统的状态做原子快照)。 如果你曾经深入了解了数据库在文件系统布局的细节,你可能试图从对应的文件或目录里备份几个表或者数据库。 这样做是没用的,因为包含在这些文件里的信息只是部分信息。还有一半信息在提交日志文件 pg_clog/*里面

17、,它包含所有事务的提交状态。 只有拥有这些信息,表文件的信息才是可用的。当然,试图只恢复表和相关的 pg_clog 数据也是徒劳的,因为这样会把数据库集群里的所有其他没有用的表的信息都拿出来。 所以文件系统的备份只适用于一个数据库集群的完整恢复。 热备份PITR 的全称是 Point In Time Recovery, 它结合文件系统级备份 WAL 日志文件, 达到在线增量备份 PostgreSQL 数据库系统. WAL 的全称是 Write Ahead Log, 它记录着数据库修改数据文件的每一个动作. 如果系统挂了, 读入这些日志文件可以很方便快捷安全的恢复数据. 他是数据块的备份。非逻辑

18、备份。在这里我写一个例子来说明:(postgres 故意写的详细点了,自己本来也对postgres也不熟悉,就当练习了)。备份1建立备份目录. 备份分基线 (baseline) 和日志备份, 所以我们要建立两个目录: mkdir -p /opt/backupbasemkdir -p /opt/archive接着我们设定一些环境变量及备份所在目录: export PGDATA=/home/postgres/pgdataexport BACKBASE= /opt/backupbase export ARCHIVE= /opt/archive2设置完上面那些变量后, 编辑 $PGDATA/postg

19、resql.conf 文件, 设置如下: archive_mode = onarchive_command = 'cp %p /opt/archive/%f'所有设置都完成了, 启动或重启 PostgreSQL 服务. 3做一个全库备份。(增量备份的基准点)。psql -d dbname -c "select PG_START_BACKUP('backup baseline')"cp -R $PGDATA/* $BACKBSEpsql -d template1 -c "select PG_STOP_BACKUP()"4.基

20、线备份好后, 就可以时不时的备份日志了, 命令如下: cp -R $PGDATA/pg_xlog/* $ARCHIVE(crontab 定时执行,目的为了减少数据丢失。(linux unix下))或者把wal在线日志处于冗于磁盘上。)日志备份尽可能的频繁一些. 因为当线上提供服务的所在磁盘坏掉, 而你又没有备份 WAL 日志, 你会丢数据. 恢复 1把 baseline 的备份拷贝到新建的数据库一样的/home/postgres/pgdata 目录下. 接着呢, 为了避免恢复还响应连接请求什么的, 我们把服务只开启本地连接, 2修改 $PGDATA/postgresql.conf 文件: listen_addresses = 'localhost'3再下来, 在 $PGDATA 目录下创建一个 recovery.conf 文件. PostgreSQL 启动的时候如果发现 $PGDATA 目录里面有这个文件就会进入恢复模式, 恢复完后会把这个文件重命名为 recovery.done. 文件内容只有一行, 如下: restore_command='cp /opt/archive/%f %p'注意这里是单引号, 别用双引号, 不然会提示错误. 启动数据库: 4.pg_ctl start -D $PGDATA -l /tmp/pg.log这个时候

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论