麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)

一台麒麟桌面,金仓 V8R6 被前人在 user账号下裸起过,没建 kingbaseOS 用户、没注册 systemd 服务、root.sh反复 fail、KYSEC 拦 su、polkit 鉴权不过......最后推倒重装,新建专用 OS 用户 progoo,走标准姿势。下面把过程和踩的点记下来,省得下次再绕。


一、先判断旧库"到底啥情况"

复制代码
# 服务层
systemctl status kingbase8d.service   # Unit not found,根本没注册

# 进程层
ps aux | grep kingbase | grep -v grep
# → 主进程属主是 user,data 目录 ls -ld 也是 user:user
# 说明是 user 裸跑 sys_ctl start 拉起来的,没走 systemd

# 连一下试试默认超户
/opt/Kingbase/ES/V8/Server/bin/ksql -U system -d test -p 54321
# FATAL: 角色 "system" 不存在 → 安装时改了默认超户

扒真超户(hba 里 local 是 trust,OS 用户=user,裸连):

复制代码
./ksql -p 54321 -d test
test=# \du
                                 角色列表
  角色名称  |                    属性                    | 成员属于
------------+--------------------------------------------+----------
 kcluster   | 无法登录                                   | {}
 sao        | 没有继承, 建立角色                         | {}
 sso        | 没有继承, 建立角色                         | {}
 user       | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}

这台旧库的真相user就是 DBA,超户不是 system/SA/kingbase/admin任一默认,装的时候向导里"数据库管理员"那栏被人改过。库能跑,但 OS 侧一塌糊涂------user还进了 conda((base)提示符),导致后面 root.shsu - user -c ...在无 tty 下 segfault。


二、决定推倒重来

旧库没业务数据,直接清。

复制代码
# 停库
/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data

# 反注册(装过 root.sh 才会有,没跑过可跳过)
sudo /opt/Kingbase/ES/V8/install/script/rootuninstall.sh

# 清安装目录 + 老服务
sudo rm -rf /opt/Kingbase/ES /opt/Kingbase/ES/V8
sudo rm -f /etc/init.d/kingbased
sudo rm -f /etc/systemd/system/kingbased.service
sudo systemctl daemon-reload

三、新建金仓专用 OS 用户(避开 conda 那坑)

复制代码
sudo useradd -m -s /bin/bash progoo
echo 'progoo:p123456789' | sudo chpasswd

麒麟 V10 默认 pwquality 开着,纯数字密码可能不让过。卡住就临时松一下:

复制代码
sudo sed -i 's/^password.*pam_pwquality.so.*/password    required      pam_pwquality.so minlen=6 dcredit=0 ucredit=0 lcredit=0 ocredit=0/' /etc/pam.d/common-password

progoo放进 sudoers(后面清目录 / 起服务要用):

复制代码
sudo visudo
# 末尾加
progoo  ALL=(ALL:ALL) NOPASSWD:ALL

验证:su - progoosudo whoami返回 root。


四、挂 ISO 装 V8R6

复制代码
sudo mkdir -p /mnt/kingbase_iso
sudo mount -o loop /opt/Kingbase/KingbaseES_V008R006C009B0014_Lin64_install.iso /mnt/kingbase_iso

mount: write-protected, mounted read-only正常,ISO 本来就只读。

复制代码
sudo chown progoo:progoo /opt/Kingbase        # 安装目录 progoo 要能写
su - progoo
cd /mnt/kingbase_iso
./setup.sh -i console                         # SSH 无 GUI 必加 -i console

向导关键项(这几个别手滑)

步骤 选什么 原因
安装集 1 完全安装 服务端 + 工具全要
授权文件 回车(试用) 后面再换正式 lic
安装目录 /opt/Kingbase/ES/V8(默认) 回车
初始化数据库 Y 让安装程序顺手 initdb
端口 54321 金仓默认,别改
数据库管理员 system(默认) 上一轮改成 user 就是连环坑起点
密码 自己设一个 记住
字符集 UTF8 默认
区域 zh_CN.UTF-8 默认
兼容模式 3 MySQL 按源库定,这里是 MySQL
大小写敏感 2 NO MySQL 模式必须选 NO,选 YES 向导会拦
存储块 8k 默认
身份认证 scram-sha-256 默认
自定义参数 回车空 后面再调

装完最后一句提示:

复制代码
如需注册为系统服务,请运行 /opt/Kingbase/ES/V8/install/script/root.sh

五、root.sh 又 fail 了(老剧本重演)

复制代码
sudo /opt/Kingbase/ES/V8/install/script/root.sh
# Job for kingbased.service failed ...
systemctl status kingbased
# Loaded: loaded (/etc/init.d/kingbased; generated)   ← 还在走 sysv 老脚本

journalctl看真凶:

  • su - progoo -c "LD_LIBRARY_PATH=... PATH=..."KYSEC AVC denied execute​ 拦(麒麟 LSM)

  • 手动 systemctl start还会走 polkit 交互鉴权,progoo不在 polkit 信任里 → "鉴定故障 / Access denied"

这次 progoo 是干净用户没 conda 了,但 KYSEC + polkit + init.d 这套组合还是让 root.sh 起不来。不治了,直接换 native systemd unit。


六、清老渣,写 native unit

复制代码
# progoo 下先确认库没在跑
/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data 2>/dev/null

