KingbaseV8
KingbaseV8
文章目录
- KingbaseV8
- KES服务
- 安装
- 服务管理
- 客户端命令行工具
- 元命令
- 资讯性
- 连接
- 输入输出
- SQL命令
- 角色(Role)
- 用户(User)
- 权限(Privilege)
- 表空间(Tablespace)
- 数据库(Database)
- 模式(Schema)
- 表(Table)
- 索引(Index)
- 视图(View)
- 备份与还原
- 逻辑备份
- 物理备份
KES服务
安装
mkdir cd
sudo mount -o ro ./KingbaseES_V009R001C001B0025_Lin64_install.iso ./cd
sudo ./cd/setup.sh
# 在UI中安装,步骤略
# 金仓安装目录
export KINGBASE_HOME=/home/zhmh/Kingbase
# 将KES注册为Linux服务
sudo ${KINGBASE_HOME}/ES/V9/install/script/root.sh
为常用命令创建软连接:
# Server Command
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_ctl /usr/local/bin/sys_ctl
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_dump /usr/local/bin/sys_dump
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_restore /usr/local/bin/sys_restore
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_dumpall /usr/local/bin/sys_dumpall
sudo ln -s ${KINGBASE_HOME}/ES/V9/Server/bin/sys_rman /usr/local/bin/sys_rman# Client Command
sudo ln -s ${KINGBASE_HOME}/ES/V9/ClientTools/bin/ksql /usr/local/bin/ksql
服务管理
# 查看服务状态(systemd)
sudo systemctl status kingbased
使用金仓内置命令管理:
# sys_ctl {status | start | restart | reload | stop} [-D 数据目录] [-m {smart | fast | immediate}]# 查看服务状态(sys_ctl)
sys_ctl status -D ${KINGBASE_HOME}/ES/V9/data# Orexport KINGBASE_DATA=${KINGBASE_HOME}/ES/V9/data
sys_ctl status
客户端命令行工具
ksql
是 Kingbase 的交互式客户端工具。
# 查看帮助
export LANG=zh_CN.UTF-8
ksql --help
# ksql [OPTION]... [DBNAME [USERNAME]]
#
# 常规选项:
# -c, --command=COMMAND 仅运行单个命令(SQL或内部)并退出
# -d, --dbname=DBNAME 要连接的数据库名称
# -f, --file=FILENAME 从文件执行命令,然后退出
# -l, --list 列出可用数据库列表,然后退出
# -v, --set=, --variable=NAME=VALUE
#
# 连接选项:
# -h, --host=HOSTNAME 数据库服务器主机(默认: `localhost`)
# -p, --port=PORT 数据库服务器端口(默认: `54321`)
# -U, --username=USERNAME 数据库名称 (默认: `${USER}`)
# -w, --no-password 不提示输入密码
# -W, --password 强制提示输入密码
# -C, --client-cert-path 证书路径
# 登录
ksql 'hostaddr=127.0.0.1 port=54321 user=SYSTEM dbname=test'
ksql -h 127.0.0.1 -p 54321 -U SYSTEM -d test
ksql -U SYSTEM -d test
ksql -USYSTEM -dtest
ksql test SYSTEM
# ksql kingbase://SYSTEM@127.0.0.1:54321/test
# Or
export KINGBASE_HOST=127.0.0.1
export KINGBASE_PORT=54321
export KINGBASE_DATABASE=test
export KINGBASE_USER=system
ksql
# 列出所有数据库
ksql test SYSTEM -l# 导入/从文件执行命令(非交互)
ksql test SYSTEM -f /tmp/xxx.sql# 执行单条SQL语句(非交互)
ksql test SYSTEM -c 'SELECT * FROM newtable';
元命令
ksql 提供了一组以\
开头的快捷命令,称之为 ksql 元命令。
*
、?
通配符,用于提高查询效率S
显示系统对象+
其余的详细信息
# 查看帮助
\?
资讯性
# \d[S+] 列出表,视图和序列
# \l[+] [模式] 列出所有数据库
# 其它详见帮助
连接
# 当前连接信息
\conninfo# 显示或设置当前连接编码
\encoding [编码名称]# 更改用户密码
\password [USERNAME]
# 连接到新数据库
# \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}# 切换(需要再登录)
\c test SYSTEM 127.0.0.1 54321# 切换数据库和用户(需要再登录)
\c test SYSTEM# 切换用户(需要再登录)
\c - SYSTEM# 切换数据库
\c test
输入输出
# 更改目前的工作目录
\cd [目录]# 从文件执行命令
\i <FILE># 从文件执行命令(从当前脚本位置)
\ir <FILE># 逻辑导出(不依赖表空间)
\copy newtable to ./course.csv csv;
SQL命令
角色(Role)
将一组具有相同权限的用户组织在一起, 这一组具有相同权限的用户就称为角色。角色在生产系统中一般被视作用户组,利用角色对用户执行批量授权。
-- 查看已有角色及账户状态
SELECT * FROM DBA_ROLES
-- 查看已有角色及其权限
SELECT * FROM SYS_ROLES
-- 查看角色及其用户成员(元命令)
-- \du[S+] [模式] 列出角色-- 创建角色(注意不能和用户同名)
-- CREATE ROLE "name" [[WITH] 用户权限...]
CREATE ROLE "demo_role"-- 修改角色
-- ALTER ROLE "name" {[WITH] 用户权限... | RENAME TO "new_name"}
ALTER ROLE "demo_role" RENAME TO "new_name"-- 删除角色
-- DROP ROLE [IF EXISTS] "name"
DROP ROLE IF EXISTS "demo_role"
用户(User)
数据库用户代表数据库的使用者,通过定义和管理用户对资源的访问和操作权限,确保只有授权用户能进行合法操作,从而维护系统的完整性和保密性。
-- [用户权限]
-- [NO]SUPERUSER -- 超级用户的权限
-- [NO]CREATEDB -- 创建数据库的权限
-- [NO]CREATEROLE -- 创建角色的权限
-- [NO]LOGIN -- 登录数据库的权限(默认有)
-- [NO]REPLICATION -- 允许发起流复制或者把系统放入或退出备份模式的权限
-- [NO]INHERIT -- 自动继承父角色拥有的权限
-- [NO]BYPASSRLS -- 角色是否会忽略表中的行级安全性
-- CONNECTION LIMIT -1 -- 限制连接数,-1为无限制
-- PASSWORD '******' -- 设置密码
-- VALID UNTIL 'timestamp' -- 密码过期时间
-- [IN] ROLE "roles" -- 当前用户加入这些角色
-- 查看已有用户及账户状态
SELECT * FROM DBA_USERS
-- 查看已有用户及其权限
SELECT * FROM SYS_USERS-- 创建用户(注意不能和角色同名)
-- CREATE USER "name" [[WITH] 用户权限...]
CREATE USER "demo_user" WITH SUPERUSER CONNECTION LIMIT -1 PASSWORD '123' ROLE "demo_role"-- 修改用户权限
-- ALTER USER "name" {[WITH] 用户权限... | RENAME TO "new_name"}
-- 修改用户名称
ALTER USER "demo_user" RENAME TO "new_name"
-- 修改用户权限
ALTER USER "demo_user" CREATEDB;
-- 修改用户密码
ALTER USER "demo_user" PASSWORD '456';
-- 修改用户的并发连接数
ALTER USER "demo_user" CONNECTION LIMIT 10;-- 将用户加入角色
-- GRANT "role" TO "user"[,...]-- 删除用户
-- DROP USER [IF EXISTS] "name"
DROP USER IF EXISTS "demo_user"
权限(Privilege)
-- 列出表,视图和序列的访问权限(元命令)
-- \dp [模式]-- 针对{数据库|模式|表空间|表}授权
-- GRANT {
-- {CREATE | CONNECT | TEMPORARY | TEMP}[, ...] | ALL [PRIVILEGES]
-- } ON {
-- DATABASE "database_name"[, ...] |
-- SCHEMA "schema_name"[, ...] |
-- TABLESPACE "tablespace_name"[, ...] |
-- [TABLE] "table_name"
-- } TO "role_or_user"[, ...] [WITH GRANT OPTION]
GRANT ALL PRIVILEGES ON DATABASE "test" TO "demo_role" WITH GRANT OPTION-- 撤销{数据库|模式|表空间|表}授权
-- REVOKE [GRANT OPTION FOR] {
-- {CREATE | CONNECT | TEMPORARY | TEMP}[,...] | ALL [PRIVILEGES]
-- }
-- ON {
-- DATABASE "database_name"[, ...] |
-- SCHEMA "schema_name"[, ...] |
-- TABLESPACE "tablespace_name"[, ...] |
-- [TABLE] "table_name"
-- }
-- FROM {[GROUP] "role_or_user" | PUBLIC}[,...] [CASCADE | RESTRICT]
REVOKE GRANT OPTION FOR ALL PRIVILEGES ON DATABASE "test" FROM "demo_role"
表空间(Tablespace)
表空间实际上就是给数据库对象(主要是表)指定一个操作系统文件夹。
-- 查看表空间(元命令)
-- \db[+] [PATTERN]-- 创建表空间
-- CREATE TABLESPACE tablespace_name
-- [ OWNER {new_owner | CURRENT_USER | SESSION_USER} ]
-- LOCATION 'directory' -- 与表空间关联的文件系统的绝对路径。
-- [ ONLINE | OFFLINE ] -- 离线状态时表空间将不能提供任何的读写服务
-- [ WITH (tablespace_option = value [,... ]) ]
CREATE TABLESPACE "demo" OWNER "SYSTEM" LOCATION '/data/tablespace/demo';-- 修改表空间
-- ALTER TABLESPACE "name" RENAME TO "new_name";
-- ALTER TABLESPACE "name" OWNER TO {"new_owner" | CURRENT_USER | SESSION_USER}
-- ALTER TABLESPACE name SET (tablespace_option = value [,... ])
-- ALTER TABLESPACE name RESET (tablespace_option [,... ])
-- ALTER TABLESPACE name {ONLINE | OFFLINE | READ WRITE | READ ONLY}-- 删除表空间:只能被超级用户或拥有者删除;删除前不能存在任何对象
-- DROP TABLESPACE [IF EXISTS] "name"
DROP TABLESPACE IF EXISTS "demo"
数据库(Database)
数据库是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
-- 查看数据库[所有者,编码,权限,表空间](元命令)
-- \l+-- 创建数据库
-- CREATE DATABASE "name" [
-- [WITH] [ OWNER [=] user_name ] -- 所有者
-- [ TEMPLATE [=] template ] -- 创建模板
-- [ ENCODING [=] encoding ] -- 编码
-- [ LC_COLLATE [=] lc_collate ] -- 排序规则
-- [ LC_CTYPE [=] lc_ctype ] -- 字符分类
-- [ TABLESPACE [=] tablespace_name ] -- 表空间
-- [ ALLOW_CONNECTIONS [=] allowconn ] -- 允许用户连接
-- [ CONNECTION LIMIT [=] connlimit ] -- 连接限制
-- [ IS TEMPLATE [=] istemplate ] -- 作为模板
-- ]
CREATE DATABASE "demo"-- 修改数据库名称
-- ALTER DATABASE "name" RENAME TO "new_name"
ALTER DATABASE "demo" RENAME TO "new_name"-- 修改数据库所有者
-- ALTER DATABASE "name" OWNER TO {"new_owner" | CURRENT_USER | SESSION_USER}-- 修改数据库表空间(移动到另一个表空间)
-- ALTER DATABASE "name" SET TABLESPACE "new_tablespace"-- 删除数据库
-- DROP DATABASE [IF EXISTS] "name"
DROP DATABASE IF EXISTS "name"
模式(Schema)
模式就是数据库对象的集合。
-- 列出所有模式(元命令)
-- \dn[S+] [模式]
\dn+-- 创建模式(将创建在当前所在数据库)
-- CREATE SCHEMA "schema_name" [AUTHORIZATION "role_specification"] [schema_element[...]]
-- CREATE SCHEMA AUTHORIZATION "role_specification" [schema_element[...]]
-- CREATE SCHEMA IF NOT EXISTS "schema_name" [AUTHORIZATION "role_specification"]
-- CREATE SCHEMA IF NOT EXISTS AUTHORIZATION "role_specification"
CREATE SCHEMA "schema_name" AUTHORIZATION "SYSTEM"-- 修改模式
-- ALTER SCHEMA "name" RENAME TO "new_name"
-- ALTER SCHEMA "name" OWNER TO {new_owner | CURRENT_USER | SESSION_USER}
ALTER SCHEMA "schema_name" RENAME TO "new_name"-- 删除模式
-- DROP SCHEMA [IF EXISTS] "name" [,...] [CASCADE | RESTRICT]
DROP SCHEMA IF EXISTS "schema_name"
表(Table)
-- 略
索引(Index)
-- 略
视图(View)
-- 创建视图
CREATE VIEW "public"."view1" AS (SELECT * FROM ...);-- 删除视图
DROP VIEW "public"."view1";
备份与还原
逻辑备份
sys_dump
支持细粒度备份。sys_dumpall
强制备份整个数据库集簇中的数据,且只支持备份为SQL。
# sys_dump [OPTION]... [数据库名字]
# -f, --file=FILENAME 输出文件或目录名
# -F, --format=c|d|t|p 输出文件格式(c为dmp,d为目录,t为tar,p为sql(默认值))
# -Z, --compress=0-9 被压缩格式的压缩级别
# -j, --jobs=NUM 执行多个并行任务进行备份转储工作
# --lock-wait-timeout=TIMEOUT 在等待表锁超时后操作失败
# -a, --data-only 只转储数据,不包括模式
# -b, --blobs 在转储中包括大对象
# -B, --no-blobs 排除转储中的大型对象
# -c, --clean 在重新创建之前,先清除(删除)数据库对象
# -C, --create 在转储中包括DDL命令,以便创建数据库
# -E, --encoding=ENCODING 转储以ENCODING形式编码的数据
# -n, --schema=PATTERN 只导出指定的模式
# -N, --exclude-schema=PATTERN 不导出指定的模式
# -s, --schema-only 只转储模式, 不包括数据
# -t, --table=PATTERN 只导出指定表
# -T, --exclude-table=PATTERN 不导出指定表
# -x, --no-privileges 不要转储权限 (grant/revoke)
# --inserts 以INSERT命令,而不是COPY命令的形式转储数据
# -g, --fromSchema=NAME 恢复来自这个模式的对象,和-G一同使用
# -G, --toSchema=NAME 把对象恢复到这个模式,和-g一同使用
# 目标模式和源模式的的数目应相同,或者只有一个目标# 备份test数据库的public模式为sql文件
sys_dump -U SYSTEM -d test -f /tmp/backup_public.sql -Fp -n public# 还原数据(原样)
sys_restore -U SYSTEM -d test /tmp/backup_public.sql -Fp -n public# 还原数据(新模式)
sys_restore -U SYSTEM -d test /tmp/backup_public.sql -Fp -g public -G public2
# sys_dumpall [OPTION]
# -h, --host=主机名 数据库服务器的主机名或套接字目录
# -p, --port=端口号 数据库服务器的端口号
# -U, --username=名字 以指定的数据库用户联接
# -f, --file=FILENAME 输出文件名
# -r, --roles-only 只转储角色,不包括数据库或表空间
# -t, --tablespaces-only 只转储表空间,而不转储数据库或角色
# -g, --globals-only 只转储全局对象, 不包括数据库
# -s, --schema-only 只转储模式, 不包括数据# 只备份自定义的角色
sys_dumpall -U SYSTEM -r -f /tmp/backup_roles.sql# 只备份自定义表空间
# CREATE TABLESPACE tbs01 LOCATION '/home/kingbase/dir01';
sys_dumpall -U SYSTEM -t -f /tmp/backup_tablespaces.sql# 同时备份自定义角色和自定义表空间
sys_dumpall -U SYSTEM -g -f /tmp/backup_globals.sql# 只备份所有对象的定义信息(不包含表的数据)。
sys_dumpall -U SYSTEM -s -f /tmp/backup_schema.sql
物理备份
# sys_rman