一、背景与需求
作为数据库运维人员,日常工作中经常需要确认数据库端口监听状态、调整端口访问范围。本次实操围绕GBase 8s展开,核心需求有两个:
- 定位
oninit进程占用的端口号; - 将默认仅本地监听的
9091端口开放给远程 IP 访问。
操作环境:Ubuntu Server,GBase 8s 以gbasedbt用户运行,初始监听地址为127.0.1.1:9091。
二、问题排查与端口定位
2.1 确认 GBase 8s 进程状态
首先通过ps命令确认oninit进程(GBase 8s 核心进程)是否正常运行:
root@lihe-Virtual-Machine:/etc# ps -ef | grep gbasegbasedbt608031016:31 ? 00:00:00 oninit root6643918363016:47 pts/0 00:00:00grep--color=auto gbase输出显示oninit进程 PID 为60803,状态正常。
2.2 定位进程占用的端口
使用ss命令查询60803进程对应的端口监听信息:
root@lihe-Virtual-Machine:/etc# sudo ss -tulnp | grep 9091tcp LISTEN0512127.0.1.1:90910.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配置文件确认映射:
# 查看 sqlhosts 初始配置root@lihe-Virtual-Machine:/etc# cat $GBASEDBTSQLHOSTSgbaseserver onsoctcp lihe-Virtual-Machine gbaseserver lo_gbaseserver onsoctcp127.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配置,导致数据库重启失败:
# 错误操作:覆盖写入 sqlhosts,仅保留 gbaseserverroot@lihe-Virtual-Machine:/etc# cat << EOF > $SQLHOSTS_FILEgbaseserver onsoctcp192.168.1.1719091EOF# 重启数据库失败root@lihe-Virtual-Machine:/etc# oninit -vyoninit: DBSERVERNAME'lo_gbaseserver'notinsqlhostsfileor sqlhostsfilecontents 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用户,定位正确配置文件
# 切换用户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"];thenSQLHOSTS_FILE=/opt/GBASE/gbase/etc/sqlhosts;fi步骤 2:备份错误配置,写入完整内容
# 备份当前错误配置$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:修复配置文件权限
# 切换回 root 用户,修正属主和权限$exitroot@lihe-Virtual-Machine:/etc# sudo chown gbasedbt:gbasedbt $SQLHOSTS_FILEroot@lihe-Virtual-Machine:/etc# sudo chmod 644 $SQLHOSTS_FILE步骤 4:重启数据库并验证状态
# 切换到 gbasedbt 用户操作root@lihe-Virtual-Machine:/etc# su - gbasedbt# 强制停止残留进程$ onmode -ky# 启动数据库并输出详细日志$ oninit -vy# 验证启动状态$ onstat -若启动成功,onstat -会输出数据库运行状态(如On-Line)。
步骤 5:验证端口监听状态
$ ss -tulnp|greponinit预期输出:192.168.1.171:9091和127.0.0.1:9089均处于LISTEN状态。
4.3 防火墙与权限放行
1. 防火墙开放 9091 端口(Ubuntu 系统)
root@lihe-Virtual-Machine:/etc# sudo ufw allow 9091/tcproot@lihe-Virtual-Machine:/etc# sudo ufw reload2. 配置数据库远程访问权限
# 切换到 gbasedbt 用户,编辑 .rhosts 文件$su- gbasedbt $vi$GBASEDBTDIR/etc/.rhosts# 添加客户端 IP 和用户名192.168.1.200 gbasedbt# 数据库用户授权(连接数据库后执行)$ dbaccess sysmaster ->GRANT CONNECT TO 远程用户名;五、远程连接验证
在客户端机器上,使用dbaccess工具测试连接:
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命令实战指南