首页 > Linux操作系统 > Linux操作系统 > [转载] 数据库的备份与恢复概论
|
数据库名 |
备份 | |
|
Oracle |
逻辑备份 |
9i以前 exp/imp 9i后: 一:exp/imp 具体使用也不是本问的初衷 逻辑备份。可以备份单个表。逻辑查询语句记录,模式,整个数据库,创建对象语句不包括数据等。花样繁多。不一一列举。 二:expdp/impdp(具体怎么使用也不是本问的初衷) oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中. 数据泵导出导入(EXPDP和IMPDP)的作用 1,实现逻辑备份和逻辑恢复.2,在数据库用户之间移动对象.3,在数据库之间移动对象 4,实现表空间搬移. 与exp/imp的区别: expdp/impdp与传统exp/imp的速度相比:要快10的2次方以上。 EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务段使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用 IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件. 数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式. 逻辑备份优点与缺点: 优点:方便,灵活,不受操作系统,数据库版本等限制。适合处理小数据量,特别适合开发人员迁移数据库。 缺点:有数据库丢失。不能实时。速度慢。 |
|
冷备份 |
冷备份又叫脱机备份。就是停数据库服务。然后Copy datafile,controlfile,spfile,passwdfile。恢复过程也很简单。把相关文件拷贝到相关目录。建立实例。启动数据库既可。 | |
|
热备份 |
Oracle 热备份条件:1.必须起用数据库归档模式。 热备份可以备份一个数据文件,一个表空间,一个数据库等。 热备份备份方式:一:Oracle 备份工具:之 rman 恢复管理器(Recovery Manager, RMAN)是一个与操作系统无关的数据库备份工具,可以跨越不同的操作系统进行数据库备份。RMAN必须运行在一个数据库上。与常用的数据库备份、逻辑数据库备份不同,RMAN使用数据库对数据库进行备份的原理。 在RMAN中,可以使用COPY命令将数据库文件复制到磁盘或磁带上,也可以用BACKUP命令对整个数据库、一个指定的表空间、控制文件、日志文件进行备份 备份方式: 1:full 全备份, 2: 0级 增量全备份,他与full备份的区别是可以在这个全备份上做增量备份。而full全备份不可以。 3:1 级增量备份。4:2级增量备份 5:三级增量备份。详细过程不多说。见详细文档)。 二:普通的热备份: alter database begin backup;(9i无),只有alter tablespace begin backup;然后拷贝文件。 重点注意:一旦把数据库,或者表空间,数据文件处于备份状态。用copy命令拷贝完成后。一定要alter database end backup; alter tablespace end backup;把数据库或者表空间处于正常状态。 | |
|
Db2 |
逻辑备份 |
Db2loook 导出创建对象的ddl语句。 db2move 导入/导出对象的数据。 如: 1.db2look -d YOURDB -a -e -x -o creatab.sql 导出建库表的SQL 2.db2move YOURDB export 3.vi creatab.sql 如要导入的数据库名与原数据库不同,要修改creatab.sql中CONNECT 项 如相同则不用更改 4.执行脚本:db2 -tvf creatab.sql 5.db2move NEWDB load (在该目录执行db2move 命令) 注:由于某些表数据违反了唯一约束。外键约束可能会有错误出现。不过出错没有关系。可以把出错的表单独处理。 |
|
冷备份 |
1)、首先确保没有用户使用DB2 db2 list applications for db sample2)、停掉数据库并重新启动,以便断掉所有连接: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 做.就是数据库在离线的状态. | |
|
热备份 |
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都分别做设置)开启这些参数后,数据库处于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 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 |
逻辑备份 |
逻辑备份 1.Pg_dump 如:pg_dump dbname > outfile(导出单个数据库) 2.pg_dumpall 如: pg_dumpall > outfile(导出所有数据库) 3.处理大数据库: 3.1:pg_dump dbname | split -b 1m – dbname (备份分片) 3.2:pg_dump dbname | gzip > filename.gz(备份压缩) 逻辑恢复 1.pg_dump -h host1 dbname | psql -h host2 dbname(从一个数据库备份恢复到另一个数据库) 2.psql dbname < infile(直接恢复) 3. cat filename.gz | gunzip | psql dbname(压缩恢复) |
|
冷备份 |
另一个备份的策略是直接拷贝PostgreSQL用于存放数据库数据的文件。 也叫冷备份。是数据块的备份。tar -cf backup.tar /usr/local/pgsql/data 为了进行有效的备份,数据库服务器必须被关闭。象拒绝所有联接这样的折衷的方法是不行的,因为总是有一些缓冲区数据存在。 (主要因为 tar 和类似的工具在做备份的时候并不对文件系统的状态做原子快照)。 如果你曾经深入了解了数据库在文件系统布局的细节,你可能试图从对应的文件或目录里备份几个表或者数据库。 这样做是没用的,因为包含在这些文件里的信息只是部分信息。还有一半信息在提交日志文件 pg_clog/*里面,它包含所有事务的提交状态。 只有拥有这些信息,表文件的信息才是可用的。当然,试图只恢复表和相关的 pg_clog 数据也是徒劳的,因为这样会把数据库集群里的所有其他没有用的表的信息都拿出来。 所以文件系统的备份只适用于一个数据库集群的完整恢复。 | |
|
热备份 |
PITR 的全称是 Point In Time Recovery, 它结合文件系统级备份 WAL 日志文件, 达到在线增量备份 PostgreSQL 数据库系统. WAL 的全称是 Write Ahead Log, 它记录着数据库修改数据文件的每一个动作. 如果系统挂了, 读入这些日志文件可以很方便快捷安全的恢复数据. 他是数据块的备份。非逻辑备份。 在这里我写一个例子来说明:(postgres 故意写的详细点了,自己本来也对postgres也不熟悉,就当练习了)。 备份 1.建立备份目录. 备份分基线 (baseline) 和日志备份, 所以我们要建立两个目录: mkdir -p /opt/backupbase mkdir -p /opt/archive 接着我们设定一些环境变量及备份所在目录: export PGDATA=/home/postgres/pgdata export BACKBASE= /opt/backupbase export ARCHIVE= /opt/archive 2.设置完上面那些变量后, 编辑 $PGDATA/postgresql.conf 文件, 设置如下: archive_mode = on archive_command = 'cp %p /opt/archive/%f' 所有设置都完成了, 启动或重启 PostgreSQL 服务. 3.做一个全库备份。(增量备份的基准点)。 psql -d dbname -c "select PG_START_BACKUP('backup baseline')" cp -R $PGDATA/* $BACKBSE psql -d template1 -c "select PG_STOP_BACKUP()" 4.基线备份好后, 就可以时不时的备份日志了, 命令如下: 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 这个时候观察 /tmp/pg.log 文件, 会发现正在恢复一个一个的 WAL 日志文件。 最后, 恢复完后, 再把 $PGDATA/postgresql.conf 文件中的 listen_addresses 改回来:重启: pg_ctl restart -D $PGDATA -l /tmp/pg.log | |
|
Mysql |
|
mysqlhotcopy 其命令格式如下(摘自MYSQL文档): shell> mysqlhotcopy db_name /path/to/some/dir 只要服务器不再进行更新,还可以只复制所有表文件(*.frm、*.MYD和*.MYI文件)。mysqlhotcopy脚本使用该方法。(但请注意如果数据库包含InnoDB表,这些方法不工作。InnoDB不将表的内容保存到数据库目录中,mysqlhotcopy只适合MyISAM表)。 mysqldump mysqldump提供在线逻辑备份,我们在备份的时候使用single-transaction参数的话,MYSQL为我们提供一致性地读,并且保证mysqldump所看见的数据不会更改。(其它客户端对InnoDB表进行的更改不会被mysqldump进程看见)该参数自动关闭--lock-tables。如果我们还有其它类型的表,我们必须假定在备份过程中它们不会更改。例如,对于mysql数据库中的MyISAM表,我们必须假定在备份过程中没有对MySQL账户进行管理更改。mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,可以用来重载转储的表。 这里只简单说明一下,详细见以后阐述。 |
|
Informix |
|
|
|
Sqlserver |
|
|
|
其他 |
|
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/35489/viewspace-538070/ ,如需转载,请注明出处,否则将追究法律责任。