说明:
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文本格式(非导入数据库)。