KingbaseES 工具sys_dump,sys_restore使用介绍

尹钱青
2023-12-01

说明:

KingbaseES V8R6版本中自带数据库备份导出sys_dump,和备份恢复sys_restore工具。

sys_dump:把KingbaseES数据库抽取为一个脚本文件或其他归档文件。数据库正在被并发使用,它也能创建一致的备份。但在日常使用中,建议在业务工作停止时做数据导出工作(不需要关闭数据库),以免对业务性能产生影响。

sys_restore:从一个由sys_dump创建的归档文件恢复一个KingbaseES数据库。

本次案例数据库版本:

test=# select version();
                                                       version                                                        
----------------------------------------------------------------------------------------------------------------------
 KingbaseES V008R006C005B0023 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
(1 行记录)

sys_dump 命令格式:

sys_dump只转储单个数据库。要备份一个集簇或者集簇中对于所有数据库公共的全局对象(例如角色和表空间),应使用 sys_dumpall 。

sys_dump [``connection-option``...] [``option``...] [``dbname``]

常用参数:
dbname
   指定要被转储的数据库名。
-a --data-only
   只转储数据,而不转储模式(数据定义)。
-c --clean
   在输出创建数据库对象的命令之前输出清除(删除)它们的命令。这个选项只对纯文本格式有意义。
-C --create
   输出的开始是一个创建数据库本身并且重新连接到被创建的数据库的命令。
-E encoding --encoding=encoding
   以指定的字符集编码创建转储。
-f file --file=file
   将输出发送到指定文件。
-F format --format=format
   选择输出的格式。``format``可以是下列之一:
   p plain
      输出一个纯文本形式的SQL脚本文件(默认值)。
   c custom
      输出一个适合于作为sys_restore输入的自定义格式归档。
   d directory
      输出一个适合作为sys_restore输入的目录格式归档。
   t tar
      输出一个适合于输入到sys_restore中的tar-格式归档。
-s --schema-only
   只转储对象定义(模式),而非数据。
-t pattern --table=pattern
   只转储名字匹配``pattern``的表。
-T pattern --exclude-table=pattern
   不转储匹配``pattern``模式的任何表。
--column-inserts --attribute-inserts
   将数据转储为带有显式列名的INSERT命令(INSERT INTO table (``column``, ...) VALUES ...)。
--inserts
   将数据转储为INSERT命令(而不是COPY)。这将使得恢复非常慢,这主要用于使转储能够被载入到非KingbaseES数据库中。
--rows-per-insert=nrows
   使用INSERT命令转储数据(而非 COPY). 控制INSERT每行的最大行数。

sys_dump示例

sys_dump导出可以被输出到脚本或归档文件格式两种格式。

脚本转储示例:
./sys_dump -Fp test1 -f /home/kingbase/backup/dumpFp.out -Usystem
	导出数据库test1全部数据,到/home/kingbase/backup/dumpFp.out路径中。

	./sys_dump -Fp -Cc test1 -f /home/kingbase/backup/dumpCc.out -Usystem
	导出数据库test1全部数据,到/home/kingbase/backup/dumpCc.out路径中,数据sql中包含清除sql命令。

	./sys_dump -Fp -Cc -E utf-8 test1 -f /home/kingbase/backup/dumpFpCcE.out -Usystem
	导出数据库test1全部数据,到/home/kingbase/backup/dumpFpCcE.out路径中,数据sql中包含清除sql命令,并指定数据导出编码。
