Ubuntu 上 IBM Informix 实战案例
一 场景与目标
- 在 Ubuntu 22.04/24.04 LTS 上部署 IBM Informix 14.10,完成安装、初始化、网络连通、字符集与语言环境配置,并通过 dbaccess 验证连接与基本查询。
- 目标产出:可用的 DBSERVERNAME=ifx1410、系统服务端口(如 9088/tcp)、基础安全与审计配置、验证脚本与回退方案。
二 环境准备与安装
- 系统与权限
- 创建专用用户与组(示例使用固定 UID/GID 便于运维):
- sudo groupadd -g 3000 informix
- sudo useradd -u 3000 -g 3000 -d /opt/IBM/informix -m informix
- sudo passwd informix
- 安装依赖与基础工具:
- sudo apt update && sudo apt install -y build-essential libaio1 unixodbc unixodbc-dev
- 安装介质与目录
- 上传安装包(示例:ibm.ids.14.10.FC4W1.LNX.tar)至 /opt/IBM/informix/
- 解压:tar -xf ibm.ids.14.10.FC4W1.LNX.tar -C /opt/IBM/informix/
- 环境变量(以 informix 用户执行)
- 编辑 ~/.bash_profile 或 ~/.profile,加入:
- export INFORMIXDIR=/opt/IBM/informix
- export INFORMIXSERVER=ifx1410
- export ONCONFIG=onconfig.ifx1410
- export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
- export CLIENT_LOCALE=zh_CN.gb
- export DB_LOCALE=zh_CN.gb
- export SERVER_LOCALE=zh_CN.gb
- export DBLANG=en_us
- export LD_LIBRARY_PATH=$INFORMIXDIR/lib:$LD_LIBRARY_PATH
- export PATH=$INFORMIXDIR/bin:$PATH
- 使配置生效:source ~/.bash_profile
- 安装执行
- 切换至 informix:su - informix
- 运行安装:cd $INFORMIXDIR && ./ids_install(选择非 GUI 模式,按向导完成)
三 实例初始化与网络配置
- 目录与空间
- 数据目录:mkdir -p /dbs && chown informix:informix /dbs
- 根空间文件:touch /dbs/rootdbs && chmod 660 /dbs/rootdbs && chown informix:informix /dbs/rootdbs
- onconfig 关键项(示例)
- ROOTNAME rootdbs
- ROOTPATH /dbs/rootdbs
- ROOTSIZE 300000 # 单位 KB,约 300 MB,可按需调整
- MSGPATH $INFORMIXDIR/tmp/online.log
- SERVERNUM 49
- DBSERVERNAME ifx1410
- 其他缓冲与日志参数按业务负载调优(如 LOGFILES、LOGSIZE、LOGBUFF、PHYSBUFF 等)
- 服务端口与解析
- /etc/services 增加:informix 9088/tcp(示例端口,确保未被占用)
- $INFORMIXDIR/etc/sqlhosts 增加:
- ifx1410 onsoctcp 0.0.0.0 informix
- 初始化与启动
- 初始化:oninit -iv
- 在线:onmode -c all
- 验证:onstat -;onstat -g sql;dbaccess - -
- 客户端连通性测试
- 远程可使用 dbaccess ifx1410 - 或编写简单 JDBC/ODBC 连接串验证字符集与连接稳定性
四 常见问题与快速排查
- 依赖与库路径
- 现象:oninit/onstat 报找不到库或命令不可用
- 处理:确认已安装 libaio1、unixodbc,并检查 LD_LIBRARY_PATH 包含 $INFORMIXDIR/lib
- 环境变量缺失
- 现象:提示 INFORMIXSERVER/ONCONFIG 未设置
- 处理:以 informix 用户 source ~/.bash_profile,或在 systemd 服务中显式导出
- 端口占用
- 现象:初始化或监听失败
- 处理:ss -lntp | grep 9088;更换 /etc/services 与 sqlhosts 中的端口后重启
- 字符集异常
- 现象:中文乱码或比较异常
- 处理:统一设置 CLIENT_LOCALE、DB_LOCALE、SERVER_LOCALE 为 zh_CN.gb,重启实例后验证
- 安装/启动失败
- 处理:查看 $INFORMIXDIR/tmp/online.log 与系统日志(/var/log/syslog),按报错修复目录权限、空间或配置项
五 性能与安全加固建议
- 性能优化要点
- 内存与缓存:结合内存容量调优缓冲池(如 BUFFERPOOL、SHMVIRTSIZE)、逻辑/物理日志缓冲(LOGBUFF/PHYSBUFF)、日志文件数量与大小(LOGFILES/LOGSIZE)
- 存储与 I/O:优先本地 SSD/NVMe,合理条带化;避免 NFS 的强一致挂载;检查 I/O 等待(onstat -d/-g ioq)
- 并发与网络:按连接模型设置合适的 NETTYPE(如 onsoctcp),控制最大连接与超时
- 索引与 SQL:为高频 WHERE/JOIN/ORDER BY 建立索引,避免索引列函数计算与前导通配符;定期执行 UPDATE STATISTICS
- 监控与诊断:常态化使用 onstat、onmode、oncheck,必要时结合 Zabbix/Prometheus 采集指标
- 安全加固要点
- 口令策略:在 /etc/pam.d/common-password 启用 pam_cracklib,设置至少包含大小写字母/数字/特殊字符中的三类,最小长度 8 位
- 登录失败锁定:在 /etc/pam.d/common-auth 配置 pam_tally2,连续失败 6 次锁定 300 秒
- 审计:启用 AUDITD 与 Informix 审计,编辑 $INFORMIXDIR/aaodir/adtcfg,设置 ADTMODE=7(记录到 Informix 并自动审计 DBSO/DBSA)
- 共享内存转储:编辑 onconfig,设置 DUMPSHMEM 0,防止敏感信息外泄
- 最小权限:数据目录与日志目录仅 informix:informix 660,限制数据库管理员之外的直接系统访问