5.5 备份与恢复

5.5 备份与恢复

使得数据不被损坏或丢失

数据库备份——是指将数据库当前数据和状态进行副本复制,以便数据库受到破坏或丢失数据时可以进行修复

数据库恢复——是指数据库中数据丢失或被破坏时,从备份副本将数 据库从错误状态恢复到某一正确状态

5.5.1 数据库备份

0.备份角色

三者之一都可

  • 可以是服务器管理员
  • 数据库所有者
  • 数据库备份员

1.备份内容

  • 包括数据文件、日志文件等。

2.备份方式

分类1:备份多少

(1)完整数据库备份

备份整个数据库。耗时长

每隔一个周期,定时进行一次

(2)差异数据库备份

差异,只备份自上次备份以来变化的数据,比完整的耗时短。

这种数据库备份方式适合于数据变化频繁的数据库系统,可以减少数据丢失的风险。

(3)事务日志备份

事务日志备份是一种只备份自上一次日志备份以来的事务日志数据。

事务日志备份所需要的时间和空间比差异数据库备份更少,而且它可以支持事务的回滚操作

使用事务日志备份文件可以将数据库恢复到故障点时刻的状态,相比差异数据库备份,它可进一步减少数据丢失风险,适合于数据变化频繁的数据库系统。

(4)文件备份

数据库通常由存储在磁盘上的若干数据文件构成。可以直接通过复制数据库文件方式实现数据库备份。

这种文件备份方式与事务日志备份方式结合才有实际意义

分类2:备份时是否停止运行

1 、冷备份

当数据库实例处于关闭状态时,进行的数据库备份被称为冷备份。

能够很好地保证数据库完整性备份,不会出现丢失数据的情况,但数据库实例必须停止运行。因此,基于数据库的业务系统会被暂时终止工作

2、热备份

在数据库实例处于运行状态下,进行的数据库备份被称为热备份。

这种备份方式能够较好地实现实时数据备份,但会对数据库服务器、备份服务器及网络系统带来处理的复杂性,并且影响生产系统的性能

3.备份设备

(1)磁盘阵列

由多个硬磁盘介质组成的阵列存储设备,它具有存取速度快、可靠性高、稳定性好、存储容量较大

应用:这类存储设备通常作为中央存储系统或作为备份系统

(2)磁带库

一种具有自动加载磁带介质的备份系统,它能够提供基本的自动备份和数据恢复功能

存储容量大、单位存储成本低 但它只能实现顺序存储且读/写速度较慢。

应用:海量数据存储的备份设备。

(3)光盘库

一种带有自动换盘机构的光盘存储设备。性价比高

5.5.2 PostgreSQL数据库的备份方法

使用2个实用程序工具进行数据库备份

  • pg_dump实用程序工具用于备份单个数据库,或者数据库中的Schema、数据库表。
  • pg_dumpall实用程序工具用于备份整个数据库集群及系统全局数据库。

备份格式:可以是SQL文件格式,也可以是用户自定义压缩文件格式、TAR包格式或目录格式。

(1)使用pg_dump实用程序工具进行数据备份

命令格式

pg_dump [连接选项][一般选项][输出控制选项] 数据库名称

可使用如下3类选项参数进行相应的备份操作。

① 连接选项

d, --dbname=DBNAME 指定需备份的数据库名 DBNAME
-h, --host=主机名 数据库服务器的主机名或套接字目录
-p, --port=端口号 数据库服务器的端口号
-U, --username=名称 以指定的数据库用户连接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)
--role=ROLENAME 在转储前运行SET ROLE

② 一般选项

-f, --file=FILENAME 输出文件或目录名
-F, --format=c|d|t|p 输出文件格式(定制|目录| tar|纯文本)
-j, --jobs=NUM 执行多个并行任务进行备份转储工作
-v, --verbose 详细信息模式
-V, --version 输出版本信息,然后退出
-Z, --compress=0-9 被压缩格式的压缩级别
--lock-wait-timeout=TIMEOUT 在等待锁表超时后操作失败
-?, --help 显示此帮助, 然后退出

