一、Kingbase逻辑备份原理
1.1、Kingbase逻辑备份概述
Kingbase逻辑备份是一种通过导出数据库的逻辑结构和数据来进行备份的方法。它可以备份整个实例、指定库、指定模式、指定表等,支持导出整个实例或角色表空间等定义和数据,以及指定数据库的所有对象定义和内容,也可以导出指定模式或指定表的对象定义和内容。
1.2、备份命令和参数
Kingbase逻辑备份通常使用sys_dump命令,该命令可以将数据库备份为脚本文件或其他归档文件。备份选项包括数据库库、模式、表、视图、数据、结构、约束、权限、触发器、函数、序列,还原选项包括还原前删除已存在对象、不还原属主等。
1.3、备份文件格式:
二进制:以.dmp结尾 SQL脚本:以.sql结尾
备份文件可以通过sys_restore命令恢复到数据库中。
针对表的数据,还支持多种导出格式: CSV、JSON、HTML
1.4、注意事项
在使用Kingbase逻辑备份时,需要注意不建议在启用了“兼容异构数据库大小写不敏感”特性的数据库与没有启用该特性的数据库之间进行备份、恢复。此外,备份和恢复过程中可能需要管理员权限,确保在执行这些操作时拥有足够的权限。
Kingbase逻辑备份的主要优势
Kingbase逻辑备份的主要优势在于其强大的兼容性和灵活性。逻辑备份通常保存的结构是纯ASCII的,这使得它们具有很强的兼容性,可以在不同的平台之间迁移数据,而且对保持数据的安全性更有保障。此外,逻辑备份可以在不中断数据库服务的情况下进行,这对于需要持续运营的业务系统尤为重要。
逻辑备份还能够联机进行,不需要数据库处于归档状态,这意味着即使在数据库正在运行的情况下也能完成备份操作。这种备份方式对于防止数据丢失和确保业务连续性至关重要。
另外,逻辑备份在恢复时可以选择性地恢复特定的数据对象,如表或视图,而不需要恢复整个数据库,这样可以节省大量的时间和资源。 总体来说,Kingbase逻辑备份的优势在于其灵活性、兼容性以及对业务连续性的支持,这些特点使得它成为数据库备份策略中不可或缺的一部分。
Kingbase逻辑备份原理
Kingbase逻辑备份是一种通过备份数据库对象将数据库从一个快照状态转换到另一个快照状态的过程。这种备份方式通常使用sys_dump命令来完成,它可以备份数据库、模式、表、视图、约束、权限、触发器、函数和序列等对象。逻辑备份的输出格式包括二进制文件和SQL脚本,以及支持多种格式的导出,如CSV、JSON和HTML,以便灵活调整和实施数据的备份计划. 在进行逻辑备份时,可以选择备份整个数据库或特定的数据库对象。备份过程中,sys_dump工具会生成一个包含SQL命令或二进制数据的文件,这些文件可以在需要时通过ksql或sys_restore命令来执行还原操作. 逻辑备份的优势在于它可以在不中断数据库服务的情况下进行,并且可以用于跨平台的数据恢复。此外,逻辑备份还可以用于恢复数据库的逻辑错误,恢复后对其他数据的影响较小. 在使用Kingbase逻辑备份时,需要注意备份文件的安全性和完整性,备份文件需要妥善保管以防止数据丢失或损坏。同时,在修改配置文件时,需要仔细核对参数设置,避免误操作导致数据库异常.
二、sys_dump备份
2.1、在演示逻辑备份前,我们先来说明一下逻辑备份的区别:
sys_dump和sys_dumpall是人大金仓KingbaseES数据库中用于数据备份的两个命令,它们之间存在以下几点主要区别:
| 项目类型 | sys_dump | sys_dumpall |
|---|---|---|
| 备份范围 | 备份单个数据库,不能转储数据库的角色和表空间 | 备份整个数据库,还能够转储数据库公用的全局对象,如角色和表空间 |
| 备份格式 | 支持多种备份格式,包括SQL脚本格式、二进制格式等,并且可以进行压缩和加密备份 | 只支持备份为SQL脚本格式,并且不支持压缩和加密备份 |
| 连接数据库 | 必须要连接到指定的数据库 | 不能指定连接的数据库,它会对集群中的每个数据库调用sys_dump来完成备份工作 |
| 使用场景 | 适用于需要备份特定数据库或部分表的场景 | 适用于需要备份整个数据库集群或集群中公共的全局对象的场景 |
综上所述,sys_dump和sys_dumpall各有特点和适用场景,用户应根据实际需求选择合适的备份命令。
2.2、查看帮助文件
在使用Kingbase数据库时,如果您需要查看帮助信息,可以通过在命令行中输入 help 命令来获取。这个命令会列出所有可用的命令和选项,帮助您快速了解Kingbase的功能和使用方法。帮助我们快速学习sys_dump工具。
代码如下:
[kingbase@Node1 ~]$ sys_dump --help sys_dump 把一个数据库转储为纯文本文件或者是其它格式. 用法: sys_dump [选项]... [数据库名字] 一般选项: -f, --file=FILENAME 输出文件或目录名 -F, --format=c|d|t|p 输出文件格式(c为定制,d为目录,t为tar,p为明文(默认值)) -v, --verbose 详细模式 -V, --version 输出版本信息,然后退出 -Z, --compress=0-9 被压缩格式的压缩级别 -j, --jobs=NUM 执行多个并行任务进行备份转储工作 -K, --key=encryptkey 加密密钥 --lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败 --no-sync 不用等待变化安全写入磁盘 -?, --help 显示此帮助, 然后退出 控制输出内容选项: -a, --data-only 只转储数据,不包括模式 -b, --blobs 在转储中包括大对象 -B, --no-blobs 排除转储中的大型对象 -c, --clean 在重新创建之前,先清除(删除)数据库对象 -C, --create 在转储中包括命令,以便创建数据库 -E, --encoding=ENCODING 转储以ENCODING形式编码的数据 -n, --schema=PATTERN 只导出指定的模式 -N, --exclude-schema=PATTERN 不导出指定的模式 -O, --no-owner 在明文格式中, 忽略恢复对象所属者 -s, --schema-only 只转储模式, 不包括数据 -S, --superuser=NAME 在明文格式中使用指定的超级用户名 -t, --table=PATTERN 只导出指定表 -T, --exclude-table=PATTERN 不导出指定表 -x, --no-privileges 不要转储权限 (grant/revoke) --binary-upgrade 只能由升级工具使用 --column-inserts 以带有列名的INSERT命令形式转储数据 --copy-binary 以二进制拷贝方式导出数据 --disable-dollar-quoting 取消美元 (符号) 引号, 使用 SQL 标准引号 --disable-triggers 在只恢复数据的过程中禁用触发器 --enable-row-security 启用行安全性(只转储用户能够访问的内容) --exclude-table-data=PATTERN 不导出特定表数据 --extra-float-digits=NUM 覆盖extra_float_digits的默认设置 --if-exists 当删除对象时使用IF EXISTS --include-all-partitions[=OPT] 转储分区表的所有分区 --inserts 以INSERT命令,而不是COPY命令的形式转储数据 --load-via-partition-root 通过根表加载分区 --no-security-labels 不转储安全标签的分配 --no-subscriptions 不转储订阅 --no-synchronized-snapshots 在并行工作集中不使用同步快照 --no-tablespaces 不转储表空间分配信息 --no-unlogged-table-data 不转储没有日志的表数据 --no-comments 不转储注释 --no-publications 不转储发布 --on-conflict-do-nothing 将ON CONFLICT DO NOTHING添加到INSERT命令 --parallel-lob-data 并行导出lob表 --quote-all-identifiers 所有标识符加引号,即使不是关键字 --rows-per-insert=NROWS 每个插入的行数;意味着--inserts --serializable-deferrable 等到备份可以无异常运行 --snapshot=SNAPSHOT 为转储使用给定的快照 --strict-names 要求每个表和(或)schema包括模式以匹配至少一个实体 --section=SECTION 备份命名的节 (数据前, 数据, 及 数据后) --use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替 ALTER OWNER 命令来设置所有权 联接选项: -d, --dbname=DBNAME 对数据库 DBNAME备份 -h, --host=主机名 数据库服务器的主机名或套接字目录 -p, --port=端口号 数据库服务器的端口号 -U, --username=名字 以指定的数据库用户联接 -w, --no-password 永远不提示输入口令 -W, --password 强制口令提示 (自动) --role=ROLENAME 在转储前运行SET ROLE 如果没有提供数据库名字, 那么使用 KINGBASE_DATABASE 环境变量的数值 报告错误至 <kingbase-bugs@kingbase.com.cn>. [kingbase@Node1 ~]$
2.3、备份单表或多表
说明:
- 备份格式:.dmp二进制文件
- 备份数据库:PackdataServer
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer.dmp
- 输出文件格式:定制
- 输出表:public模式下的所有表,如果备份指定表将*改为指定表名称即可
代码如下:
[kingbase@Node1 cluster]$ [kingbase@Node1 cluster]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp -Fc -t public.* [kingbase@Node1 cluster]$
查看备份文件信息
- 查看方式1: ls -ltr /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp
[kingbase@Node1 cluster]$ ls -ltr /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp -rw------- 1 kingbase kingbase 187245 6月 7 14:40 /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp
- 查看方式2: file /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp
[kingbase@Node1 cluster]$ [kingbase@Node1 cluster]$ file /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp: data [kingbase@Node1 cluster]$
2.4、备份模式
说明:
- 备份格式:.dmp二进制文件
- 备份数据库:PackdataServer下的public模式
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp
- 输出文件格式:定制
- 输出模式:仅备份public模式
代码如下:
[kingbase@Node1 cluster]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp -Fc -n public [kingbase@Node1 cluster]$
查看模式备份文件
[kingbase@Node1 cluster]$ file /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp: data [kingbase@Node1 cluster]$ [kingbase@Node1 cluster]$ [kingbase@Node1 cluster]$ ls -ltr /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp -rw------- 1 kingbase kingbase 197935 6月 7 14:57 /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp [kingbase@Node1 cluster]$
备份单表或多表
说明:
- 备份格式:.SQL文本格式
- 备份数据库:PackdataServer下的public模式的所有表或单个表
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer.sql
- 输出文件格式:指定明文纯文本格式
- 输出模式:仅备份public模式
代码如下: 备份public模式下的所有表:
[kingbase@Node1 cluster]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer.sql -Fp -t public.* [kingbase@Node1 cluster]$
备份public模式下的表actor:
[kingbase@Node1 cluster]$ [kingbase@Node1 cluster]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer_actor.sql -Fp -t public.actor [kingbase@Node1 cluster]$
查看备份信息:
[kingbase@Node1 cluster]$ ls -ltr /Kingbase/ES/V9/cluster/backup/PackdataServer.sql -rw------- 1 kingbase kingbase 630497 6月 7 15:02 /Kingbase/ES/V9/cluster/backup/PackdataServer.sql [kingbase@Node1 cluster]$ file /Kingbase/ES/V9/cluster/backup/PackdataServer.sql /Kingbase/ES/V9/cluster/backup/PackdataServer.sql: ASCII text, with very long lines [kingbase@Node1 cluster]$
查看备份文件:
[kingbase@Node1 backup]$ ls -ltr /Kingbase/ES/V9/cluster/backup/PackdataServer.sql -rw------- 1 kingbase kingbase 630497 6月 7 15:02 /Kingbase/ES/V9/cluster/backup/PackdataServer.sql [kingbase@Node1 backup]$ [kingbase@Node1 backup]$ more /Kingbase/ES/V9/cluster/backup/PackdataServer.sql | grep COPY COPY public.actor (actor_id, first_name, last_name, last_update) FROM stdin; COPY public.address (address_id, address, address2, district, city_id, postal_code, phone, last_update) FROM stdin; ......................................................... COPY public.payment_p2007_01 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_02 (payment_id, customer_id, staff_id, rental_id, amount, COPY public.payment_p2007_06 (payment_id, customer_id, staff_id, rental_id, amount, COPY public.store (store_id, manager_staff_id, address_id, last_update) FROM stdin; COPY public.t01 (id, name) FROM stdin; [kingbase@Node1 backup]$
备份数据为INSERT格式的SQL脚本文件
- 说明:
- 备份格式:.SQL文本格式
- 备份数据库:PackdataServer下的public模式的所有表或单个表
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT.sql
- 输出文件格式:文本格式
- 输出模式:仅备份public模式
备份public模式下的所有表:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT.sql -Fp -t public.* --inserts
备份public模式下的单表:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT_actor.sql l -Fp -t public.actor --inserts [kingbase@Node1 backup]$
查看备份文件
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ file /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT.sql /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT.sql: ASCII text, with very long lines [kingbase@Node1 backup]$ [kingbase@Node1 backup]$ more /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT.sql | grep INSERT 'scientist'':9 ''secret'':17'); INSERT INTO public.film VALUES (372, 'GRACELAND DYNAMITE', 'A Taut Display of a Cat And a Girl who must Overcome a Database Administrator in New Orleans', 2006, 1, NULL, 5, 4.99, 140, 26.99, 'R', '2006-02-15 05:03:42', '{Trailers,Commentaries}', '''administr'':17 ''cat'':8 ''databas'':16 ''display'':5 ''dynamit'':2 ''girl'':11 ''graceland'':1 ''must'':13 ''new'':19 ''orlean'':20 ''overcom'':14 ''taut'':4'); INSERT INTO public.film VALUES (373, 'GRADUATE LORD', 'A Lacklusture Epistle of a Girl And a A Shark who must Meet a Mad Scientist in Ancient China', 2006, 1, NULL, 7, 2.99, 156, 14.99, 'G', '2006-02-15 05:03:42', '{Trailers,"Behind the Scenes"}', '''ancient'':20 ''china'':21 ''epistl'':5 ''girl'':8 ''graduat'':1 ''lacklustur'':4 ''lord'':2 ''mad'':17 ''meet'':15 ''must'':14 ''scientist'':18 ''shark'':12'); INSERT INTO public.film VALUES (374, 'GRAFFITI LOVE', 'A Unbelieveable Epistle of a Sumo Wrestler And a Hunter who must Build a Composer in Berlin', 2006, 1, NULL, 3, 0.99, 117, 29.99, 'PG', '2006-02-15 05:03:42', '{Trailers,"Deleted Scenes"}', '''berlin'':19 ''build'':15 ''compos'':17 ''epistl'':5 ''graffiti'':1 ''hunter'':12 ''love'':2 ''must'':14 ''sumo'':8 ''unbeliev'':4 ''wrestler'':9'); INSERT INTO public.film VALUES (375, 'GRAIL FRANKENSTEIN', 'A Unbelieveable Saga of a Teacher And a Monkey who must Fight a Girl in An Abandoned Mine Shaft', 2006, 1, NULL, 4, 2.99, 85, 17.99, 'NC-17', '2006-02-15 05:03:42', '{Commentaries,"Deleted Scenes","Behind the Scenes"}', '''abandon'':19 ''fight'':14 ''frankenstein'':2 ''girl'':16 ''grail'':1 ''mine'':20 ''monkey'':11 ''must'':13 ''saga'':5 ''shaft'':21 ''teacher'':8 ''unbeliev'':4'); .............................................................. CREATE OR REPLACE TRIGGER film_fulltext_trigger BEFORE INSERT OR UPDATE ON public.film FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description'); [kingbase@Node1 backup]$
只备份对象定义,不包含表的数据
- 说明:
- 备份格式:.SQL格式
- 备份数据库:PackdataServer下的所有对象的定义,不包含数据
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer_DDL.sql
- 输出文件格式:文本格式
代码如下:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_dump -Usy -dPackdataServer -Fp -s -f /Kingbase/ES/V9/cluster/backup/PackdataServer_DDL.sql [kingbase@Node1 backup]$
查看对象备份文件内容:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ cat /Kingbase/ES/V9/cluster/backup/PackdataServer_DDL.sql |grep -i -E 'create|alter|insert|copy' CREATE TYPE public.mpaa_rating AS ENUM ( ALTER TYPE public.mpaa_rating OWNER TO system; CREATE DOMAIN public.year AS integer ALTER DOMAIN public.year OWNER TO system; CREATE FUNCTION public._group_concat(text, text) RETURNS text ALTER FUNCTION public._group_concat(text, text) OWNER TO system; CREATE FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, p_film_count OUT integer) RETURNS SETOF integer ALTER FUNCTION public.film_in_stock(p_film_id integer, p_store_id integer, p_film_count OUT integer) OWNER TO system; ............................................... ALTER TABLE ONLY public.rental ALTER TABLE ONLY public.staff ALTER TABLE ONLY public.staff ALTER TABLE ONLY public.store ALTER TABLE ONLY public.store -- Name: FUNCTION sys_create_restore_point(text); Type: ACL; Schema: sys_catalog; Owner: system REVOKE ALL ON FUNCTION sys_catalog.sys_create_restore_point(text) FROM PUBLIC; -- Name: TABLE sys_stat_progress_create_index; Type: ACL; Schema: sys_catalog; Owner: system GRANT SELECT ON TABLE sys_catalog.sys_stat_progress_create_index TO PUBLIC; [kingbase@Node1 backup]$
只备份表数据,不包含任何对象的定义
- 说明:
- 备份格式:.SQL格式
- 备份数据库:PackdataServer下的所有对象的定义,不包含数据
- 备份用户:sy
- 备份文件路径:/Kingbase/ES/V9/cluster/backup/PackdataServer_DDL.sql
- 输出文件格式:文本格式
代码如下:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_dump -Usy -dPackdataServer -Fp -a -f /Kingbase/ES/V9/cluster/backup/PackdataServer_Data.sql [kingbase@Node1 backup]$
查看对象备份文件内容:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ cat /Kingbase/ES/V9/cluster/backup/PackdataServer_Data.sql | grep -i -E 'create|alter|insert|copy' COPY public.actor (actor_id, first_name, last_name, last_update) FROM stdin; 102 WALTER TORN 2006-02-15 04:34:33 COPY public.country (country_id, country, last_update) FROM stdin; COPY public.city (city_id, city, country_id, last_update) FROM stdin; COPY public.address (address_id, address, address2, district, city_id, postal_code, phone, last_update) FROM stdin; COPY public.category (category_id, name, last_update) FROM stdin; COPY public.store (store_id, manager_staff_id, address_id, last_update) FROM stdin; COPY public.customer (customer_id, store_id, first_name, last_name, email, address_id, activebool, create_date, last_update, active) FROM stdin; COPY public.language (language_id, name, last_update) FROM stdin; COPY public.film (film_id, title, description, release_year, language_id, original_language_id, rental_duration, rental_rate, length, replacement_cost, rating, last_update, special_features, fulltext) FROM stdin; ..................................................................... COPY public.staff (staff_id, first_name, last_name, address_id, email, store_id, active, username, password, last_update, picture) FROM stdin; COPY public.rental (rental_id, rental_date, inventory_id, customer_id, return_date, staff_id, last_update) FROM stdin; COPY public.payment (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_01 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_02 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_03 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_04 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_05 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.payment_p2007_06 (payment_id, customer_id, staff_id, rental_id, amount, payment_date) FROM stdin; COPY public.t01 (id, name) FROM stdin; [kingbase@Node1 backup]$
三、还原备份文件
3.1、从DUMP格式的备份中还原表
删除actor表: 代码如下:
PackdataServer=# PackdataServer=# drop table if exists public.actor CASCADE; NOTICE: drop cascades to 4 other objects 描述: drop cascades to view actor_info drop cascades to view film_list drop cascades to view nicer_but_slower_film_list drop cascades to constraint film_actor_actor_id_fkey on table film_actor DROP TABLE PackdataServer=#
再次检查:
PackdataServer=# \dt+ public.actor Did not find any relation named "public.actor". PackdataServer=#
还原脚本:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_restore -Usy -dPackdataServer /Kingbase/ES/V9/cluster/backup/PackdataServer_public.dmp -Fc -t actor [kingbase@Node1 backup]$
再次确认还原情况:
ackdataServer=# \dt+ public.actor 关联列表 架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述 ----------+-------+--------+--------+-------+------ public | actor | 数据表 | system | 40 kB | (1 行记录)
3.2、从SQL格式的备份文件还原表actor
删除actor表: 代码如下:
PackdataServer=# PackdataServer=# drop table if exists public.actor; DROP TABLE PackdataServer=#
再次检查:
PackdataServer=# \dt+ public.actor Did not find any relation named "public.actor". PackdataServer=#
还原表:
PackdataServer=# PackdataServer=# \i /Kingbase/ES/V9/cluster/backup/PackdataServer_INSERT_actor.sql SET set_config ------------ public (1 行记录) SET CREATE TABLE ALTER TABLE INSERT 0 1 INSERT 0 1 ............... INSERT 0 1 INSERT 0 1 ALTER TABLE CREATE INDEX CREATE TRIGGER
再次检查还原情况:
PackdataServer=# \dt+ public.actor 关联列表 架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述 ----------+-------+--------+--------+-------+------ public | actor | 数据表 | system | 40 kB | (1 行记录) PackdataServer=#
还原到新的模式中
[kingbase@Node1 ~]$ [kingbase@Node1 ~]$ sys_restore -Usy -dPackdataServer /Kingbase/ES/V9/cluster/backup/PackdataServer_public_all.dmp -Fc -g public -G dataserver
再次确认还原到新模式dataServer的数据:
PackdataServer-# \dt+ dataServer.* 关联列表 架构模式 | 名称 | 类型 | 拥有者 | 大小 | 描述 ------------+------------------+--------+--------+------------+------ dataserver | actor | 数据表 | system | 40 kB | dataserver | address | 数据表 | system | 72 kB | dataserver | category | 数据表 | system | 8192 bytes | dataserver | city | 数据表 | system | 64 kB | dataserver | country | 数据表 | system | 8192 bytes | dataserver | customer | 数据表 | system | 0 bytes | dataserver | film_actor | 数据表 | system | 264 kB | dataserver | film_category | 数据表 | system | 72 kB | dataserver | inventory | 数据表 | system | 0 bytes | dataserver | language | 数据表 | system | 8192 bytes | dataserver | payment | 数据表 | system | 0 bytes | dataserver | payment_p2007_01 | 数据表 | system | 0 bytes | dataserver | payment_p2007_02 | 数据表 | system | 0 bytes | dataserver | payment_p2007_03 | 数据表 | system | 0 bytes | dataserver | payment_p2007_04 | 数据表 | system | 0 bytes | dataserver | payment_p2007_05 | 数据表 | system | 0 bytes | dataserver | payment_p2007_06 | 数据表 | system | 0 bytes | dataserver | rental | 数据表 | system | 0 bytes | dataserver | staff | 数据表 | system | 8192 bytes | dataserver | store | 数据表 | system | 0 bytes | dataserver | t01 | 数据表 | system | 16 kB | (21 行记录) PackdataServer-#
3.3、逻辑备份支持锁超时:
在事务中截断表customer 1、使用sy用户登录packserver数据库,开启显式事务
代码如下:
packserver=> begin; BEGIN packserver=> truncate table public.customer cascade; TRUNCATE TABLE packserver=>
2、使用sys_dump备份表customer时,一直处于等待状态
代码如下:
[kingbase@Node1 backup]$ sys_dump -Usy -dpackserver -Fc -t public.customer -f /Kingbase/ES/V9/cluster/backup/packserver_customer.dmp
3、备份表customer时,使用锁等待超时参数
代码如下:
[kingbase@Node1 backup]$ [kingbase@Node1 backup]$ sys_dump -Usy -dpackserver -Fc -t public.customer -f /Kingbase/ES/V9/cluster/backup/packserver_ customer.dmp --lock-wait-timeout=10s sys_dump: 错误: 查询失败: ERROR: canceling statement due to statement timeout sys_dump: 错误: 查询是: LOCK TABLE public.customer IN ACCESS SHARE MODE [kingbase@Node1 backup]$
四、sys_dumpall备份
- 1、备份数据库
[kingbase@Node1 ~]$ sys_dumpall -Usystem -f /Kingbase/ES/V9/cluster/backup/alldatatable1.sql [kingbase@Node1 ~]$
2、从备份文件恢复所有数据库
[kingbase@Node1 ~]$ ksql -Usystem -dpackserver -f /Kingbase/ES/V9/cluster/backup/alldatatable1.sql SET SET SET ......................................... ksql:/Kingbase/ES/V9/cluster/backup/alldatatable1.sql:26: NOTICE: role "esrep" is already a member of role "kcluster" GRANT ROLE ksql:/Kingbase/ES/V9/cluster/backup/alldatatable1.sql:27: NOTICE: role "kcluster" is already a member of role "pg_monitor" GRANT ROLE ksql:/Kingbase/ES/V9/cluster/backup/alldatatable1.sql:34: ERROR: tablespace "cssd" already exists You are now connected to database "template1" as userName "system". [kingbase@Node1 ~]$
3、只备份自定义的角色信息
[kingbase@Node1 ~]$ sys_dumpall -Usystem -r -f /Kingbase/ES/V9/cluster/backup/roles.sql [kingbase@Node1 ~]$
查看备份文件
[kingbase@Node1 ~]$ grep ^[a-zA-Z] /Kingbase/ES/V9/cluster/backup/roles.sql SET default_transaction_read_only = off; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; CREATE ROLE esrep; ALTER ROLE esrep WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:+ltsuu+HaiYMUYE6Rk76DA==$7mAArxnvBYZ/DX30e3ET0TwXRrd0UqhPzapZJi/WWYQ=:irIgkf7KaNPPngDluYDJzeTfNIug12wy7q5E3WWu9q8='; CREATE ROLE sy; ALTER ROLE sy WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:LsVDRet3N1nqCoUvhvZl9Q==$g0WBsffySb/JbDG8cxrnjEzr3nTDDnvmfNeFoqQccwA=:u9LRik2Wc9VRzkoBnl/aovq6ZC6OPw6jYEmoDvJNzBk='; CREATE ROLE system; ALTER ROLE system WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:Rjgw405LJkt7t32ZiFydTg==$loONAmodW6BduEIsOlT98dd36MJMNZOS0Dh2vBhCXeQ=:CQvO8DFRocEsBwefn/S21F+vPdI2wLpiV5zGozcOX0E='; GRANT kcluster TO esrep GRANTED BY system; GRANT pg_monitor TO kcluster GRANTED BY system; [kingbase@Node1 ~]$
4、只备份自定义的表空间定义信息
[kingbase@Node1 ~]$ sys_dumpall -Usy -t -f /Kingbase/ES/V9/cluster/backup/tablespace.sql [kingbase@Node1 ~]$
查看备份文件
[kingbase@Node1 ~]$ grep ^[a-zA-Z] /Kingbase/ES/V9/cluster/backup/tablespace.sql SET default_transaction_read_only = off; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; CREATE TABLESPACE cssd OWNER sy LOCATION '/Kingbase/ES/V9/cluster/cssd'; [kingbase@Node1 ~]$
5、只备份自定义的角色信息和表空间定义信息
[kingbase@Node1 ~]$ sys_dumpall -Usystem -g -f /Kingbase/ES/V9/cluster/backup/global.sql [kingbase@Node1 ~]$
查看备份文件
[kingbase@Node1 ~]$ [kingbase@Node1 ~]$ grep ^[a-zA-Z] /Kingbase/ES/V9/cluster/backup/global.sql SET default_transaction_read_only = off; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; CREATE ROLE esrep; ALTER ROLE esrep WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:+ltsuu+HaiYMUYE6Rk76DA==$7mAArxnvBYZ/DX30e3ET0TwXRrd0UqhPzapZJi/WWYQ=:irIgkf7KaNPPngDluYDJzeTfNIug12wy7q5E3WWu9q8='; CREATE ROLE sy; ALTER ROLE sy WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:LsVDRet3N1nqCoUvhvZl9Q==$g0WBsffySb/JbDG8cxrnjEzr3nTDDnvmfNeFoqQccwA=:u9LRik2Wc9VRzkoBnl/aovq6ZC6OPw6jYEmoDvJNzBk='; CREATE ROLE system; ALTER ROLE system WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:Rjgw405LJkt7t32ZiFydTg==$loONAmodW6BduEIsOlT98dd36MJMNZOS0Dh2vBhCXeQ=:CQvO8DFRocEsBwefn/S21F+vPdI2wLpiV5zGozcOX0E='; GRANT kcluster TO esrep GRANTED BY system; GRANT pg_monitor TO kcluster GRANTED BY system; CREATE TABLESPACE cssd OWNER sy LOCATION '/Kingbase/ES/V9/cluster/cssd'; [kingbase@Node1 ~]$
6、只备份所有对象的定义信息,不包括数据
[kingbase@Node1 ~]$ sys_dumpall -Usystem -s -f /Kingbase/ES/V9/cluster/backup/schema.sql [kingbase@Node1 ~]$
查看备份文件
[kingbase@Node1 ~]$ [kingbase@Node1 ~]$ cat /Kingbase/ES/V9/cluster/backup/schema.sql |grep -i -E 'create|alter|grant|revoke|copy' CREATE ROLE esrep; ALTER ROLE esrep WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN REPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:+ltsuu+HaiYMUYE6Rk76DA==$7mAArxnvBYZ/DX30e3ET0TwXRrd0UqhPzapZJi/WWYQ=:irIgkf7KaNPPngDluYDJzeTfNIug12wy7q5E3WWu9q8='; CREATE ROLE sy; ALTER ROLE sy WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:LsVDRet3N1nqCoUvhvZl9Q==$g0WBsffySb/JbDG8cxrnjEzr3nTDDnvmfNeFoqQccwA=:u9LRik2Wc9VRzkoBnl/aovq6ZC6OPw6jYEmoDvJNzBk='; CREATE ROLE system; ......................................... GRANT SELECT ON TABLE sys_catalog.sys_timezone_abbrevs TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_timezone_names TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_transform TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_trigger TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_triggers TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_ts_config TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_ts_config_map TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_ts_dict TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_ts_parser TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_ts_template TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_type TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_user_mappings TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_users TO PUBLIC; GRANT SELECT ON TABLE sys_catalog.sys_views TO PUBLIC; [kingbase@Node1 ~]$
说明:使用sys_dumpall备份的文件还原数据库时,需将重复的对象全部删除,否则无法成功还原。
五、问题解决:
5.1、备份时,需用管理员权限的账户进行操作,否则会报错。以下是普通账户备份时遇到的问题 代码如下:
[kingbase@Node1 cluster]$ sys_dump -Usy -dPackdataServer -f /Kingbase/ES/V9/cluster/backup/PackdataServer.dmp -Fc -t public.* sys_dump: 错误: 查询失败: ERROR: permission denied for table actor sys_dump: 错误: 查询是: LOCK TABLE public.actor IN ACCESS SHARE MODE [kingbase@Node1 cluster]$
产生这个问题的原因是,pg_dump需要使用超级用户。 经过如下命令,更改sy为超级用户:
PackdataServer=# alter user sy with superuser; ALTER ROLE PackdataServer=#
六、总结
1、Kingbase的逻辑备份和物理备份的区别
Kingbase数据库提供了两种类型的备份:逻辑备份和物理备份。它们的主要区别在于备份的内容和恢复的方式。
- 1.1、逻辑备份
逻辑备份是对整个数据库或其部分对象(如表、视图等)进行的备份,它通过导出数据库对象的逻辑结构和数据内容来实现。逻辑备份的特点是可以跨平台恢复,并且在恢复时可以选择性地恢复某些对象,而不影响其他数据。逻辑备份通常使用sys_dump命令来执行,可以将备份数据导出为SQL脚本文件或dump归档文件。
- 1.2、物理备份
物理备份是对数据库文件的直接复制,包括数据文件、控制文件和日志文件等。物理备份的特点是恢复速度快,适合于灾难恢复场景。Kingbase的物理备份通常使用sys_rman工具来执行,它可以帮助管理和恢复数据库的物理备份。
综上所述,在选择备份类型时,应考虑数据的重要性、恢复时间要求以及是否需要跨平台恢复等因素。逻辑备份适用于对数据的精细管理和灵活恢复,而物理备份适用于快速全面恢复。
2、Kingbase逻辑备份对系统性能的影响
Kingbase逻辑备份是一种常用的数据库备份方法,它能够在数据库持续运行的同时创建一致的备份。这种备份方式不会阻塞其他用户访问数据库(无论是读取还是写入),因此在业务正常运行时进行逻辑备份通常不会对系统性能产生显著影响。
然而,如果在业务高峰期或系统负载较高时进行逻辑备份,可能会因为资源竞争导致性能下降。为了减少对生产环境的影响,建议在业务低峰时段进行逻辑备份,或者使用专门的备份窗口来执行备份任务。
此外,Kingbase逻辑备份支持并行处理,这意味着可以通过增加并行任务的数量来缩短备份和恢复的时间,从而减轻对系统性能的影响。在实施逻辑备份时,可以根据系统的实际情况和资源状况调整并行度,以平衡备份效率和系统性能。
综上所述,Kingbase逻辑备份对系统性能的影响取决于多种因素,包括备份时间、系统负载以及并行处理的配置。通过合理规划备份策略和优化备份参数,可以最大限度地减少逻辑备份对系统性能的影响。




