一、背景与需求
作为数据库运维人员,日常工作中经常需要确认数据库端口监听状态、调整端口访问范围。本次实操围绕 GBase 8s 展开,核心需求有两个:
- 定位
oninit进程占用的端口号; - 将默认仅本地监听的
9091端口开放给远程 IP 访问。
操作环境:Ubuntu Server,GBase 8s 以 gbasedbt 用户运行,初始监听地址为 127.0.1.1:9091。
二、问题排查与端口定位
2.1 确认 GBase 8s 进程状态
首先通过 ps 命令确认 oninit 进程(GBase 8s 核心进程)是否正常运行:
bash
root@lihe-Virtual-Machine:/etc# ps -ef | grep gbase
gbasedbt 60803 1 0 16:31 ? 00:00:00 oninit
root 66439 18363 0 16:47 pts/0 00:00:00 grep --color=auto gbase
输出显示 oninit 进程 PID 为 60803,状态正常。
2.2 定位进程占用的端口
使用 ss 命令查询 60803 进程对应的端口监听信息:
bash
root@lihe-Virtual-Machine:/etc# sudo ss -tulnp | grep 9091
tcp LISTEN 0 512 127.0.1.1:9091 0.0.0.0:* users:(("oninit",pid=60846,fd=5),("oninit",pid=60803,fd=4))
关键结论:
oninit进程占用9091端口;- 监听地址为
127.0.1.1,仅本地可访问; - 存在两个
oninit进程实例(主进程+子进程),属于正常现象。
2.3 确认端口与服务名的映射关系
由于 lsof 输出中端口号被解析为服务名,可通过 /etc/services 或 sqlhosts 配置文件确认映射:
bash
# 查看 sqlhosts 初始配置
root@lihe-Virtual-Machine:/etc# cat $GBASEDBTSQLHOSTS
gbaseserver onsoctcp lihe-Virtual-Machine gbaseserver
lo_gbaseserver onsoctcp 127.0.0.1 lo_gbaseserver
初始配置中,gbaseserver 绑定主机名,lo_gbaseserver 为本地回环服务。
三、端口开放配置与问题复现
3.1 配置修改思路
要开放端口给远程 IP,需修改 sqlhosts 配置文件,将监听地址从 127.0.1.1 改为服务器网卡 IP (如 192.168.1.171),并确保配置文件包含必要的本地回环服务。
3.2 错误操作与启动失败
在实际操作中,因使用 root 用户直接覆盖写入 sqlhosts 文件,且删除了 lo_gbaseserver 配置,导致数据库重启失败:
bash
# 错误操作:覆盖写入 sqlhosts,仅保留 gbaseserver
root@lihe-Virtual-Machine:/etc# cat << EOF > $SQLHOSTS_FILE
gbaseserver onsoctcp 192.168.1.171 9091
EOF
# 重启数据库失败
root@lihe-Virtual-Machine:/etc# oninit -vy
oninit: DBSERVERNAME 'lo_gbaseserver' not in sqlhosts file or sqlhosts file contents are damaged.
WARNING: server initialization failed or timed out.
失败原因分析:
- 配置缺失 :
sqlhosts文件中丢失lo_gbaseserver配置,而onconfig文件中定义的DBSERVERNAME依赖该本地服务; - 权限错误 :以
root用户修改sqlhosts,导致文件属主/权限异常,gbasedbt用户无法读取; - 环境变量问题 :
gbasedbt用户下$GBASEDBTSQLHOSTS变量为空,root用户操作可能指向错误路径。
四、问题修复与正确配置步骤
4.1 核心修复原则
- 必须以
gbasedbt用户操作配置文件; sqlhosts必须包含gbaseserver(对外服务)和lo_gbaseserver(本地回环);- 配置文件属主需为
gbasedbt:gbasedbt,权限为644。
4.2 分步修复操作
步骤 1:切换到 gbasedbt 用户,定位正确配置文件
bash
# 切换用户
root@lihe-Virtual-Machine:/etc# su - gbasedbt
# 定位 onconfig 文件(GBase 8s 核心配置)
$ ONCONFIG_FILE=/opt/GBASE/gbase/etc/onconfig.gbaseserver
# 从 onconfig 中获取 sqlhosts 路径
$ SQLHOSTS_FILE=$(grep -i sqlhosts $ONCONFIG_FILE | awk '{print $2}')
# 若路径为空,使用默认路径
$ if [ -z "$SQLHOSTS_FILE" ]; then SQLHOSTS_FILE=/opt/GBASE/gbase/etc/sqlhosts; fi
步骤 2:备份错误配置,写入完整内容
bash
# 备份当前错误配置
$ cp $SQLHOSTS_FILE $SQLHOSTS_FILE.error.bak
# 写入包含双服务的配置(对外服务+本地回环)
$ cat << EOF > $SQLHOSTS_FILE
# 对外服务:绑定服务器网卡 IP,开放 9091 端口
gbaseserver onsoctcp 192.168.1.171 9091
# 本地回环服务:必须保留,数据库内部通信依赖
lo_gbaseserver onsoctcp 127.0.0.1 9089
EOF
步骤 3:修复配置文件权限
bash
# 切换回 root 用户,修正属主和权限
$ exit
root@lihe-Virtual-Machine:/etc# sudo chown gbasedbt:gbasedbt $SQLHOSTS_FILE
root@lihe-Virtual-Machine:/etc# sudo chmod 644 $SQLHOSTS_FILE
步骤 4:重启数据库并验证状态
bash
# 切换到 gbasedbt 用户操作
root@lihe-Virtual-Machine:/etc# su - gbasedbt
# 强制停止残留进程
$ onmode -ky
# 启动数据库并输出详细日志
$ oninit -vy
# 验证启动状态
$ onstat -
若启动成功,onstat - 会输出数据库运行状态(如 On-Line)。
步骤 5:验证端口监听状态
bash
$ ss -tulnp | grep oninit
预期输出:192.168.1.171:9091 和 127.0.0.1:9089 均处于 LISTEN 状态。
4.3 防火墙与权限放行
1. 防火墙开放 9091 端口(Ubuntu 系统)
bash
root@lihe-Virtual-Machine:/etc# sudo ufw allow 9091/tcp
root@lihe-Virtual-Machine:/etc# sudo ufw reload
2. 配置数据库远程访问权限
bash
# 切换到 gbasedbt 用户,编辑 .rhosts 文件
$ su - gbasedbt
$ vi $GBASEDBTDIR/etc/.rhosts
# 添加客户端 IP 和用户名
192.168.1.200 gbasedbt
# 数据库用户授权(连接数据库后执行)
$ dbaccess sysmaster -
> GRANT CONNECT TO 远程用户名;
五、远程连接验证
在客户端机器上,使用 dbaccess 工具测试连接:
bash
dbaccess -d 数据库名 -u 用户名 -s gbaseserver@192.168.1.171:9091
若成功进入数据库交互界面,说明端口开放配置生效。
六、总结与避坑指南
6.1 关键配置要点
sqlhosts文件是 GBase 8s 端口配置的核心,必须包含对外服务和本地回环服务;- 所有配置操作需以
gbasedbt用户执行,避免权限问题; - 修改配置后需重启数据库,通过
onstat -验证状态。
6.2 常见错误避坑
| 错误操作 | 后果 | 解决方案 |
|---|---|---|
| root 用户修改配置文件 | 文件权限异常,数据库无法读取 | 使用 chown 修正属主为 gbasedbt:gbasedbt |
覆盖写入删除 lo_gbaseserver |
数据库启动失败 | 恢复 lo_gbaseserver 配置 |
| 监听地址配置错误 | 远程无法连接 | 确认配置为服务器网卡 IP,而非 127.0.0.1 |
6.3 运维建议
- 修改配置前备份原文件,防止误操作导致服务不可用;
- 数据库日志文件
online.log(通常在$GBASEDBTDIR/tmp)是排障的重要依据; - 开放端口后,建议通过
nmap工具验证端口可达性。
七、扩展阅读
- GBase 8s 官方文档:
sqlhosts配置与网络通信 - Linux 运维手册:
ss/netstat命令实战指南