③ 输出控制选项

-a, --data-only 只转储数据,不包括schema
-b, --blobs 在转储中包括大对象
-c, --clean 在重新创建之前清除(删除)数据库对象
-C, --create 在转储中包括命令,以便创建数据库
-E, --encoding=ENCODING 转储以ENCODING格式编码的数据
-n, --schema=SCHEMA 只转储指定名称的schema
-N, --exclude-schema=SCHEMA 不转储指定名称的schema
-o, --oids 在转储中包括OID
-O, --no-owner 在纯文本格式跳过对象所属者的恢复
-s, --schema-only 只转储schema, 不包括数据
-S, --superuser=NAME 在纯文本格式中使用指定的超级用户名
-t, --table=TABLE 只转储指定名称的表
-T, --exclude-table=TABLE 不转储指定名称的表
-x, --no-privileges 不要转储权限(GRANT/REVOKE)
--binary-upgrade 仅提供升级工具使用
--column-inserts 以带有列名的INSERT命令形式转储数据
--disable-dollar-quoting 禁用美元(符号)引号,使用SQL标准引号
--disable-triggers 在仅恢复数据的过程中禁用触发器
--enable-row-security 启用行安全性(只转储用户能够访问的内容)
--exclude-table-data=TABLE 不转储指定名称的表中数据
--if-exists 当删除对象时使用IF EXISTS
--inserts 以INSERT命令而不是COPY命令的形式转储数据
--no-security-labels 不转储安全标签的分配
--no-synchronized-snapshots 在并行工作集中不使用同步快照
--no-tablespaces 不转储表空间分配信息
--no-unlogged-table-data 不转储没有日志的表数据
--quote-all-identifiers 所有标识符加引号,即使不是关键字
--section=SECTION 备份命名的节(数据前、数据中及数据后)
--serializable-deferrable 等待直到转储正常运行为止
--snapshot=SNAPSHOT 为转储使用给定的快照
--strict-names 要求每个表和/或schema包括模式以匹配至少一个实体
--use-set-session-authorization 使用SESSION AUTHORIZATION命令代替ALTER OWNER 命令来设置所有权

【例5-17】将ProjectDB数据库备份到磁盘文件g:\ProjectDB.sql,执行的pg_dump命令如下。

pg_dump -h localhost -p 5432 -U postgres –f g:\ProjectDB.sql ProjectDB

【例5-18】将ProjectDB数据库的public模式下的对象备份到磁盘文件g:\ProjectDBpublic.sql,执行的pg_dump命令如 下。

pg_dump -h localhost -p 5432 -U postgres -n public –f g:\ProjectDB-public.sql ProjectDB

(2)使用pg_dumpall实用程序工具进行数据备份

命令格式

pg_dumpall [连接选项][一般选项][输出控制选项]

如下3类选项参数进行相应的备份操作

① 连接选项

-d, --dbname=CONNSTR 连接数据库使用的连接串
-h, --host=主机名 数据库服务器的主机名或套接字目录
-p, --port=端口号 数据库服务器的端口号
-U, --username=名称 以指定的数据库用户连接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)
--role=ROLENAME 在转储前运行SET ROLE

② 一般选项

-f, --file=FILENAME 输出文件或目录名
-v, --verbose 详细信息模式
-V, --version 输出版本信息,然后退出
--lock-wait-timeout=TIMEOUT 在等待锁表超时后操作失败
-?, --help 显示此帮助, 然后退出

③ 输出控制选项

