电科金仓-docker 乱七八糟记录
操作 MySQL 命令 KingbaseES / PostgreSQL 命令 (ksql)
查看所有数据库 show databases; \l (或 \list)
切换数据库 use <database_name>; \c <database_name> (或 \connect <database_name>)
查看当前库的所有表 show tables; \dt
查看表结构 describe <table_name>; \d <table_name>
列出所有用户 / 角色 select user from mysql.user; \du (或 \dg)
列出所有模式 (Schema) - (概念不同) \dn
查看命令历史 \s \s
元命令:https://docs.kingbase.com.cn/cn/KES-V9R1C10/reference/tools/%E8%BF%90%E7%BB%B4%E7%AE%A1%E7%90%86/ksql/ksql-4
docker run -d --privileged -p 4321:54321 -v /home/data/kingbase:/home/kingbase/userdata/ -e NEED_START=yes -e DB_USER=system -e DB_PASSWORD=12345678ab -e DB_MODE=mysql --name kingbase kingbase /usr/sbin/init
docker run -d --privileged -p 4321:54321 -v /home/data/kingbase/:/home/kingbase/userdata/ -e NEED_START=yes -e DB_MODE=mysql --name kingbase kingbase:1.0
ksql -Usystem -d test
-- 在ksql中执行以下命令:
-- 1. 创建用户
CREATE USER SMS WITH PASSWORD '1qaz2wsx???';
-- 2. 创建数据库(使用template0模板)
CREATE DATABASE SMSDB
WITH
OWNER = SMS
ENCODING = 'UTF8'
TEMPLATE = template0
LC_COLLATE = 'en_US.UTF-8'
LC_CTYPE = 'en_US.UTF-8'
CONNECTION LIMIT = -1;
-- 3. 切换到SMSDB数据库
\c SMSDB
-- 4. 授予权限
GRANT ALL PRIVILEGES ON DATABASE SMSDB TO SMS;
GRANT CREATE ON SCHEMA public TO SMS;
GRANT USAGE ON SCHEMA public TO SMS;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO SMS;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO SMS;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO SMS;
-- 5. 设置搜索路径
ALTER ROLE SMS SET search_path TO public;
-- 6. 退出
\q
SELECT n.nspname as schema_name,
t.typname as type_name,
t.oid
FROM pg_type t
JOIN pg_namespace n ON t.typnamespace = n.oid
WHERE t.typname = 'longtext';
DROP TYPE IF EXISTS information_schema.longtext CASCADE;
配置优先级:ALTER DATABASE SMSDB SET search_path to "$user", public, sys, sys_catalog, pg_catalog;
然后执行 select sys_reload_conf(); 重载配置文件。
# 1. 停止kingbase容器
docker stop kingbase
# 2. 进入挂载目录,清理残留的PID/socket文件(关键)
cd /home/sms/sms/data/kingbase
# 查找并删除pid文件(通常在data目录下)
find . -name "*.pid" -delete
# 查找并删除socket文件
find . -name ".s.KINGBASE*" -delete
# 查找并删除postmaster.pid(Kingbase兼容PostgreSQL,可能有此文件)
find . -name "postmaster.pid" -delete
# 修复挂载目录的属主和权限(关键)
sudo chown -R 1000:1000 /home/sms/sms/data/kingbase
sudo chmod -R 700 /home/sms/sms/data/kingbase # 数据库目录需严格权限
当数据库授权文件(License)过期时,启动数据库过程将报错,提示授权文件过期:
致命错误,license file expired
此时,需将新的license文件上传至服务器后,通过命令 sys_ctl 或SQL函数 sys_reload_license 直接加载新license授权文件并使其生效,无需重启数据库(已启动的ksql会话需要退出后才能获取最新reload后的license信息)。其中新license授权文件路径和名称由用户输入(如果未输入新license授权文件路径和名称,则取当前生效路径下的license)。
reload成功后,会将旧的license.dat备份,备份规则是在同目录下生成一个 license.dat_YYYY-MM-DD_HH:MI:SS 文件。
替换license是否要重启数据库
可以不必重启数据库,在任一system用户连接上执行select sys_reload_license('/home/kingbase/install/kingbase/bin/license.dat'),退出重登录后就可以看到变更生效。
License操作都需要先进入容器中
# docker exec -it sms.kingbase bash
获取License完整信息
A、登录之后执行命令
1、登录:ksql -U system -d test
2、执行命令:select get_license_info();
B、直接查看
1、cat /home/kingbase/install/kingbase/bin/license.dat
获取License的有效期
A、登录之后执行命令
1、登录:ksql -U system -d test
2、执行命令:select get_license_validdays();
test=# select get_license_validdays();
get_license_validdays
-----------------------
90
(1 row)
select get_license_validdays();如果返回值为 -2 ,表示永久license
过期之后怎么更新License
现在宿主机更新新的license.dat
1、把新的license.dat更新到/home/data/kingbase/etc下
2、更新权限:chmod 755 /home/data/kingbase/etc/license.dat
进入容器
1、docker exec -it sms.kingbase bash
2、更新权限:chown -R kingabse:kingbase /home/kingbase/install/kingbase/bin/license.dat
3、更新:sys_ctl -D /home/kingbase/userdata/data reload_license -l /home/kingbase/install/kingbase/bin/license.dat
[kingbase@fcf41a88c1c1 ~]$ sys_ctl -D /home/kingbase/userdata/data reload_license -l /home/kingbase/install/kingbase/bin/license.dat
Checking license file...
Check successfully. license file will expire in 2026-04-05.
Reload successfully.
最好更新之后重启容器

浙公网安备 33010602011771号