[kingbase@node128 backup]$ more dumpFpCcE.out 
	--
	-- Kingbase database dump
	--

	-- Dumped from database version 12.1
	-- Dumped by sys_dump version 12.1

	SET statement_timeout = 0;
	SET lock_timeout = 0;
	SET idle_in_transaction_session_timeout = 0;
	SET client_encoding = 'UTF8';
	SET standard_conforming_strings = on;
	SELECT pg_catalog.set_config('search_path', 'public', false);
	SET check_function_bodies = false;
	SET xmloption = content;
	SET client_min_messages = warning;
	SET row_security = off;
	SET default_with_oids = off;

	DROP DATABASE test1;
	--
	-- Name: test1; Type: DATABASE; Schema: -; Owner: system
	--

	CREATE DATABASE test1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.UTF-8' LC_CTYPE = 'zh_CN.UTF-8';


	ALTER DATABASE test1 OWNER TO system;

	\connect test1

	SET statement_timeout = 0;
	SET lock_timeout = 0;
	SET idle_in_transaction_session_timeout = 0;
	SET client_encoding = 'UTF8';
	SET standard_conforming_strings = on;
	SELECT pg_catalog.set_config('search_path', 'public', false);
	SET check_function_bodies = false;
	SET xmloption = content;
	SET client_min_messages = warning;
	SET row_security = off;
	SET default_with_oids = off;

sys_dump导出数据为纯文本形式的SQL脚本文件。它们可以用来重构数据库到它被转储时的状态。

脚本文件还可以被用来在其他机器和其他架构上重构数据库。在经过修改后,甚至可以在其他SQL数据库产品上重构数据库。

脚本格式可以使用ksql进行数据导入恢复。
./ksql -f /home/kingbase/backup/dumpFp.out -Usystem -d test

./sys_dump -Fp -Cc -E utf-8 --column-inserts --inserts --rows-per-insert=5 test1 -f /home/kingbase/backup/dumpFpCcEinserts.out -Usystem
	
	导出数据库test1全部数据,到/home/kingbase/backup/dumpFp.out路径中。
	
	数据导出格式为sql的insert格式,非数据库的copy格式。
	
	column-inserts选项指定数据sql必须带列名inser into table(acol ,bcol)。
	
	rows-per-insert指定每次insert的提交数据条数。
数据导出格式示例如下:
	--
	-- Data for Name: bigtable; Type: TABLE DATA; Schema: public; Owner: system
	--

	INSERT INTO public.bigtable (id, name, addr, bir) VALUES                ****** column-inserts指定导出inert语句格式带列名
	        (1, 'name1', 'addr1', '2022-08-11 10:39:52'),                   ****** rows-per-insert指定每次提交5条数据
	        (2, 'name2', 'addr2', '2022-08-11 10:39:52'),                   ****** inserts指定insert数据,非copy方式
	        (3, 'name3', 'addr3', '2022-08-11 10:39:52'),
	        (4, 'name4', 'addr4', '2022-08-11 10:39:52'),
	        (5, 'name5', 'addr5', '2022-08-11 10:39:52');
	INSERT INTO public.bigtable (id, name, addr, bir) VALUES
	        (6, 'name6', 'addr6', '2022-08-11 10:39:52'),
	        (7, 'name7', 'addr7', '2022-08-11 10:39:52'),
	        (8, 'name8', 'addr8', '2022-08-11 10:39:52'),
	        (9, 'name9', 'addr9', '2022-08-11 10:39:52'),
	        (10, 'name10', 'addr10', '2022-08-11 10:39:52');
	INSERT INTO public.bigtable (id, name, addr, bir) VALUES
	        (11, 'name11', 'addr11', '2022-08-11 10:39:52'),
	        (12, 'name12', 'addr12', '2022-08-11 10:39:52'),
	        (13, 'name13', 'addr13', '2022-08-11 10:39:52'),
	        (14, 'name14', 'addr14', '2022-08-11 10:39:52'),
	        (15, 'name15', 'addr15', '2022-08-11 10:39:52');
归档文件格式:
归档文件格式必须与sys_restore配合使用来重建数据库。
./sys_dump -Fc -E utf-8 test1 -f /home/kingbase/backup/dumpFc.out -Usystem

	导出数据库test1全部数据的自定义格式归档,到/home/kingbase/backup/dumpFc.out路径中。默认情况还会被压缩。

	[kingbase@node128 backup]$ ll
	总用量 356
	-rw-rw-r-- 1 kingbase kingbase  56280 8月  11 15:23 dumpFc.out