-a, --data-only 只转储数据,不包括schema
-c, --clean 在重新创建数据库前清除(删除)数据库
-g, --globals-only 只转储全局对象,不包括数据库
-o, --oids 在转储中包括 OID
-O, --no-owner 不恢复对象所属者
-r, --roles-only 只转储角色,不包括数据库或表空间
-s, --schema-only 只转储模式,不包括数据
-S, --superuser=NAME 在转储中使用指定的超级用户名
-t, --tablespaces-only 只转储表空间,而不转储数据库或角色
-x, --no-privileges 不要转储权限(GRANT/REVOKE)
--binary-upgrade 只能由升级工具使用
--column-inserts 以带有列名的INSERT命令形式转储数据
--disable-dollar-quoting 取消美元(符号)引号, 使用 SQL 标准引号
--disable-triggers 在只恢复数据的过程中禁用触发器
--if-exists 当删除对象时使用IF EXISTS
--inserts 以INSERT命令而不是COPY命令的形式转储数据
--no-security-labels 不转储安全标签的分配
--no-tablespaces 不转储表空间分配信息
--no-unlogged-table-data 不转储没有日志的表数据
--quote-all-identifiers 所有标识符加引号,即使不是关键字
--use-set-session-authorization 使用SESSION AUTHORIZATION 命令代替ALTER OWNER 命令来设置所有权

【例5-19】将当前数据库的各个数据库备份到磁盘文件g:\PostgreAllDB.sql,执行的 pg_dumpall命令如下

pg_dumpall -h localhost -p 5432 -U postgres –f g:\PostgreAllDB.sql

5.5.3 数据库恢复

使数据库系统恢复到故障发生前的备份时刻状态。

1.什么情况对应什么恢复

在数据库系统运行过程中,各种意外事件可能导致数据丢失或数据库损坏。例如,事务故障、系统崩溃、人为误操作、系统断电、硬件故障、存储介质损坏等。

这些意外事件会使数据库处于不正确的状态,需要采取相应的恢复策略对数据库进行恢复处理。

(1)事务故障的数据恢复

对事务进行回滚操作处理

数据恢复处理由DBMS自动完成。

(2)系统崩溃的数据恢复
系统崩溃指数据库服务器系统在运行中由于出现意外事件(如突然断电、硬件故障等)而非正常终止。

需要数据库系统日志文件在系统重启过程中,对数据库进行恢复操作处理,使数据库恢复到系统崩溃前的状态。

该数据恢复处理由DBMS自动完成。

(3)存储介质损坏的数据恢复

只能在新介质上重建数据库系统,并将最近一次的数据库完整备份文件版本进行基本数据恢复,然后使用该版本之后的数据库差异备份版本和事务日志备份文件逐一进行数据库恢复处理

该处理需要系统管理员使用专门恢复工具和备份文件来完成。

2.恢复技术

数据库恢复技术是利用数据库备份文件和数据库事务日志文件来实现数据库恢复处理。

应根据用户恢复要求,采用前滚事务方式或回滚事务方式恢复数据库。

前像数据是数据库故障时刻之前所记录的事务修改数据。

后像数据是数据库备份时刻到故障时刻期间所记录的事务修改数据。

前滚事务恢复方式

如果用户希望使用故障前的数据库备份文件进行恢复处理,可采用前滚事务恢复方式将数据库恢复到故障发生前 一时刻的数据库状态。

这是在数据库备份版本基础上,通过系统执行事务日志文件中记录的操作命令来实现数据库恢复处理,即将系统记录的后像数据重新应用到数据库中,从而将数据库恢复到故障发生前一时刻的状态。

回滚事务恢复方式

用户希望使用故障后的数据库进行恢复处理时,可采用回滚事务恢复方式将数据库恢复到故障发生前一时刻的 数据库状态。

这是在故障后的数据库基础上,通过系统回滚事务操作来实现的。在恢复处理时,取消错误执行或部分 完成的事务对数据库的修改,将系统记录的前像数据恢复到数据库中,从而将数据库恢复到故障发生前一时刻的状 态。

5.5.4 PostgreSQL数据库的恢复方法

1.使用实用程序工具操作方式恢复数据备份

PostgreSQL数据库系统提供了两种实用程序操作方式恢复数据备份:

使用psql程序工具来恢复pg_dump或pg_dumpall工具创建的SQL 文本格式数据备份文件;

使用pg_restore程序工具来恢复pg_dump工具创建的自定义压缩格式、TAR包格式或目录格式的数据备份文件。