# 切 user(有 sudo 那个)
exit
sudo systemctl stop kingbased 2>/dev/null
sudo systemctl disable kingbased 2>/dev/null
sudo rm -f /etc/init.d/kingbased
sudo rm -f /etc/systemd/system/kingbased.service
sudo systemctl daemon-reload

写 unit(User=progoo直接拉,不走 su,绕开 KYSEC + polkit):

复制代码
sudo tee /etc/systemd/system/kingbased.service > /dev/null << 'EOF'
[Unit]
Description=KingbaseES V8R6
After=network.target

[Service]
Type=forking
User=progoo
Group=progoo
Environment="LD_LIBRARY_PATH=/opt/Kingbase/ES/V8/Server/lib"
Environment="PATH=/opt/Kingbase/ES/V8/Server/bin:/usr/local/bin:/usr/bin"
ExecStart=/opt/Kingbase/ES/V8/Server/bin/sys_ctl start -D /opt/Kingbase/ES/V8/data
ExecStop=/opt/Kingbase/ES/V8/Server/bin/sys_ctl stop -D /opt/Kingbase/ES/V8/data
ExecReload=/opt/Kingbase/ES/V8/Server/bin/sys_ctl reload -D /opt/Kingbase/ES/V8/data
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target
EOF

起:

复制代码
sudo systemctl daemon-reload
sudo systemctl start kingbased
systemctl status kingbased

预期:

复制代码
Loaded: loaded (/etc/systemd/system/kingbased.service)
Active: active (running)

不带 generated,不走 init.d,KYSEC 那条 AVC denied /etc/init.d/kingbased也不会再跳。


七、手动起库时还踩到一个 /tmp lock 权限坑

如果上面 unit 没起、改用手动 sys_ctl start调试,可能撞:

复制代码
FATAL:  could not open lock file "/tmp/.s.KINGBASE.54321.lock": Permission denied

原因:上轮 user起的库在 /tmp留了 lock/socket,属主 user:user,这轮 progoo起要去写同一个 54321 → 没权限。

复制代码
sudo rm -f /tmp/.s.KINGBASE.54321.lock /tmp/.s.KINGBASE.54321
sudo rm -f /tmp/.s.PGSQL.54321.lock /tmp/.s.PGSQL.54321

清完再起就过。


八、验证 + 确认兼容模式

复制代码
su - progoo
/opt/Kingbase/ES/V8/Server/bin/ksql -U system -d test -p 54321

-- 兼容模式(安装时选的 3 = MySQL)
show database_mode;        -- 应返回 mysql

-- 大小写敏感(MySQL 模式必须 NO)
show case_sensitive;       -- 应返回 on(on=不敏感,off=敏感,命名反直觉)

-- 字符集
show server_encoding;      -- UTF8

-- 顺手给 system 设个密码,后面 hba 切 md5 用
ALTER USER system PASSWORD 'Kb#2024v8';

hba 从 trust 切 md5:

复制代码
vim /opt/Kingbase/ES/V8/data/sys_hba.conf
# local   all   all   trust  →  md5
/opt/Kingbase/ES/V8/Server/bin/sys_ctl reload -D /opt/Kingbase/ES/V8/data

progoo 的 ~/.bashrc把 PATH 写死,以后少敲:

复制代码
echo 'export KINGBASE_HOME=/opt/Kingbase/ES/V8' >> ~/.bashrc
echo 'export PATH=$KINGBASE_HOME/Server/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$KINGBASE_HOME/Server/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

九、收工状态

结果
OS 用户 progoo/ p123456789,干净无 conda
金仓版本 V8R6 C009B0014
安装目录 /opt/Kingbase/ES/V8
超户 system
兼容模式 MySQL
大小写 不敏感(on)
端口 54321
服务 native kingbased.servicesystemctl start可起,reboot 自启
hba md5

这次踩到的几个"麒麟 + 金仓"专属坑,下次直接避

  1. 别用现有桌面用户装金仓 ,conda / 自定义 bashrc 会让 su - xxx -c在 systemd 无 tty 下 segfault。专用 OS 用户最稳。

  2. root.sh注册的服务在麒麟下容易翻车 (KYSEC 拦 init.d 的 su+ polkit 交互鉴权),直接写 native systemd unit 走 User=progoo,一劳永逸。

  3. MySQL 兼容模式 + 大小写敏感 ​ 是互斥组合,向导会拦,但 silent 装 / 改 conf 有可能绕过去,后期 show case_sensitive一定验一下。

  4. /tmp/.s.KINGBASE.54321.lock属主​ 换 OS 用户起库前清掉,不然 Permission denied 报得很隐晦。

  5. 麒麟密码策略pam_pwquality默认开着,纯数字密码 chpasswd静默失败,visudo前先确认 progoosudo

环境:麒麟 V10 桌面 / 人大金仓 KingbaseES V8R6 C009B0014 / ISO 安装。不同小版本向导 wording 可能略有差异,思路通用。

相关推荐
画中有画2 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc2 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t3 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
执子手 吹散苍茫茫烟波3 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql
落叶-IT4 小时前
Java异常处理深度实战教程:异常传播的失败场景分析
数据库·oracle
执子手 吹散苍茫茫烟波5 小时前
常见的数据库隔离级别以及企业里常用的是什么方案
数据库
Database_Cool_5 小时前
数据库慢查询优化首选方案:阿里云 RDS 性能洞察+自动诊断
数据库·人工智能·阿里云
YOU OU6 小时前
Redis初识
数据库·redis·缓存
长孙豪翔6 小时前
在.net中读写config文件的各种方法
java·数据库·.net