kingbase 关闭应用连接,类似 Oracle 关闭监听一样
Oracle 有独立监听进程 listener,停监听就能阻止新 TCP 连接;Kingbase 监听集成在数据库主进程,无独立 listener 程序,分 4 种场景,从临时免重启→彻底断网络→只屏蔽应用库→停机维护,按需选用。
| Oracle 操作 | Kingbase 等价方案 | 效果 |
|---|---|---|
lsnrctl stop 停止监听,新连接拒绝,老连接保留 |
方案 1:修改listen_addresses=localhost重载;方案 2:sys_hba 全部拒绝 |
外部应用 TCP 连不上,本地 ksql 可登录,已有会话不中断 |
| 维护模式:阻止新连接 + 杀旧会话 | 方案 3:allow_connections=false + 批量 terminate | 指定业务库完全隔离 |
| 关闭监听 + 停机 | 方案 4:sys_ctl stop | 整个数据库彻底关闭,所有连接断开 |
方案一:仅允许本地登录,外部应用全部拒绝(最贴近 lsnrctl stop,免重启)
1 修改 kingbase.conf
数据目录 kingbase.conf
# 原配置 listen_addresses = '*'
listen_addresses = 'localhost' # 只监听127.0.01,所有服务器IP/外部IP全部不监听
port = 5432
2 重载配置(无需重启库,秒生效)
# 切换kingbase用户
su - kingbase
# 替换为你的data目录
sys_ctl reload -D /opt/Kingbase/ES/V9/data
效果
- 应用、远程工具(ksql/DBeaver)TCP 连接直接报 Connection refused;
- 本机
ksql -h 127.0.0.1仍可登录做维护; - 已存在的业务连接不会断开(和 lsnrctl stop 行为完全一致)。
恢复对外访问
改回 listen_addresses = '*',再次执行 sys_ctl reload。
方案二:sys_hba.conf 全局拒绝所有 TCP 连接(精准黑名单,免重启)
不关闭监听端口,但所有远程 IP 认证直接返回reject,本地仍可登录。
- 编辑
sys_hba.conf,注释所有host远程规则,末尾加全局拒绝:
# 注释所有 host 0.0.0.0/0、网段放行规则
#host all all 0.0.0.0/0 scram-sha-256
# 仅保留本地socket/127.0.01
local all all trust
host all all 127.0.0.1/32 scram-sha-256
# 所有外部IP全部拒绝
host all all 0.0.0.0/0 reject
- 重载生效
sys_ctl reload -D /xxx/data
- 恢复:删除最后一行
host all all 0.0.0.0/0 reject,重载。
方案三:只屏蔽业务数据库,DBA 仍可登录(维护升级专用)
只想阻断业务库,不影响 system 超级用户运维,分两步:
步骤 1:禁止业务库接收新连接(新请求直接拦截)
-- 替换业务库名 business_db
ALTER DATABASE business_db WITH allow_connections = false;
步骤 2:批量杀掉当前所有业务会话
SELECT sys_terminate_backend(pid)
FROM sys_stat_activity
WHERE datname = 'business_db' AND usename != 'system'; -- 保留超级用户会话
恢复业务访问
ALTER DATABASE business_db WITH allow_connections = true;
方案四:撤销应用账号登录权限(按用户屏蔽,粒度最小)
针对应用账号(如 app_user),直接剥夺登录能力:
-- 禁止该账号登录,应用连接直接报错
ALTER ROLE app_user NOLOGIN;
-- 恢复
ALTER ROLE app_user LOGIN;
方案五:彻底停机,所有连接全部断开(等价 Oracle shutdown immediate)
su - kingbase
# 优雅停机,等待事务完成
sys_ctl stop -D /opt/Kingbase/ES/V9/data
# 快速停机,立刻断所有会话(维护紧急使用)
sys_ctl stop -m fast -D /opt/Kingbase/ES/V9/data
补充:查看当前外部连接
-- 查看所有远程业务会话
SELECT pid,usename,datname,client_addr,state,query FROM sys_stat_activity WHERE client_addr <> '127.0.0.1';
-- 批量杀指定IP所有连接
SELECT sys_terminate_backend(pid) FROM sys_stat_activity WHERE client_addr = '192.168.1.100';
浙公网安备 33010602011771号