(1)使用psql实用程序工具恢复SQL文本格式的数据备份

若数据库备份是以SQL文本格式存储的文件,其备份数据内容均为SQL语句。当进行数据备份恢复时,使用psql 程序工具执行备份数据文件中的 SQL语句,即可实现数据库恢复处理。

psql程序工具恢复数据备份文件的基本语句格式为

psql [连接选项] –d 恢复的数据库 –f 备份文件

在操作系统中执行psql时,可使用如下选项参数进行相应的备份数据恢复。

-h, --host=主机名 数据库服务器主机
-p, --port=端口 数据库服务器的端口(默认为“5432”)
-U, --username=用户名 指定数据库用户名(默认为“postgres”)
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)

【例】 使数据恢复 文件g:\ProjectDB.sql对ProjectDB数据库进行恢复处理

psql -h localhost -p 5432 -U postgres –d ProjectDB –f g:\ProjectDB.sql

当psql程序完全正确执行备份文件g:\ProjectDB.sql的所有语句之后,ProjectDB数据库将被恢复到备份时刻状态

(2)使用pg_restore实用程序工具恢复其他格式的数据备份 若数据库备份以自定义压缩格式、TAR包格式或目录格式存储数据备份文件,则需要使用pg_restore实用程序工具 进行数据备份恢复处理。pg_restore实用程序工具恢复数据备份文件的基本语句格式为

pg_restore [连接选项] [一般选项] [恢复控制选项] 备份文件

pg_restore时,可使用如下选项参数进行相应的备份数据恢复。

① 连接选项

-h, --host=主机名 数据库服务器主机
-p, --port=端口 数据库服务器的端口(默认为“5432”)
-U, --username=用户名 指定数据库用户名(默认为“postgres”)
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示(自动)

② 一般选项

-d, --dbname=名称 连接数据库名称
-f, --file=文件名 输出文件名
-F, --format=c|d|t 备份文件格式(应该自动进行)
-l, --list 打印归档文件的TOC概述
-v, --verbose 详细模式
-V, --version 输出版本信息, 然后退出
-?, --help 显示此帮助, 然后退出

③ 恢复控制选项

-a, --data-only 只恢复数据,不包括模式
-c, --clean 在重新创建之前清除(删除)数据库对象
-C, --create 创建目标数据库
-e, --exit-on-error 发生错误时退出,默认为继续
-I, --index=NAME 恢复指定名称的索引
-j, --jobs=NUM 执行多个并行任务,进行恢复工作
-L,--use-list=FILENAME 文件中指定的内容表排序输出
-n, --schema=NAME 在这个模式中只恢复对象
-O, --no-owner 不恢复对象所属者
-P, --function=NAME(args) 恢复指定名称的函数
-s, --schema-only 只恢复模式,不包括数据
-S, --superuser=NAME 使用指定的超级用户来禁用触发器
-t, --table=NAME restore named relation (table, view, etc.)
-T, --trigger=NAME 恢复指定名称的触发器
-x, --no-privileges 跳过处理权限的恢复(GRANT/REVOKE)
-1, --single-transaction 作为单个事务恢复
--disable-triggers 在只恢复数据的过程中禁用触发器
--enable-row-security 启用行安全性
--if-exists 当删除对象时使用IF EXISTS
--no-data-for-failed-tables 对那些无法创建的表不进行数据恢复
--no-security-labels 不恢复安全标签信息
--no-tablespaces 不恢复表空间的分配信息
--section=SECTION 恢复命名节(数据前、数据中及数据后)
--strict-names 要求每个表和/或schema包括模式,以匹配至少一个实体
--use-set-session-authorization使用SESSION AUTHORIZATION命令代替ALTER OWNER 命令来设置所有权

【例】恢复实例

pg_restore -h localhost -p 5432 -U postgres –d ProjectDB -c g:\ProjectDB.bak
posted @ 2022-04-24 22:03  Dinesaw  阅读(685)  评论(0编辑  收藏  举报