麒麟系统,达梦数据库的安装,DM8安装脚本

📅 2026/6/28 6:08:19
麒麟系统,达梦数据库的安装,DM8安装脚本
麒麟系统的操作vim /etc/sysconfig/network-scripts/ifcfg-ens33# 重启 nmcli conn down ens33 nmcli conn up ens33 # 或者重载 nmcli conn reload时间同步vi /etc/chrony.conf注释掉原有的 pool或 server行在行首加 #添加以下阿里云服务器地址 # 添加阿里云 NTP 服务器 server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp3.aliyun.com iburst # 或者使用单个域名推荐 server ntp.aliyun.com iburstsystemctl restart chronyd systemctl enable chronyd配置达梦的安装环境创建用户和用户组系统底层配置 → root管理员权限数据库软件运行 数据读写 → dmdba普通业务权限# 创建用户组 dinstall groupadd dinstall -g 2001 # 创建用户 dmdba useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdbapasswd dmdba 输入密码Dm2001修改限制参数修改 /etc/security/limits.conf 文件配置内容cat /etc/security/limits.conf EOF dmdba soft nice 0 dmdba hard nice 0 dmdba soft as unlimited dmdba hard as unlimited dmdba soft fsize unlimited dmdba hard fsize unlimited dmdba soft nproc 65536 dmdba hard nproc 65536 dmdba soft nofile 65536 dmdba hard nofile 65536 dmdba soft core unlimited dmdba hard core unlimited dmdba soft data unlimited dmdba hard data unlimited EOFreboot切换到 dmdba 用户查看配置是否生效su - dmdba ulimit -a创建安装目录切换至 root 用户创建实例保存目录、归档保存目录、备份保存目录exit 退出到root用户 # 实例保存目录 mkdir -p /dmdata/data # 归档保存目录 mkdir -p /dmdata/arch # 备份保存目录 mkdir -p /dmdata/dmbak# owner 改为 dmdba chown -R dmdba:dinstall /dmdata # 授予755权限 chmod -R 755 /dmdata/data chmod -R 755 /dmdata/arch chmod -R 755 /dmdata/dmbakDM8 软件下载官网地址https://www.dameng.com/或直接打开 https://eco.dameng.com/download/unzip dm8_20251203_x86_kylin10_sp3_64.zip镜像挂载挂载镜像到 /mnt 目录下查看目录内容mount -o loop,ro dm8_20251203_x86_kylin10_sp3_64.iso /mnt ll /mnt# -o选项说明通过 loop 设备环回设备来挂载一个普通文件比如 ISO 镜像让它模拟成块设备再挂载到目录上。# 加 -o loopmount -o loop xxx.iso /mnt → 挂载 ISO 文件# 不加 -o loop直接 mount /dev/sr0 /mnt → 挂载真实的光驱设备# -t iso9660指定文件系统类型CD/DVD标准格式# -o ro以只读方式挂载光盘天生只读# /mnt/iso挂载点目录ISO 已经成功挂载到/mnt里面只有两个文件DMInstall.bin达梦安装程序DM8 Install.pdf安装文档安装DM8切换到dmdba安装su - dmdba cd /mnt./DMInstall.bin -i空间不足mount -o remount,size5G /tmp永久vim /etc/fstab tmpfs /tmp tmpfs defaults,size5G 0 0再切换回root为什么切换回root账号答案DmAPService 要以 root 注册/运行是因为它需要写入系统级的 systemd 配置并具备更高的权限来管理数据库备份和守护进程而数据库实例进程依旧以普通用户 dmdba 来跑执行命令创建 DmAPService否则会影响数据库备份。DmAPServiceDatabase Advanced Process Service达梦数据库高级进程服务它是达梦在 Linux/Unix 下提供的一个辅助后台守护进程通常随 root_installer.sh 安装一起创建并注册到系统服务里。主要用于① 数据库备份/恢复 ② 管理数据库部分 ③ 支持任务调度/home/dmdba/dmdbms/script/root/root_installer.sh配置环境变量切换至 dmdba 用户修改环境变量配置文件 .bash_profile刷新环境变量su - dmdba echo export PATH$PATH:$DM_HOME/bin:$DM_HOME/tool ~/.bash_profile source ~/.bash_profile初始化数据库进入 /home/dmdba/dmdbms/bin 目录下查看目录内容cd /home/dmdba/dmdbms/bin ls使用 dminit 命令初始化实例dminit 命令可设置多种参数查看可配置参数./dminit help使用 dminit 命令初始化实例设置数据库目录为 /dmdata/data就是在【二、配置DM8安装环境】中创建的安装目录。页大小为 32 KB簇大小为 32 KB大小写敏感字符集为 UTF-8数据库名为 DAMENG对应图形化安装界面上的默认的数据库名 DAMENG实例名为 DMSERVER对应图形化安装界面上的默认的实例名 DMSERVER端口为 5236页Page是 达梦数据库存储的最小单位所有的数据(表、索引等最终都要写入“页”中。​ 簇Extent是 一组连续的数据页是达梦分配空间的基本单位。代表数据库一次分配的空间块。​ 页大小 簇大小的关系答页是最小单位簇是成批单位PAGE_SIZE 32KEXTENT_SIZE 32K默认→ 单个簇 1MB./dminit path/dmdata/data \ PAGE_SIZE32 \ EXTENT_SIZE32 \ CASE_SENSITIVEy \ CHARSET1 \ DB_NAMEDAMENG \ INSTANCE_NAMEDMSERVER \ PORT_NUM5236 \ SYSDBA_PWDSysdba123 \ SYSAUDITOR_PWDAuditor123控制台输出create dm database success代表数据库实例初始化完全成功。DM8 服务配置注册服务切换至 root 用户进入 /home/dmdba/dmdbms/script/root/ 目录下查看目录内容执行 sh 脚本注册实例服务数据库名为 DAMENG对应图形化安装界面上的默认的数据库名 DAMENG-p DMSERVER 是服务名的后缀对应图形化安装界面上的默认的实例名 DMSERVER最终生成的服务名为DmServiceDMSERVER。查看 dm_service_installer.sh 脚本文件了解更多参数信息。exit cd /home/dmdba/dmdbms/script/root/ ls ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/DAMENG/dm.ini -p DMSERVER进入 cd /home/dmdba/dmdbms/bin 目录下查看目录中生成的服务实例 DmServiceDMSERVERcd /home/dmdba/dmdbms/bin ls启动达梦su - dmdba cd /home/dmdba/dmdbms/bin ./DmServiceDMSERVER start停止达梦./DmServiceDMSERVER stop ./DmServiceDMSERVER status重启./DmServiceDMSERVER restart ./DmServiceDMSERVER status登录DM8运行 disql 工具/home/dmdba/dmdbms/tool/disql登录 dm8默认账号SYSDBA密码是Sysdba123conn SYSDBA/Sysdba123查看版本SELECT * FROM v$version;开放端口5236查看监听了哪些端口ss -nap | grep dmserver # 或 netstat -tulnpe | grep dmserver切换回root用户exit检查端口是否开放firewall-cmd --zonepublic --query-port5236/tcp如果端口未放行执行放行命令firewall-cmd --add-port5236/tcp --permanent firewall-cmd --reload firewall-cmd --zonepublic --list-all或者直接禁用防火墙systemctl stop firewalld systemctl disable firewalld远程客户端连接使用【DataGrip数据库管理工具或DM管理工具】连接创建 DM 驱动程序配置连接填写 用户密码账号SYSDBA密码Sysdba123填写 URLURL jdbc:dm://写自己的麒麟服务器的ip地址:5236?resultSetType1003应用测试链接就了DM8的shell安装脚本创建Shell脚本dm8_install.sh#!/usr/bin/env bash # dm8_install.sh — DM8安装最终版 # - 统一将 /tmp (tmpfs) remount 到 3G避免 2047MiB 边界 # - 复用 /mnt只读OK否则挂载 ISO 到 /opt/dm8 # - 内置 Expect 自动化覆盖常见问答timeout -1 防超时 # - 等待并定位 DM_HOME再执行 root_installer.sh安装未完成则报错 # - 初始化数据库(dminit)、注册并启动实例、放行 5236、防火墙 # - 冒烟验证 disql: SELECT * FROM v$version;已正确转义日志 set -euo pipefail trap ec$?; ((ec!0)) echo [ERR ] exit${ec}, log/tmp/dm8_install.log EXIT exec (tee -a /tmp/dm8_install.log) 21 # 配置可用环境变量覆盖 # DM_GROUP${DM_GROUP:-dinstall} DM_GROUP_ID${DM_GROUP_ID:-2001} DM_USER${DM_USER:-dmdba} DM_UID${DM_UID:-2001} DM_USER_HOME${DM_USER_HOME:-/home/${DM_USER}} DM_HOME${DM_HOME:-${DM_USER_HOME}/dmdbms} # 若安装到 /opt/dmdbms 会自动定位修正 DM_DATA_ROOT${DM_DATA_ROOT:-/dmdata} DM_DATA${DM_DATA:-${DM_DATA_ROOT}/data} DM_ARCH${DM_ARCH:-${DM_DATA_ROOT}/arch} DM_BAK${DM_BAK:-${DM_DATA_ROOT}/dmbak} DM_DB_NAME${DM_DB_NAME:-DAMENG} DM_INSTANCE${DM_INSTANCE:-DMSERVER} DM_PORT${DM_PORT:-5236} SYSDBA_PWD${SYSDBA_PWD:-Sysdba123} SYSAUDITOR_PWD${SYSAUDITOR_PWD:-Auditor123} # 可选若你想为 dmdba 设置强口令导出 DM_USER_PASSWORD******默认不设置避免 PAM 报警 DM_USER_PASSWORD${DM_USER_PASSWORD:-} ISO_PATH${1:-} # 传入 ISO 路径 # /tmp 扩容目标安装器判定容易卡在 2047MiB统一扩到 3G TMP_MIN_BYTES$(( 2 * 1024 * 1024 * 1024 )) TMP_TARGET_BYTES$(( 3 * 1024 * 1024 * 1024 )) ## log(){ printf [INFO] %s\n $*; } warn(){ printf [WARN] %s\n $*; } err(){ printf [ERR ] %s\n $* 2; } require_root(){ [[ $EUID -eq 0 ]] || { err 请用 root 运行; exit 1; }; } cmd_exists(){ command -v $1 /dev/null 21; } ensure_pkg(){ local p$1 if ! cmd_exists $p ! rpm -q $p /dev/null 21; then if cmd_exists dnf; then dnf -y install $p || true elif cmd_exists yum; then yum -y install $p || true elif cmd_exists apt; then apt update apt -y install $p || true fi fi } append_if_missing(){ local file$1 marker$2 content$3 if [[ ! -f $file ]] || ! grep -qF $marker $file 2/dev/null; then printf %s\n $content $file fi } ensure_user_group(){ log ensure user/group getent group $DM_GROUP /dev/null 21 || groupadd -g $DM_GROUP_ID $DM_GROUP if ! id -u $DM_USER /dev/null 21; then useradd -G $DM_GROUP -m -d $DM_USER_HOME -s /bin/bash -u $DM_UID $DM_USER # 仅在显式提供强口令时才设置避免 PAM 报警 if [[ -n $DM_USER_PASSWORD ]]; then echo ${DM_USER}:${DM_USER_PASSWORD} | chpasswd || true fi fi id $DM_USER || true } tune_limits(){ log apply /etc/security/limits.conf local file/etc/security/limits.conf local marker# dm8-limits local block${marker} ${DM_USER} soft nice 0 ${DM_USER} hard nice 0 ${DM_USER} soft as unlimited ${DM_USER} hard as unlimited ${DM_USER} soft fsize unlimited ${DM_USER} hard fsize unlimited ${DM_USER} soft nproc 65536 ${DM_USER} hard nproc 65536 ${DM_USER} soft nofile 65536 ${DM_USER} hard nofile 65536 ${DM_USER} soft core unlimited ${DM_USER} hard core unlimited ${DM_USER} soft data unlimited ${DM_USER} hard data unlimited append_if_missing $file $marker $block log ulimit snapshot (as ${DM_USER}) su - $DM_USER -c bash -lc ulimit -n; ulimit -u; ulimit -a | head -n 15 || true } prep_dirs(){ log prepare data/archive/backup dirs mkdir -p $DM_DATA $DM_ARCH $DM_BAK chown -R ${DM_USER}:${DM_GROUP} $DM_DATA_ROOT chmod -R 755 $DM_DATA_ROOT } ensure_tmp_size(){ log ensure /tmp size (tmpfs - 3G) if mount | grep -qE on /tmp type tmpfs; then mount -o remount,size${TMP_TARGET_BYTES} /tmp || { warn remount /tmp to 3G failed继续尝试按现有空间安装 } fi } mount_iso(){ log mount iso # 复用 /mnt只读也 OK if [[ -x /mnt/DMInstall.bin ]]; then log reuse existing /mnt (read-only) DM_ISO_MNT/mnt; export DM_ISO_MNT; return fi [[ -n ${ISO_PATH} ]] || { err 未提供 ISO 路径; exit 1; } [[ -f ${ISO_PATH} ]] || { err ISO 不存在: ${ISO_PATH}; exit 1; } local target/mnt if mount | grep -qE on /mnt ; then target/opt/dm8; mkdir -p $target else # 若 /mnt 未挂载但不可写改用 /opt/dm8 if ! touch /mnt/.writetest 2/dev/null; then target/opt/dm8; mkdir -p $target else rm -f /mnt/.writetest fi fi if ! mount | grep -qE on ${target} ; then mount -o loop ${ISO_PATH} $target fi [[ -x ${target}/DMInstall.bin ]] || { err 未在 ${target} 找到 DMInstall.bin; exit 1; } DM_ISO_MNT$target; export DM_ISO_MNT } write_expect(){ # 覆盖常见问答语言/许可/Key/时区/安装类型/安装目录/确认/创建链接/覆盖/继续/任意键 cat /tmp/dm8_install.exp EOF #!/usr/bin/expect log_user 1 set timeout -1 if {[info exists env(WORKDIR)]} { set workdir $env(WORKDIR) } else { set workdir /mnt } cd $workdir spawn ./DMInstall.bin -i proc yes {} { send y\r } expect { -re {Please select the installer.*language|语言.*选择|选择.*语言} { send 1\r; exp_continue } -re {accept.*license|许可.*协议.*接受|是否同意.*许可} { yes; exp_continue } -re {是否.*Key.*路径|Input.*Key.*path} { send n\r; exp_continue } -re {是否设置.*时区|Set.*timezone} { send y\r; exp_continue } -re {请选择.*时区|Select.*timezone} { send 21\r; exp_continue } -re {请选择安装类型|Select.*install.*type} { send 1\r; exp_continue } # 安装目录/路径统一回车接受默认 -re {请选择安装目录|请输入安装目录|安装目录|安装路径|Install.*(path|directory)} { send \r; exp_continue } -re {是否确认安装目录|确认.*安装目录|Confirm.*install.*directory\?} { yes; exp_continue } -re {是否确认安装路径|Confirm.*install.*path\?} { yes; exp_continue } -re {是否.*确认.*安装|Proceed.*install\?|Begin.*installation} { yes; exp_continue } -re {是否创建.*链接|Create.*link.*\?} { yes; exp_continue } -re {已存在.*是否覆盖|存在.*是否继续|overwrite.*\?|continue.*\?} { yes; exp_continue } -re {任意键.*继续|Press.*any.*key.*continue} { send \r; exp_continue } # 兜底类确认 -re {是否.*(继续|安装|确认)|Do you want.*(continue|install|proceed)} { yes; exp_continue } eof } EOF chmod 700 /tmp/dm8_install.exp chown ${DM_USER}:${DM_GROUP} /tmp/dm8_install.exp } run_installer(){ if [[ -x ${DM_HOME}/bin/disql ]]; then log DM8 已存在${DM_HOME} return fi ensure_pkg expect write_expect log run installer via Expect su - ${DM_USER} -c bash -lc WORKDIR\${DM_ISO_MNT}\ /usr/bin/expect /tmp/dm8_install.exp # 等待安装产物并自动定位 DM_HOME最多等 10 分钟 log wait for installer outputs (root_installer.sh) local try0 alt while (( try 60 )); do if [[ -x ${DM_HOME}/script/root/root_installer.sh ]]; then break; fi alt$(find /home/${DM_USER} /opt /usr -type f -path */dmdbms/script/root/root_installer.sh 2/dev/null | head -n1 || true) if [[ -n $alt ]]; then DM_HOME$(dirname $(dirname $alt)); export DM_HOME break fi sleep 10; try$((try1)) done [[ -x ${DM_HOME}/script/root/root_installer.sh ]] || { err installer 未完成缺少 root_installer.sh; exit 1; } log run root_installer.sh ${DM_HOME}/script/root/root_installer.sh } setup_env(){ log setup env for ${DM_USER} local profile${DM_USER_HOME}/.bash_profile local marker# dm8-env local block${marker} export DM_HOME${DM_HOME} export PATH\$PATH:\$DM_HOME/bin:\$DM_HOME/tool append_if_missing $profile $marker $block } dminit_db(){ local ini${DM_DATA}/${DM_DB_NAME}/dm.ini if [[ -f $ini ]]; then log 数据库已初始化$ini; return; fi log run dminit su - ${DM_USER} -c bash -lc cd ${DM_HOME}/bin; ./dminit PATH${DM_DATA} PAGE_SIZE32 EXTENT_SIZE32 CASE_SENSITIVEY CHARSET1 DB_NAME${DM_DB_NAME} INSTANCE_NAME${DM_INSTANCE} PORT_NUM${DM_PORT} SYSDBA_PWD${SYSDBA_PWD} SYSAUDITOR_PWD${SYSAUDITOR_PWD} [[ -f ${DM_DATA}/${DM_DB_NAME}/dm.ini ]] || { err dminit 失败未生成 dm.ini; exit 1; } } register_service(){ log register systemd service local svcDmService${DM_INSTANCE} if systemctl list-unit-files | grep -q ^${svc}.service; then log 服务已注册$svc; return fi ${DM_HOME}/script/root/dm_service_installer.sh -t dmserver -dm_ini ${DM_DATA}/${DM_DB_NAME}/dm.ini -p ${DM_INSTANCE} systemctl daemon-reload || true } start_service(){ log start instance service su - ${DM_USER} -c bash -lc ${DM_HOME}/bin/DmService${DM_INSTANCE} start sleep 2 if ss -lntp 2/dev/null | grep -q :${DM_PORT} || netstat -nlpt 2/dev/null | grep -q :${DM_PORT}; then log port ${DM_PORT} listening else warn 未检测到 ${DM_PORT} 监听请检查日志 fi } open_firewall(){ log open firewall 5236/tcp if firewalld active if cmd_exists firewall-cmd systemctl is-active --quiet firewalld; then firewall-cmd --zonepublic --add-port${DM_PORT}/tcp --permanent || true firewall-cmd --reload || true fi } smoke_test(){ log smoke test: SELECT * FROM v$version su - ${DM_USER} -c ${DM_HOME}/bin/disql SYSDBA/${SYSDBA_PWD}localhost:${DM_PORT} -e SELECT * FROM v\$version; } main(){ require_root ensure_pkg net-tools || true ensure_pkg util-linux || true ensure_user_group tune_limits prep_dirs ensure_tmp_size mount_iso run_installer setup_env dminit_db register_service start_service open_firewall smoke_test log ✅ DONE warn 如使用了默认口令请尽快修改 SYSDBA/SYSAUDITOR 密码dmdba 账号若需登录请自行执行 passwd dmdba 设置强口令。 } main $怎么运行# 1) 准备口令可自定义 export SYSDBA_PWDSysdba123 export SYSAUDITOR_PWDAuditor123 # 2) 执行root只需传入 ISO 路径 chmod x dm8_install.sh sudo bash ./dm8_install.sh /root/dm8_20250122_x86_rh7_64.iso