./sys_dump -Fd -E utf-8 test1 -f /home/kingbase/backup/dumpFd -Usystem

	导出数据库test1全部数据的目录格式归档,到/home/kingbase/backup/dumpFc.out路径中。默认情况下是被压缩的并且也支持并行转储。

	[kingbase@node128 backup]$ ll
	总用量 356
	drwx------ 2 kingbase kingbase    135 8月  11 15:23 dumpFd
	[kingbase@node128 backup]$ ll dumpFd
	总用量 76
	-rw-rw-r-- 1 kingbase kingbase    31 8月  11 15:23 5664.dat.gz
	-rw-rw-r-- 1 kingbase kingbase    32 8月  11 15:23 5665.dat.gz
	-rw-rw-r-- 1 kingbase kingbase    57 8月  11 15:23 5666.dat.gz
	-rw-rw-r-- 1 kingbase kingbase    25 8月  11 15:23 5667.dat.gz
	-rw-rw-r-- 1 kingbase kingbase    29 8月  11 15:23 5668.dat.gz
	-rw-rw-r-- 1 kingbase kingbase  3524 8月  11 15:23 5669.dat.gz
	-rw-rw-r-- 1 kingbase kingbase 51654 8月  11 15:23 toc.dat
./sys_dump -Ft -E utf-8 test1 -f /home/kingbase/backup/dumpFt.tar -Usystem

	导出数据库test1全部数据的tar-格式归档,到/home/kingbase/backup/dumpFc.out路径中。tar 格式不支持压缩。

	[kingbase@node128 backup]$ ll
	总用量 356
	-rw-rw-r-- 1 kingbase kingbase 119296 8月  11 15:23 dumpFt.tar

sys_restore 命令格式::

sys_restore [``connection-option``...] [``option``...] [``filename``]

常用参数:
filename
   指定要被恢复的归档文件(对于一个目录格式的归档则是目录)的位置。
-a --data-only
   只转储数据,而不转储模式(数据定义)。
-c --clean
   在输出创建数据库对象的命令之前输出清除(删除)它们的命令。
-C --create
   在恢复一个数据库之前先创建它。
-d dbname --dbname=dbname
   连接到数据库``dbname``并且直接恢复到该数据库中。
-f filename --file=filename
   为生成的脚本或列表(当使用-l时)指定输出文件。
-F format --format=format
   指定归档的格式。
   c custom
	  归档是sys_dump的自定义格式。
   d directory
	  归档是一个目录归档。
   t tar
	  归档是一个tar归档。
-I index --index=index
   只恢复提及的索引的定义。
-l --list
   列出归档的内容的表格。
--view-only
   只恢复视图。
-s --schema-only
   只恢复归档中的模式(数据定义)不恢复数据。

sys_restore示例

数据恢复示例:
./sys_restore -Fc  /home/kingbase/backup/dumpFc.out -Usystem -d test1 
	恢复数据库test1全部数据,在数据库中需要重新创建干净的test1数据库(create database test1 template template0)。

	./sys_restore -Fc  /home/kingbase/backup/dumpFc.out -Usystem -Cc -f /home/kingbase/backup/dumpFc.log
	将数据库备份dumpFc.out文件导出到dumpFc.log中,并解析为sql文本格式(非导入数据库)。

	./sys_restore -Fd  /home/kingbase/backup/dumpFd -Usystem  -d test1
	恢复数据库test1全部数据,在数据库中需要重新创建干净的test1数据库(create database test1 template template0)。

	./sys_restore -Fd  /home/kingbase/backup/dumpFd -f /home/kingbase/backup/dumpFd.log -Usystem
	将数据库备份dumpFd文件导出到dumpFd.log中,并解析为sql文本格式(非导入数据库)。

	./sys_restore -Ft  /home/kingbase/backup/dumpFt.tar -Usystem  -d test1
	恢复数据库test1全部数据,在数据库中需要重新创建干净的test1数据库(create database test1 template template0)。

	./sys_restore -Ft  /home/kingbase/backup/dumpFt.tar -f /home/kingbase/backup/dumpFt.log -Usystem
    将数据库备份dumpFd文件导出到dumpFt.log中,并解析为sql文本格式(非导入数据库)。
 类似资料: