简介
本指导书适用于openGauss数据库,通过该指导书可以了解openGauss数据库支持的两种备份恢复类型、多种备份恢复方案,并能够在备份和恢复过程中提供数据的可靠性保障机制。
内容描述
数据备份是保护数据安全的重要手段之一,为了更好的保护数据安全,openGauss数据库支持两种备份恢复类型、多种备份恢复方案,备份和恢复过程中提供数据的可靠性保障机制。
备份与恢复类型可分为逻辑备份与恢复、物理备份与恢复。
前置条件
- 由于本实验主要是在openEuler操作系统上进行数据库的备份和恢复,需要掌握Linux系统的基本操作和系统命令。
- 实验前提和数据库恢复验证中需要掌握openGauss数据库的基本操作和SQL语法,openGauss数据库支持SQL2003标准语法。
实验环境说明
- 组网说明
本实验环境为openGauss数据库管理系统,安装在华为云openEuler弹性服务器ECS上。 - 设备介绍
为了满足数据库原理与实践课程实验需要,建议每套实验环境采用以下配置:
设备名称、型号与版本的对应关系如下:
设备明显表
设备名称 | 设备型号 | 软件版本 |
---|---|---|
数据库 | openGauss | openGauss 1.0.0 |
操作系统 | openEuler | openEuler 20.3LTS |
实验概览
数据库备份恢复
实验介绍
关于本实验
本实验主要描述openGauss数据库支持的两种备份恢复类型、多种备份恢复方案,并能够在备份和恢复过程中提供数据的可靠性保障机制。
实验目的
- 掌握openGauss数据库中逻辑备份与恢复方法;
- 掌握openGauss数据库物理备份与恢复的方法;
- 能够在备份和恢复过程中提供数据的可靠性保障机制。
实验前提
在对数据库进行备份前,对数据库进行如下操作:
步骤 1 切换到omm用户,以操作系统用户omm登录数据库主节点。
su – omm
步骤 2 启动数据库服务
gs_om -t start
步骤 3 连接openGauss数据库。
gsql -d postgres -p 26000 -r
步骤 4 创建customer_t1表。
postgres=#DROP TABLE IF EXISTS customer_t1;
postgres=#CREATE TABLE customer_t1
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
步骤 5 向表中插入数据。
postgres=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES
(3769, 'hello', DEFAULT) ,
(6885, 'maps', 'Joes'),
(4321, 'tpcds', 'Lily'),
(9527, 'world', 'James');
显示结果为:
INSERT 0 4
步骤 6 查看表中的数据。
postgres=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(4 rows)
步骤 7 创建customer_t2表
postgres=#DROP TABLE IF EXISTS customer_t2;
postgres=#CREATE TABLE customer_t2
(
c_customer_sk integer,
c_customer_id char(5),
c_first_name char(6),
c_last_name char(8)
);
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
步骤 8 向表中插入数据
postgres=# INSERT INTO customer_t2 (c_customer_sk, c_customer_id, c_first_name) VALUES
(3769, 'hello', DEFAULT) ,
(6885, 'maps', 'Joes'),
(9527, 'world', 'James');
显示结果为:
INSERT 0 3
步骤 9 查看表中数据。
select * from customer_t2;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
3769 | hello | |
6885 | maps | Joes |
9527 | world | James |
(3 rows)
步骤 10 创建用户lucy。
postgres=# DROP user IF EXISTS lucy;
postgres=# CREATE USER lucy WITH PASSWORD "Bigdata@123";
步骤 11 切换到Lucy用户。
postgres=# \c - lucy
Password for user lucy:
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "postgres" as user "lucy".
步骤 12 创建lucy shema的表。
postgres=# DROP TABLE IF EXISTS lucy.mytable;
postgres=# CREATE TABLE mytable (firstcol int);
步骤 13 向表中插入数据。
postgres=# INSERT INTO mytable values (100);
当结果显示为如下信息,则表示插入数据成功。
INSERT 0 1
步骤 14 查看表中数据。
postgres=# SELECT * from mytable;
显示结果为:
firstcol
----------
100
(1 row)
步骤 15退出数据库:
postgres=#\q
物理备份和恢复
openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_basebackup工具做基础备份。gs_basebackup工具由操作系统用户omm执行。
实验前提
在数据库备份之前创建存储备份文件的文件夹。
步骤 1 切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 创建存储备份文件的文件夹。
mkdir -p /home/omm/physical/backup
物理备份
步骤 1 如果数据库服务没有启动,就启动数据库服务(务必以操作系统用户omm启动数据库服务,如果没有请切换用户)。
gs_om -t start
结果显示为:
Starting cluster.
=========================================
=========================================
Successfully started.
步骤 2 将数据库进行物理备份。
gs_basebackup -D /home/omm/physical/backup -p 26000
参数-D directory表示备份文件输出的目录,必选项。
结果显示为:
INFO: The starting position of the xlog copy of the full build is: 1/D5000028. The slot minimum LSN is: 0/0.
begin build tablespace list
finish build tablespace list
begin get xlog by xlogstream
check identify system success
send START_REPLICATION 1/D5000000 success
keepalive message is received
keepalive message is received
keepalive message is received
keepalive message is received
keepalive message is received
keepalive message is received
keepalive message is received
keepalive message is received
步骤 3 切换到存储备份文件夹查看备份文件。
cd /home/omm/physical/backup
ls
显示如下:
backup_label mot.conf pg_errorinfo pg_llog pg_snapshots pg_xlog server.key
base pg_clog pg_hba.conf pg_multixact pg_stat_tmp postgresql.conf server.key.cipher
cacert.pem pg_copydir pg_hba.conf.bak pg_notify pg_tblspc postgresql.conf.bak server.key.rand
global pg_csnlog pg_hba.conf.lock pg_replslot pg_twophase postgresql.conf.lock
gswlm_userinfo.cfg pg_ctl.lock pg_ident.conf pg_serial PG_VERSION server.crt
物理备份恢复
当数据库发生故障时需要从备份文件进行恢复。因为gs_basebackup是对数据库按二进制进行备份,因此恢复时可以直接拷贝替换原有的文件, 或者直接在备份的库上启动数据库。
说明:
- 若当前数据库实例正在运行,直接从备份文件启动数据库可能会存在端口冲突,这时,需要修配置文件的port参数,或者在启动数据库时指定一下端口。
- 若当前备份文件为主备数据库,可能需要修改一下主备之间的复制连接。即配置文件中的postgre.conf中的replconninfo1,replconninfo2等。
当数据库发生问题需要从备份进行恢复时,步骤如下:
步骤 1 停止openGauss((务必以操作系统用户omm停止数据库服务,如果没有请切换用户)。
gs_om -t stop
显示的结果为:
Stopping cluster.
=========================================
Successfully stopped cluster.
=========================================
End stop cluster.
步骤 2 清理原库中的所有或部分文件。
cd /gaussdb/data/
ls
查看数据库节点文件夹名称(文件夹名称是数据库安装时定义的,不同数据可能不同)。
db1
查看文件列表如下:
cd db1
ls
base mot.conf pg_errorinfo pg_llog pg_serial PG_VERSION postmaster.opts
cacert.pem pg_clog pg_hba.conf pg_location pg_snapshots pg_xlog server.crt
gaussdb.state pg_copydir pg_hba.conf.bak pg_multixact pg_stat_tmp postgresql.conf server.key
global pg_csnlog pg_hba.conf.lock pg_notify pg_tblspc postgresql.conf.bak server.key.cipher
gswlm_userinfo.cfg pg_ctl.lock pg_ident.conf pg_replslot pg_twophase postgresql.conf.lock server.key.rand
删除文件,对数据库文件进行破坏。
rm -rf *
ls
删除文件后,列表如下:
base pg_clog pg_csnlog pg_llog pg_multixact pg_replslot pg_snapshots pg_tblspc pg_xlog
global pg_copydir pg_errorinfo pg_location pg_notify pg_serial pg_stat_tmp pg_twophase
或者为空:
[omm@ecs-ecs-c9bf db1]$
步骤 3 使用数据库系统用户权限从备份中还原需要的数据库文件,"/gaussdb/data/db1"中db1是数据库节点文件夹名称,不同数据库可能不同请查看确认。
cp -r /home/omm/physical/backup/. /gaussdb/data/db1
备份时间大概需要几分钟,恢复后文件列表如下:
cd /gaussdb/data/db1
ls
backup_label.old mot.conf pg_hba.conf pg_multixact pg_tblspc postgresql.conf.lock server.key.rand
base pg_clog pg_hba.conf.bak pg_notify pg_twophase postmaster.opts
cacert.pem pg_copydir pg_hba.conf.lock pg_replslot PG_VERSION postmaster.pid
gaussdb.state pg_csnlog pg_ident.conf pg_serial pg_xlog server.crt
global pg_ctl.lock pg_llog pg_snapshots postgresql.conf server.key
gswlm_userinfo.cfg pg_errorinfo pg_location pg_stat_tmp postgresql.conf.bak server.key.cipher
若数据库中存在链接文件, 需要修改使其链接到正确的文件。
步骤 4 重启数据库服务器, 并检查数据库内容,确保数据库已经恢复到所需的状态。
gs_om -t start
Starting cluster.
=========================================
=========================================
Successfully started.
逻辑备份和恢复
通过逻辑导出对数据进行备份,逻辑备份只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。对于故障点和备份点之间的数据,逻辑备份无能为力,逻辑备份适合备份那些很少变化的数据,当这些数据因误操作被损坏时,可以通过逻辑备份进行快速恢复。如果通过逻辑备份进行全库恢复,通常需要重建数据库,导入备份数据来完成,对于可用性要求很高的数据库,这种恢复时间太长,通常不被采用。由于逻辑备份具有平台无关性,所以更为常见的是逻辑备份被作为一个数据迁移及移动的主要手段。
实验前提
在数据库备份之前创建存储备份文件的文件夹。
步骤 1 切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 创建存储备份文件的文件夹。
mkdir -p /home/omm/logical/backup
gs_dump
注意事项
- 如果openGauss有任何本地数据要添加到template1数据库,请将gs_dump的输出恢复到一个真正的空数据库中,否则可能会因为被添加对象的定义被复制,出现错误。要创建一个无本地添加的空数据库,需从template0而非template1复制,例如:
CREATE DATABASE foo WITH TEMPLATE template0;
- tar归档形式的文件大小不得超过8GB(tar文件格式的固有限制)。tar文档整体大小和任何其他输出格式没有限制,操作系统可能对此有要求。
- 由gs_dump生成的转储文件不包含优化程序用来做执行计划决定的统计数据。因此,最好从某转储文件恢复之后运行ANALYZE以确保最佳效果。转储文件不包含任何ALTER DATABASE…SET命令,这些设置由gs_dumpall转储,还有数据库用户和其他完成安装设置。
- 使用gs_dump转储数据库为SQL文本文件或其它格式的操作:示例中“Bigdata@123”表示数据库用户密码“/home/omm/logical/backup/MPPDB_backup.sql”表示导出的文件;“26000”表示数据库服务器端口;“postgres”表示要访问的数据库名。
说明:导出操作时,请确保该目录存在并且当前的操作系统用户对其具有读写权限。
gs_dump备份示例1
执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.sql文件格式为纯文本格式。
步骤 1 以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 执行gs_dump,导出的MPPDB_backup.sql文件格式为纯文本格式。
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup.sql -p 26000 postgres -F p
执行后显示为:
gs_dump[port='26000'][postgres][2020-07-29 14:00:49]: The total objects number is 348.
gs_dump[port='26000'][postgres][2020-07-29 14:00:49]: [100.00%] 348 objects have been dumped.
gs_dump[port='26000'][postgres][2020-07-29 14:00:49]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-07-29 14:00:49]: total time: 176 ms
步骤 3 切换到backup文件夹,查看MPPDB_backup.sql文件。
ll /home/omm/logical/backup/
total 4.0K
-rw------- 1 omm dbgrp 2.7K Jul 29 14:00 MPPDB_backup.sql
cat /home/omm/logical/backup/MPPDB_backup.sql
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET xmloption = content;
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
--
-- Name: postgres; Type: COMMENT; Schema: -; Owner: omm
--
COMMENT ON DATABASE postgres IS 'default administrative connection database';
--
-- Name: lucy; Type: SCHEMA; Schema: -; Owner: lucy
--
CREATE SCHEMA lucy;
ALTER SCHEMA lucy OWNER TO lucy;
SET search_path = lucy;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: mytable; Type: TABLE; Schema: lucy; Owner: lucy; Tablespace:
--
CREATE TABLE mytable (
firstcol integer
)
WITH (orientation=row, compression=no);
ALTER TABLE lucy.mytable OWNER TO lucy;
SET search_path = public;
--
-- Name: customer_t1; Type: TABLE; Schema: public; Owner: omm; Tablespace:
--
CREATE TABLE customer_t1 (
a integer,
b integer,
c integer,
d integer
)
WITH (orientation=row, compression=no);
ALTER TABLE public.customer_t1 OWNER TO omm;
……
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM omm;
GRANT ALL ON SCHEMA public TO omm;
GRANT USAGE ON SCHEMA public TO PUBLIC;
--
-- PostgreSQL database dump complete
--
gs_dump备份示例2
执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.tar文件格式为tar格式。
步骤 1 以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 执行gs_dump,导出的MPPDB_backup.tar文件格式为tar格式。
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup.tar -p 26000 postgres -F t
运行后的结果为:
gs_dump[port='26000'][postgres][2020-07-28 16:19:14]: The total objects number is 341.
gs_dump[port='26000'][postgres][2020-07-28 16:19:14]: [100.00%] 341 objects have been dumped.
gs_dump[port='26000'][postgres][2020-07-28 16:19:14]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-07-28 16:19:14]: total time: 169 ms
步骤 3查看生成的文件信息。
ll /home/omm/logical/backup/
total 12K
-rw------- 1 omm dbgrp 1.5K Jul 28 13:47 MPPDB_backup.sql
-rw------- 1 omm dbgrp 8.0K Jul 28 19:31 MPPDB_backup.tar
gs_dump备份示例3
执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup.dmp文件格式为自定义归档格式。
步骤 1 以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 执行gs_dump,导出的MPPDB_backup.dmp文件格式为自定义归档格式。
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 postgres -F c
运行后的结果为:
gs_dump[port='26000'][postgres][2020-07-28 19:32:20]: The total objects number is 341.
gs_dump[port='26000'][postgres][2020-07-28 19:32:20]: [100.00%] 341 objects have been dumped.
gs_dump[port='26000'][postgres][2020-07-28 19:32:20]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-07-28 19:32:20]: total time: 167 ms
步骤 3 查看生成的文件信息。
ll /home/omm/logical/backup/
total 16K
-rw------- 1 omm dbgrp 2.5K Jul 28 19:32 MPPDB_backup.dmp
-rw------- 1 omm dbgrp 1.5K Jul 28 13:47 MPPDB_backup.sql
-rw------- 1 omm dbgrp 8.0K Jul 28 19:31 MPPDB_backup.tar
gs_dump备份示例4
执行gs_dump,导出postgres数据库全量信息,导出的MPPDB_backup文件格式为目录格式。
步骤 1 以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 执行gs_dump,导出的MPPDB_backup文件格式为目录格式。
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/MPPDB_backup -p 26000 postgres -F d
运行后的结果为:
gs_dump[port='26000'][postgres][2020-07-28 19:35:59]: The total objects number is 341.
gs_dump[port='26000'][postgres][2020-07-28 19:35:59]: [100.00%] 341 objects have been dumped.
gs_dump[port='26000'][postgres][2020-07-28 19:35:59]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-07-28 19:35:59]: total time: 173 ms
步骤 3查看生成的文件信息。
ll /home/omm/logical/backup/
total 20K
drwx------ 2 omm dbgrp 4.0K Jul 28 19:35 MPPDB_backup
-rw------- 1 omm dbgrp 2.5K Jul 28 19:32 MPPDB_backup.dmp
-rw------- 1 omm dbgrp 1.5K Jul 28 13:47 MPPDB_backup.sql
-rw------- 1 omm dbgrp 8.0K Jul 28 19:31 MPPDB_backup.tar
gs_dump备份示例5
执行gs_dump,导出postgres数据库的表(或视图、或序列、或外表)对象,例如表customer_t1。
步骤 1以操作系统用户omm登录数据库主节点。
su - omm
步骤 2执行gs_dump,导出的表customer_t1。
gs_dump -U omm -W Bigdata@123 -f /home/omm/logical/backup/bkp_shl2.sql -t public.customer_t1 -p 26000 postgres
运行后的结果为:
gs_dump[port='26000'][postgres][2020-08-15 19:54:12]: The total objects number is 336.
gs_dump[port='26000'][postgres][2020-08-15 19:54:12]: [100.00%] 336 objects have been dumped.
gs_dump[port='26000'][postgres][2020-08-15 19:54:12]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-08-15 19:54:12]: total time: 157 ms
步骤 3查看生成的文件信息。
ll /home/omm/logical/backup/
total 480K
-rw------- 1 omm dbgrp 939 Aug 15 19:54 bkp_shl2.sql
drwx------ 2 omm dbgrp 4.0K Aug 15 19:39 MPPDB_backup
-rw------- 1 omm dbgrp 112K Aug 15 19:38 MPPDB_backup.dmp
-rw------- 1 omm dbgrp 110K Aug 15 19:33 MPPDB_backup.sql
-rw------- 1 omm dbgrp 248K Aug 15 19:36 MPPDB_backup.tar
步骤 4查看生成的sql文件。
cat /home/omm/logical/backup/bkp_shl2.sql
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET xmloption = content;
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: customer_t1; Type: TABLE; Schema: public; Owner: omm; Tablespace:
--
CREATE TABLE customer_t1 (
c_customer_sk integer,
c_customer_id character(5),
c_first_name character(6),
c_last_name character(8)
)
WITH (orientation=row, compression=no);
ALTER TABLE public.customer_t1 OWNER TO omm;
--
-- Data for Name: customer_t1; Type: TABLE DATA; Schema: public; Owner: omm
--
COPY customer_t1 (c_customer_sk, c_customer_id, c_first_name, c_last_name) FROM stdin;
3769 hello \N \N
6885 maps Joes \N
4321 tpcds Lily \N
9527 world James \N
\.
;
--
-- PostgreSQL database dump complete
--
gs_dump备份示例6
执行gs_dump,导出postgres数据库信息,但不导出/home/MPPDB_temp.sql中指定的表信息。导出的MPPDB_backup.sql文件格式为纯文本格式。
步骤 1以操作系统用户omm登录数据库主节点。
su - omm
步骤 2创建MPPDB_temp.sql,填写不导出的表的表名。例如customer_t1表。
vi /home/omm/logical/MPPDB_temp.sql
输入”i”,切换到INSERT模式,输入”public.customer_t1”,按下”ESC”,并输入”:wq”后回车保存后退出。
步骤 3 执行gs_dump,导出postgres数据库信息,但不导出MPPDB_temp.sql中指定的表信息。
gs_dump -U omm -W Bigdata@123 -p 26000 postgres --exclude-table-file=/home/omm/logical/MPPDB_temp.sql -f /home/omm/logical/backup/MPPDB_backup2.sql
运行后的结果为:
gs_dump[port='26000'][postgres][2020-08-15 20:15:24]: The total objects number is 403.
gs_dump[port='26000'][postgres][2020-08-15 20:15:24]: [100.00%] 403 objects have been dumped.
gs_dump[port='26000'][postgres][2020-08-15 20:15:24]: dump database postgres successfully
gs_dump[port='26000'][postgres][2020-08-15 20:15:24]: total time: 238 ms
步骤 4 查看生成的文件信息。
ll /home/omm/logical/backup/
total 592K
-rw------- 1 omm dbgrp 939 Aug 15 19:54 bkp_shl2.sql
drwx------ 2 omm dbgrp 4.0K Aug 15 19:39 MPPDB_backup
-rw------- 1 omm dbgrp 110K Aug 15 20:15 MPPDB_backup2.sql
-rw------- 1 omm dbgrp 112K Aug 15 19:38 MPPDB_backup.dmp
-rw------- 1 omm dbgrp 110K Aug 15 19:33 MPPDB_backup.sql
-rw------- 1 omm dbgrp 248K Aug 15 19:36 MPPDB_backup.tar
步骤 5 查看生成的sql文件,确认没有备份customer_t1表。
cat /home/omm/logical/backup/MPPDB_backup2.sql
--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET xmloption = content;
SET client_encoding = 'SQL_ASCII';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
--
-- Name: postgres; Type: COMMENT; Schema: -; Owner: omm
--
COMMENT ON DATABASE postgres IS 'default administrative connection database';
--
-- Name: lucy; Type: SCHEMA; Schema: -; Owner: lucy
--
CREATE SCHEMA lucy;
ALTER SCHEMA lucy OWNER TO lucy;
SET search_path = lucy;
SET default_tablespace = '';
SET default_with_oids = false;
--
-- Name: mytable; Type: TABLE; Schema: lucy; Owner: lucy; Tablespace:
--
CREATE TABLE mytable (
firstcol integer
)
WITH (orientation=row, compression=no);
ALTER TABLE lucy.mytable OWNER TO lucy;
SET search_path = public;
REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM omm;
GRANT ALL ON SCHEMA public TO omm;
GRANT USAGE ON SCHEMA public TO PUBLIC;
--
-- PostgreSQL database dump complete
--
gs_dumpall
gs_dumpall是openGauss用于导出所有数据库相关信息工具,它可以导出openGauss数据库的所有数据,包括默认数据库postgres的数据、自定义数据库的数据、以及openGauss所有数据库公共的全局对象。
gs_dumpall在导出openGauss所有数据库时分为两部分:
gs_dumpall自身对所有数据库公共的全局对象进行导出,包括有关数据库用户和组,表空间以及属性(例如,适用于数据库整体的访问权限)信息。
gs_dumpall通过调用gs_dump来完成openGauss中各数据库的SQL脚本文件导出,该脚本文件包含将数据库恢复为其保存时的状态所需要的全部SQL语句。
以上两部分导出的结果为纯文本格式的SQL脚本文件,使用gsql运行该脚本文件可以恢复openGauss数据库。
参数说明:
表1-3 gs_dumpall参数说明
参数 | 参数说明 |
---|---|
-f, –filename=FILEN | 将输出发送至指定文件。如果这里省略,则使用标准输出。 |
-a, –data-only | 只转储数据,不转储模式(数据定义)。 |
-c, –clean | 在重新创建数据库之前,执行SQL语句清理(删除)这些数据库。针对角色和表空间的转储命令已添加。 |
-g, –globals-only | 只转储全局对象(角色和表空间),无数据库。 |
-s, –schema-only | 只转储对象定义(模式),而非数据。 |
-t, –tablespaces-only | 只转储表空间,不转储数据库或角色。 |
-h, –host | 指定主机的名称。该参数只针对openGauss外,对openGauss内本机只能用127.0.0.1。 |
-l, –database | 指定所连接的转储全局对象的数据库名称,并去寻找还有其他哪些数据库需要被转储。如果没有指定,会使用postgres数据库,如果postgres数据库不存在,会使用template1。 |
-p, –port | 指定服务器所监听的TCP端口或本地Unix域套接字后缀,以确保连接。默认值设置为PGPORT环境变量。在开启线程池情况下,建议使用 pooler port,即监听端口+1。 |
-U, –username | 所连接的用户名。 |
-W, –passwor | 指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W选项;如果没有-W选项,并且不是系统管理员,“Dump Restore工具”会提示用户输入密码 |
操作步骤:
步骤 1切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2使用gs_dumpall一次导出openGauss的所有数据库。
gs_dumpall -f /home/omm/logical/backup/bkp2.sql -p 26000
结果显示为:
gs_dump[port='26000'][dbname='postgres'][2020-07-28 20:39:29]: The total objects number is 345.
gs_dump[port='26000'][dbname='postgres'][2020-07-28 20:39:29]: [100.00%] 345 objects have been dumped.
gs_dump[port='26000'][dbname='postgres'][2020-07-28 20:39:29]: dump database dbname='postgres' successfully
gs_dump[port='26000'][dbname='postgres'][2020-07-28 20:39:29]: total time: 172 ms
gs_dumpall[port='26000'][2020-07-28 20:39:29]: dumpall operation successful
gs_dumpall[port='26000'][2020-07-28 20:39:29]: total time: 213 ms
步骤 3查看生成的文件信息。
ll /home/omm/logical/backup/
total 48K
-rw------- 1 omm dbgrp 6.2K Feb 5 15:36 bkp2.sql
-rw------- 1 omm dbgrp 934 Feb 5 15:33 bkp_shl2.sql
drwx------ 2 omm dbgrp 4.0K Feb 5 15:32 MPPDB_backup
-rw------- 1 omm dbgrp 3.0K Feb 5 15:35 MPPDB_backup2.sql
-rw------- 1 omm dbgrp 4.1K Feb 5 15:32 MPPDB_backup.dmp
-rw------- 1 omm dbgrp 3.0K Feb 5 15:30 MPPDB_backup.sql
-rw------- 1 omm dbgrp 14K Feb 5 15:31 MPPDB_backup.tar
gs_restore
gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。
gs_restore工具由操作系统用户omm执行。
主要功能包含:
- 导入到数据库:
如果连接参数中指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接的密码。 - 导入到脚本文件:
如果未指定导入数据库,则创建包含重建数据库所必须的SQL语句脚本并写入到文件或者标准输出。等效于直接使用gs_dump导出为纯文本格式。
参数说明:
表1-4gs_restore参数说明
参数 | 参数说明 |
---|---|
-d, –dbname=NAME | 连接数据库dbname并直接导入到该数据库中。 |
-f, –file=FILENAME | 指定生成脚本的输出文件,或使用-l时列表的输出文件。默认是标准输出。 |
-F, –format=c/d/t | 指定归档格式。由于gs_restore会自动决定格式,因此不需要指定格式。取值范围:c/custom:该归档形式为gs_dump的自定义格式。d/directory:该归档形式是一个目录归档形式。t/tar:该归档形式是一个tar归档形式。 |
-a, -data-only | 只导入数据,不导入模式(数据定义)。gs_restore的导入是以追加方式进行的。 |
-c, –clean | 在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。 |
-e, –exit-on-error | 当发送SQL语句到数据库时如果出现错误,请退出。默认状态下会继续,且在导入后会显示一系列错误信息。 |
-n, –schema=NAME | 只导入已列举的模式中的对象。该选项可与-t选项一起用以导入某个指定的表。多次输入-n _schemaname_可以导入多个模式。 |
-s, –schema-only | 只导入模式(数据定义),不导入数据(表内容)。当前的序列值也不会导入。 |
-s, –schema-only | 只导入模式(数据定义),不导入数据(表内容)。当前的序列值也不会导入。 |
-t, –table=NAME | 只导入已列举的表定义、数据或定义和数据。该选项与-n选项同时使用时,用来指定某个模式下的表对象。-n参数不输入时,默认为PUBLIC模式。多次输入-n -t 可以导入指定模式下的多个表。 |
-h, --host=HOSTNAME | 指定的主机名称。如果取值是以斜线开头,他将用作Unix域套接字的目录。默认值取自PGHOST环境变量;如果没有设置,将启动某个Unix域套接字建立连接。该参数只针对openGauss外,对openGauss内本机只能用127.0.0.1。 |
-p, --port=PORT | 指定服务器所监听的TCP端口或本地Unix域套接字后缀,以确保连接。默认值设置为PGPORT环境变量。在开启线程池情况下,建议使用 pooler port,即监听端口+1。 |
-U, --username=NAME | 所连接的用户名。 |
-W, --password=PASSWORD | 指定用户连接的密码。如果主机的认证策略是trust,则不会对系统管理员进行密码验证,即无需输入-W参数;如果没有-W参数,并且不是系统管理员,“gs_restore”会提示用户输入密码。 |
gs_restore导入示例1
执行gs_restore,将导出的MPPDB_backup.tar文件(tar格式)导入到db_tpcc01数据库。
步骤 1切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2连接openGauss数据库。
gsql -d postgres -p 26000 -r
步骤 3创建数据库。
postgres=# DROP DATABASE IF EXISTS db_tpcc01;
postgres=# CREATE DATABASE db_tpcc01;
当结果显示为如下信息,则表示创建成功。
CREATE DATABASE
步骤 4退出数据库。
postgres=# \q
步骤 5 执行gs_restore,将导出的MPPDB_backup.tar文件(tar格式)导入到db_tpcc01数据库。
gs_restore /home/omm/logical/backup/MPPDB_backup.tar -p 26000 -d db_tpcc01
如果成功,显示如下:
start restore operation ...
table customer_t1 complete data imported !
Finish reading 11 SQL statements!
end restore operation ...
restore operation successful
total time: 19 ms
步骤 6连接db_tpcc01数据库。
gsql -d db_tpcc01 -p 26000 -r
步骤 7查看数据库中恢复的customer_t1表。
db_tpcc01=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(4 rows)
步骤 8退出db_tpcc01数据库。
db_tpcc01=# \q
gs_restore导入示例2
执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到db_tpcc02数据库。
步骤 1 切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2连接openGauss数据库。
gsql -d postgres -p 26000 -r
步骤 3创建数据库。
postgres=# DROP DATABASE IF EXISTS db_tpcc02;
postgres=# CREATE DATABASE db_tpcc02;
当结果显示为如下信息,则表示创建成功。
CREATE DATABASE
步骤 4退出数据库。
postgres=# \q
步骤 5 执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到db_tpcc02数据库。
gs_restore /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc02
如果成功,显示如下:
start restore operation ...
table customer_t1 complete data imported !
Finish reading 11 SQL statements!
end restore operation ...
restore operation successful
total time: 19 ms
步骤 6 连接db_tpcc02数据库。
gsql -d db_tpcc02 -p 26000 -r
步骤 7查看数据库中恢复的customer_t1表。
db_tpcc02=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(4 rows)
步骤 8 退出db_tpcc02数据库。
db_tpcc02=# \q
gs_restore导入示例3
执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到postgres数据库。
步骤 1切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2 连接openGauss数据库。
gsql -d postgres -p 26000 -r
步骤 3创建数据库。
postgres=# DROP DATABASE IF EXISTS db_tpcc03;
postgres=# CREATE DATABASE db_tpcc03;
当结果显示为如下信息,则表示创建成功。
CREATE DATABASE
步骤 4退出数据库。
postgres=# \q
步骤 5 执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到db_tpcc03数据库。
gs_restore /home/omm/logical/backup/MPPDB_backup -p 26000 -d db_tpcc03
如果成功,显示如下:
start restore operation ...
table customer_t1 complete data imported !
Finish reading 11 SQL statements!
end restore operation ...
restore operation successful
total time: 19 ms
步骤 6连接db_tpcc03数据库。
gsql -d db_tpcc03 -p 26000 -r
步骤 7 查看数据库中恢复的customer_t1表。
db_tpcc02=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(4 rows)
步骤 8退出db_tpcc03数据库。
db_tpcc03=# \q
gs_restore导入示例4
执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。导入时在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。
步骤 1由于在备份示例1已经将所有对象恢复到db_tpcc01数据库中,所以在再次导入时如果不先删除已经存在的对象,会出现报错信息。
gs_restore -W Bigdata@123 /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc01
显示如下:
start restore operation ...
……
Error from TOC entry 601; 1259 41883 TABLE customer_t1 omm
could not execute query: ERROR: relation "customer_t1" already exists
Command was: CREATE TABLE customer_t1 (
c_customer_sk integer,
c_customer_id character(5),
c_first_name character(6),
c_l...
table customer_t1 complete data imported !
Finish reading 11 SQL statements!
end restore operation ...
WARNING: errors ignored on restore: 3
restore operation successful
total time: 19 ms
步骤 2连接db_tpcc01数据库
gsql -d db_tpcc01 -p 26000 -r
步骤 3查看数据库中恢复的customer_t1表。
db_tpcc01=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(8 rows)
原有数据表并没有被删除,导入的数据表以数据追加的方式导入数据。
步骤 4 退出数据库
db_tpcc01=# \q
步骤 5 输入以下命令,使用-c参数手工删除依赖,导入完成后再重新创建。
gs_restore -W Bigdata@123 /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc01 -e -c
显示如下:
start restore operation ...
Finish reading 11 SQL statements!
end restore operation ...
restore operation successful
total time: 14 ms
注:如果原对象存在跨模式的依赖则需手工强制干预。
步骤 6 连接db_tpcc01数据库
gsql -d db_tpcc01 -p 26000 -r
步骤 7查看数据库中恢复的customer_t1表。
db_tpcc01=# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(8 rows)
步骤 8退出数据库
db_tpcc01=# \q
原有数据表已经被清除,恢复的是导入的数据表。
gs_restore导入示例5
执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表customer_t1的定义。
步骤 1切换到omm用户,以操作系统用户omm登录数据库主节点。
su - omm
步骤 2连接openGauss数据库。
gsql -d postgres -p 26000 -r
步骤 3 创建数据库。
postgres=# DROP DATABASE IF EXISTS db_tpcc04;
postgres=# CREATE DATABASE db_tpcc04;
当结果显示为如下信息,则表示创建成功。
CREATE DATABASE
步骤 4 退出数据库。
postgres=# \q
步骤 5 执行gs_restore,只导入PUBLIC模式下表customer_t1的定义。
gs_restore /home/omm/logical/backup/MPPDB_backup.dmp -p 26000 -d db_tpcc04 -n public -t customer_t1
如果成功,显示如下:
start restore operation ...
table customer_t1 complete data imported !
Finish reading 17 SQL statements!
end restore operation ...
restore operation successful
total time: 18 ms
步骤 6 连接db_tpcc04数据库。
gsql -d db_tpcc04 -p 26000 -r
步骤 7 查看数据库中恢复的customer_t1表。
db_tpcc04# select * from customer_t1;
c_customer_sk | c_customer_id | c_first_name | c_last_name
---------------+---------------+--------------+-------------
6885 | maps | Joes |
4321 | tpcds | Lily |
9527 | world | James |
3769 | hello | |
(4 rows)
步骤 8 查看postgres数据库中LUCY模式下的表。
db_tpcc04=# select * from lucy.mytable;
显示结果如下:
ERROR: schema "lucy" does not exist
LINE 1: select * from lucy.mytable;
步骤 9 查看postgres数据库中PUBLIC模式下的customer_t2表。
db_tpcc04=# select * from customer_t2;
显示结果如下:
ERROR: schema "lucy" does not exist
LINE 1: select * from lucy.mytable;
步骤 9 查看postgres数据库中PUBLIC模式下的customer_t2表。
db_tpcc04=# select * from customer_t2;
显示结果如下:
ERROR: relation "customer_t2" does not exist on dn_6001
LINE 1: select * from customer_t2;
说明只恢复了PUBLIC shema模式下的的customer_t1表。
步骤 10退出数据库。
postgres=# \q
本实验结束。