2026年01月20日/ 浏览 8
[root@localhost ~]# chmod +x kingbase_install.sh [root@localhost ~]# ./kingbase_install.sh /root/KingbaseES_V009R003C011B0003_Lin64_install.iso

脚本:
#!/bin/bash # 一键安装KingbaseES V9 数据库脚本 # 注意:必须以root用户执行此脚本 # 静态密码(主机kingbase用户 + 数据库密码),请根据需求修改 KINGBASE_PASS="Ceshi@5235" # ISO文件的目标路径(复制后的位置) ISO_TARGET="/opt/software/KingbaseES_V009R003C011B0003_Lin64_install.iso" # 安装目录(默认) INSTALL_DIR="/opt/Kingbase/ES/V9" # Kingbase客户端工具路径 CLIENT_TOOLS_PATH="${INSTALL_DIR}/KESRealPro/V009R003C011/ClientTools/bin" # 软件存放目录 SOFT_DIR="/opt/software/KingbaseESV9" # 数据库数据目录(与安装目录关联) DATA_DIR="${INSTALL_DIR}/data" # 颜色输出函数(方便日志区分) red_echo() { echo -e "\033[31m$1\033[0m"; } green_echo() { echo -e "\033[32m$1\033[0m"; } yellow_echo() { echo -e "\033[33m$1\033[0m"; } # 检查是否有传入ISO文件路径参数 if [ $# -eq 0 ]; then red_echo "错误:请指定KingbaseES ISO文件的路径作为参数!" red_echo "用法: $0 /path/to/KingbaseES_V009R003C011B0003_Lin64_install.iso" exit 1 fi ISO_SOURCE="$1" # 第一步:检查执行用户是否为root if [ $UID -ne 0 ]; then red_echo "错误:必须以root用户执行此脚本!" exit 1 fi # 第二步:创建安装用户kingbase并设置密码 green_echo "===== 1. 创建kingbase用户并设置密码 =====" ifid"kingbase" &>/dev/null; then yellow_echo "kingbase用户已存在,跳过创建" else useradd kingbase echo"${KINGBASE_PASS}" | passwd --stdin kingbase &>/dev/null if [ $? -eq 0 ]; then green_echo "kingbase用户创建成功,密码已设置为:${KINGBASE_PASS}" else red_echo "kingbase用户创建失败!" exit 1 fi fi # 第三步:创建安装目录和软件目录 green_echo "===== 2. 创建安装目录和软件存放目录 =====" mkdir -p ${INSTALL_DIR}${SOFT_DIR} # 确保/opt/software目录存在 mkdir -p /opt/software # 修正权限(比o+rwx更安全,仅给kingbase用户读写执行) chown -R kingbase:kingbase ${INSTALL_DIR} chmod 755 ${INSTALL_DIR} if [ $? -eq 0 ]; then green_echo "目录创建成功:${INSTALL_DIR}、${SOFT_DIR}" else red_echo "目录创建失败!" exit 1 fi # 第四步:检查源ISO文件并复制到目标位置 green_echo "===== 3. 复制ISO安装包到目标位置 =====" # 检查源文件是否存在 if [ ! -f "${ISO_SOURCE}" ]; then red_echo "错误:指定的ISO文件不存在!请检查路径:${ISO_SOURCE}" exit 1 fi # 检查源文件是否为ISO文件(通过文件类型判断) if ! file "${ISO_SOURCE}" | grep -q "ISO"; then if ! file "${ISO_SOURCE}" | grep -q "9660"; then# ISO 9660文件系统 yellow_echo "警告:文件可能不是有效的ISO镜像,但将继续处理" fi fi green_echo "源ISO文件: ${ISO_SOURCE}" green_echo "目标位置: ${ISO_TARGET}" # 复制ISO文件到目标位置 cp -v "${ISO_SOURCE}""${ISO_TARGET}" if [ $? -eq 0 ]; then green_echo "ISO文件复制成功!" else red_echo "ISO文件复制失败!" exit 1 fi # 检查复制后的ISO文件 if [ ! -f "${ISO_TARGET}" ]; then red_echo "错误:ISO文件复制后不存在!" exit 1 fi # 可选:MD5校验(请替换为实际的MD5值) # EXPECT_MD5="替换为ISO的实际MD5值" # ACTUAL_MD5=$(md5sum ${ISO_TARGET} | awk {print $1}) # if [ "${ACTUAL_MD5}" != "${EXPECT_MD5}" ]; then # red_echo "错误:ISO文件MD5校验失败!" # exit 1 # else # green_echo "ISO文件MD5校验成功" # fi # 第五步:挂载ISO安装包 green_echo "===== 4. 挂载ISO安装包 =====" # 先卸载已挂载的目录(防止冲突) umount ${SOFT_DIR} &>/dev/null mount -o loop ${ISO_TARGET}${SOFT_DIR} &>/dev/null if [ $? -eq 0 ]; then green_echo "ISO挂载成功:${SOFT_DIR}" else red_echo "ISO挂载失败!" exit 1 fi # 第六步:生成静默安装配置文件并执行安装 green_echo "===== 5. 执行静默安装 =====" # 过滤注释和空行,生成干净的静默配置文件 grep -v ^$ ${SOFT_DIR}/setup/silent.cfg | grep -v ^# > /tmp/silent9.cfg # 替换数据目录、数据库密码(关键) sed -i "s#^USER_SELECTED_DATA_FOLDER=.*#USER_SELECTED_DATA_FOLDER=${DATA_DIR}#g" /tmp/silent9.cfg sed -i "s#^DB_PASS=.*#DB_PASS=${KINGBASE_PASS}#g" /tmp/silent9.cfg sed -i "s#^DB_PASS2=.*#DB_PASS2=${KINGBASE_PASS}#g" /tmp/silent9.cfg # 切换到kingbase用户执行静默安装(禁止root安装) su - kingbase -c "cd ${SOFT_DIR} && sh setup.sh -i silent -f /tmp/silent9.cfg" if [ $? -eq 0 ]; then green_echo "KingbaseV9 静默安装成功!" else red_echo "KingbaseV9 安装失败!请检查日志" umount ${SOFT_DIR} &>/dev/null exit 1 fi # 第七步:配置kingbase用户环境变量 green_echo "===== 6. 配置kingbase用户环境变量 =====" # 检查ClientTools路径是否存在 if [ -d "${CLIENT_TOOLS_PATH}" ]; then # 为kingbase用户添加环境变量到.bashrc KINGBASE_BASHRC="/home/kingbase/.bashrc" # 检查是否已经添加过环境变量 if ! grep -q "KingbaseES V9 ClientTools"${KINGBASE_BASHRC} 2>/dev/null; then # 添加环境变量配置 cat >> ${KINGBASE_BASHRC} << EOF # KingbaseES V9 ClientTools PATH export PATH=${CLIENT_TOOLS_PATH}:\$PATH export KINGBASE_HOME=${INSTALL_DIR} export LD_LIBRARY_PATH=\${KINGBASE_HOME}/lib:\$LD_LIBRARY_PATH EOF green_echo "环境变量已添加到 ${KINGBASE_BASHRC}" # 立即生效(当前会话) su - kingbase -c "source ${KINGBASE_BASHRC}" # 验证环境变量是否生效 su - kingbase -c "which ksql 2>/dev/null || echo ksql命令不在PATH中,请重新登录kingbase用户" else yellow_echo "KingbaseES环境变量已存在,跳过添加" fi # 检查ksql命令是否可用 if su - kingbase -c "command -v ksql" &>/dev/null; then green_echo "KingbaseES客户端工具已正确配置" else yellow_echo "注意:请重新登录kingbase用户以使环境变量生效" fi else red_echo "警告:ClientTools目录不存在:${CLIENT_TOOLS_PATH}" red_echo "请手动添加KingbaseES环境变量" fi # 第八步:注册服务(执行root.sh) green_echo "===== 7. 注册Kingbase服务 =====" sh ${INSTALL_DIR}/install/script/root.sh &>/dev/null if [ $? -eq 0 ]; then green_echo "Kingbase服务注册成功!" else red_echo "Kingbase服务注册失败!" umount ${SOFT_DIR} &>/dev/null exit 1 fi # 第九步:检查Kingbase进程 green_echo "===== 8. 检查Kingbase进程 =====" KINGBASE_PROC=$(ps -xf | grep -v grep | grep kingbase | wc -l) if [ ${KINGBASE_PROC} -gt 0 ]; then green_echo "KingbaseV9 进程已启动,安装完成!" green_echo "=====================================" green_echo "安装信息汇总:" green_echo " 安装目录:${INSTALL_DIR}" green_echo " 数据目录:${DATA_DIR}" green_echo " 客户端工具路径:${CLIENT_TOOLS_PATH}" green_echo " kingbase用户密码:${KINGBASE_PASS}" green_echo " 数据库密码:${KINGBASE_PASS}" green_echo " 环境变量文件:/home/kingbase/.bashrc" green_echo "=====================================" # 测试数据库连接(可选) green_echo "测试数据库连接..." if su - kingbase -c "ksql -V" &>/dev/null; then green_echo "KingbaseES客户端版本:" su - kingbase -c "ksql -V" fi # 显示连接示例 green_echo "连接数据库示例:" green_echo " su - kingbase" green_echo " ksql -U SYSTEM -p 54321 -d TEST" else red_echo "Kingbase进程未启动!安装可能异常" red_echo "请检查服务状态:systemctl status kingbase" fi # 清理:卸载ISO挂载目录(可选,如需保留挂载可注释) umount ${SOFT_DIR} &>/dev/null green_echo "ISO挂载目录已卸载" exit 0**说明:**我是把安装包上传到/root目录下了。
[kingbase@localhost ~]$ ksql -U system -d test Password for user system: Licesen Type: SALES-企业版. Type "help" for help. test=# select version();