#!/bin/bash
# 定义环境变量
FIREWALL_PORT="5236" # 默认端口 5236
DBPASSWD='Dmdb@#123!' # 数据库密码
DBGID=54321 # 组 ID
DBUID=54321 # 用户 ID
DBGROUP=dinstall # 数据库组
DBUSER=dmdba # 数据库用户
DBINSTALL_PATH="/dm8" # 安装路径
DM_HOME=$DBINSTALL_PATH
# 设置语言为中文
export LANG=zh_CN.UTF-8
# 日志函数:带时间戳和黄色输出的信息
log_info() {
local message=$1
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\033[33m[${timestamp}] ${message}\033[0m"
}
# 检查系统启动模式:UEFI 或 Legacy
check_boot_mode() {
if [[ -d /sys/firmware/efi ]]; then
BOOT_MODE="UEFI"
else
BOOT_MODE="Legacy"
fi
log_info "系统启动模式:${BOOT_MODE}"
}
# 获取 grub.cfg 文件的路径
get_grub_cfg_path() {
check_boot_mode
if [[ "${BOOT_MODE}" == "UEFI" ]]; then
. /etc/os-release
GRUB_CFG_PATH="/boot/efi/EFI/${ID}/grub.cfg"
else
GRUB_CFG_PATH="/boot/grub2/grub.cfg"
fi
log_info "grub.cfg 路径:${GRUB_CFG_PATH}"
}
# 生成 grub.cfg 配置
generate_grub_cfg() {
log_info "生成 grub.cfg 配置"
grub2-mkconfig -o "$GRUB_CFG_PATH" &>/dev/null
log_info "grub.cfg 配置文件已生成。"
}
# 功能 1: 永久放行指定端口
configure_firewall() {
log_info "配置防火墙,放行 TCP 端口: ${FIREWALL_PORT}"
firewall-cmd --permanent --add-port="${FIREWALL_PORT}/tcp" &>/dev/null
firewall-cmd --add-port="${FIREWALL_PORT}/tcp" &>/dev/null
log_info "防火墙规则已更新。"
}
# 功能 2: 永久关闭 SELinux
disable_selinux() {
log_info "禁用 SELinux"
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0 &>/dev/null || log_info "SELinux 已关闭。"
}
# 功能 3: 永久修改磁盘调度算法为 deadline
set_disk_scheduler() {
log_info "设置磁盘调度算法为 deadline"
sed -i 's/elevator=deadline//g' /etc/default/grub
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 elevator=deadline"/' /etc/default/grub
}
# 功能 4: 永久关闭交换分区 swap
disable_swap() {
log_info "关闭交换分区 swap"
swapoff -a
sed -i '/^[^#]*\bswap\b/s/^/#/' /etc/fstab
log_info "交换分区 swap 已永久禁用。"
}
# 功能 5: 禁用 NUMA(Non-Uniform Memory Access)
disable_numa() {
log_info "禁用 NUMA"
sed -i 's/numa=off//g' /etc/default/grub
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 numa=off"/' /etc/default/grub
}
# 功能 6: 禁用 Transparent HugePages(透明大页)
disable_transparent_hugepages() {
log_info "禁用 Transparent HugePages"
echo "never" > /sys/kernel/mm/transparent_hugepage/enabled
echo "never" > /sys/kernel/mm/transparent_hugepage/defrag
log_info "Transparent HugePages 已永久禁用。"
}
# 功能 7: 设置 sysctl.conf 参数
set_sysctl_params() {
log_info "设置 sysctl.conf 参数"
echo "0" > /proc/sys/vm/overcommit_memory
sed -i '/vm.overcommit_memory/d' /etc/sysctl.conf
echo "vm.overcommit_memory=0" >> /etc/sysctl.conf
}
# 功能 8: 设置 limits.conf 参数
set_limits_conf() {
log_info "设置 limits.conf 参数"
sed -i '/soft\s*data\s*/d' /etc/security/limits.conf
sed -i '/hard\s*data\s*/d' /etc/security/limits.conf
echo "* soft data 1048576" >> /etc/security/limits.conf
echo "* hard data 1048576" >> /etc/security/limits.conf
sed -i '/soft\s*fsize\s*/d' /etc/security/limits.conf
sed -i '/hard\s*fsize\s*/d' /etc/security/limits.conf
echo "* soft fsize unlimited" >> /etc/security/limits.conf
echo "* hard fsize unlimited" >> /etc/security/limits.conf
sed -i '/soft\s*nofile\s*/d' /etc/security/limits.conf
sed -i '/hard\s*nofile\s*/d' /etc/security/limits.conf
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
sed -i '/soft\s*nproc\s*/d' /etc/security/limits.conf
sed -i '/hard\s*nproc\s*/d' /etc/security/limits.conf
echo "* soft nproc 10240" >> /etc/security/limits.conf
echo "* hard nproc 10240" >> /etc/security/limits.conf
}
# 功能 9: 确保 RemoveIPC=no
ensure_removeipc() {
log_info "确保 RemoveIPC=no"
sed -i '/^RemoveIPC=.*/d' /etc/systemd/logind.conf
echo "RemoveIPC=no" >> /etc/systemd/logind.conf
systemctl daemon-reload
systemctl restart systemd-logind
}
# 功能 10: 创建用户、组并设置权限
create_user_group() {
log_info "创建用户和组"
groupadd -g $DBGID $DBGROUP 2>/dev/null || log_info "$DBGROUP 组已存在"
useradd -g $DBGROUP -u $DBUID -m $DBUSER 2>/dev/null || log_info "$DBUSER 用户已存在"
# 设置用户密码
echo "$DBUSER:$DBPASSWD" | chpasswd
log_info "用户和组已创建,密码已设置。"
# 设置安装路径权限
mkdir -p $DBINSTALL_PATH
chown -R $DBUSER:$DBGROUP $DBINSTALL_PATH
chmod -R 775 $DBINSTALL_PATH
log_info "安装路径权限已设置。"
}
# 功能 11: 配置 dmdba 用户的 .bashrc 环境变量
configure_bashrc() {
log_info "配置 dmdba 用户的 .bashrc"
BASHRC_FILE="/home/$DBUSER/.bashrc"
# 确保文件存在
touch $BASHRC_FILE
# 删除旧配置以确保幂等性
sed -i '/^export DM_HOME=/d' $BASHRC_FILE
sed -i '/^export LD_LIBRARY_PATH=/d' $BASHRC_FILE
sed -i '/^export PATH=/d' $BASHRC_FILE
# 追加新的配置
echo "export DM_HOME=\"$DM_HOME\"" >> $BASHRC_FILE
echo "export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH:$DM_HOME/bin\"" >> $BASHRC_FILE
echo "export PATH=\$PATH:$DM_HOME/bin:$DM_HOME/tool" >> $BASHRC_FILE
log_info "dmdba 用户的 .bashrc 配置已更新。"
}
# 功能 12: 确保 /etc/pam.d/login 包含 pam_limits 配置
ensure_pam_limits() {
log_info "确保 /etc/pam.d/login 包含 pam_limits 配置"
PAM_FILE="/etc/pam.d/login"
# 确保文件存在
if [[ ! -f $PAM_FILE ]]; then
touch $PAM_FILE
log_info "$PAM_FILE 文件不存在,已创建。"
fi
# 删除旧配置以确保幂等性
sed -i '/^session required \/lib64\/security\/pam_limits.so/d' $PAM_FILE
sed -i '/^session required pam_limits.so/d' $PAM_FILE
# 插入新的配置
echo "session required /lib64/security/pam_limits.so" >> $PAM_FILE
echo "session required pam_limits.so" >> $PAM_FILE
log_info "/etc/pam.d/login 中的 pam_limits 配置已更新。"
}
# 调用函数
configure_firewall
disable_selinux
# set_disk_scheduler
# disable_swap
# disable_numa
# disable_transparent_hugepages
# set_sysctl_params
# set_limits_conf
# ensure_removeipc
create_user_group
configure_bashrc
# generate_grub_cfg
# ensure_pam_limits
log_info "所有操作完成,务必重启操作系统生效所有配置!"
上述脚本根据达梦安装手册编写,根据自己实际情况,选择。
最少只需要下面四个函数即可:
[root@localhost ~]# hostnamectl set-hostname dm01
[root@localhost ~]# su -
上一次登录: 一 1月 20 17:44:37 CST 2025 从 10.10.10.1 pts/0 上
[root@dm01 ~]# vim 0.set_dm_env.sh
[root@dm01 ~]# sh 0.set_dm_env.sh
[2025-01-20 18:03:06] 配置防火墙,放行 TCP 端口: 5236
[2025-01-20 18:03:07] 防火墙规则已更新。
[2025-01-20 18:03:07] 禁用 SELinux
[2025-01-20 18:03:07] SELinux 已关闭。
[2025-01-20 18:03:07] 创建用户和组
[2025-01-20 18:03:07] 用户和组已创建,密码已设置。
[2025-01-20 18:03:07] 安装路径权限已设置。
[2025-01-20 18:03:07] 配置 dmdba 用户的 .bashrc
[2025-01-20 18:03:07] dmdba 用户的 .bashrc 配置已更新。
[2025-01-20 18:03:07] 所有操作完成,务必重启操作系统生效所有配置!
[root@dm01 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@dm01 ~]# df -h | grep mnt
/dev/sr0 1.1G 1.1G 0 100% /mnt
[root@dm01 ~]# ll /mnt
总用量 1068007
-r-xr-xr-x 1 root root 2910670 12月 24 19:15 'DM8 Install.pdf'
-r-xr-xr-x 1 root root 1090727961 12月 26 18:45 DMInstall.bin
[root@dm01 ~]# df -h | grep '/tmp'
tmpfs 1.5G 0 1.5G 0% /tmp
[root@dm01 ~]# mount -o remount,size=4G /tmp
[root@dm01 ~]# df -h | grep '/tmp'
tmpfs 4.0G 0 4.0G 0% /tmp
[root@dm01 ~]# /mnt/DMInstall.bin -i
安装语言:
[1]: 简体中文
[2]: English
请选择安装语言 [1]:
解压安装程序.........
硬件架构校验通过!
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:y
设置时区:
[ 1]: (GTM-12:00) 日界线西
[ 2]: (GTM-11:00) 萨摩亚群岛
[ 3]: (GTM-10:00) 夏威夷
[ 4]: (GTM-09:00) 阿拉斯加
[ 5]: (GTM-08:00) 太平洋时间(美国和加拿大)
[ 6]: (GTM-07:00) 亚利桑那
[ 7]: (GTM-06:00) 中部时间(美国和加拿大)
[ 8]: (GTM-05:00) 东部部时间(美国和加拿大)
[ 9]: (GTM-04:00) 大西洋时间(美国和加拿大)
[10]: (GTM-03:00) 巴西利亚
[11]: (GTM-02:00) 中大西洋
[12]: (GTM-01:00) 亚速尔群岛
[13]: (GTM) 格林威治标准时间
[14]: (GTM+01:00) 萨拉热窝
[15]: (GTM+02:00) 开罗
[16]: (GTM+03:00) 莫斯科
[17]: (GTM+04:00) 阿布扎比
[18]: (GTM+05:00) 伊斯兰堡
[19]: (GTM+06:00) 达卡
[20]: (GTM+07:00) 曼谷,河内
[21]: (GTM+08:00) 中国标准时间
[22]: (GTM+09:00) 首尔
[23]: (GTM+10:00) 关岛
[24]: (GTM+11:00) 所罗门群岛
[25]: (GTM+12:00) 斐济
[26]: (GTM+13:00) 努库阿勒法
[27]: (GTM+14:00) 基里巴斯
请选择时区 [21]:
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 2180M
请选择安装目录 [/opt/dmdbms]:/dm8
可用空间: 57G
是否确认安装路径(/dm8)? (Y/y:是 N/n:否) [Y/y]:
安装前小结
安装位置: /dm8
所需空间: 2180M
可用空间: 57G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):Y
2025-01-20 18:10:38
[INFO] 安装达梦数据库...
2025-01-20 18:10:38
[INFO] 安装 基础 模块...
2025-01-20 18:10:41
[INFO] 安装 服务器 模块...
2025-01-20 18:10:42
[INFO] 安装 客户端 模块...
2025-01-20 18:10:43
[INFO] 安装 驱动 模块...
2025-01-20 18:10:43
[INFO] 安装 手册 模块...
2025-01-20 18:10:44
[INFO] 安装 服务 模块...
2025-01-20 18:10:44
[INFO] 移动日志文件。
2025-01-20 18:10:44
[INFO] 正在启动DmAPService服务...
2025-01-20 18:10:45
[INFO] 启动DmAPService服务成功。
2025-01-20 18:10:45
[INFO] 安装达梦数据库完成。
安装结束
[root@dm01 ~]# su - dmdba
上一次登录: 一 1月 20 18:17:21 CST 2025 pts/0 上
[dmdba@dm01 ~]$ dminit \
> PATH=/dm8/data \
> DB_NAME=DM01 \
> INSTANCE_NAME=DM01 \
> SYSDBA_PWD=Dm01SYSDBA \
> SYSAUDITOR_PWD=Dm01SYSDBA \
> page_size=8 \
> extent_size=16 \
> LOG_SIZE=256 \
> CASE_SENSITIVE=Y \
> CHARSET=1 \
> PORT_NUM=5236
initdb V8
db version: 0x7000c
file dm.key not found, use default license!
License will expire on 2025-12-25
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
log file path: /dm8/data/DM01/DM0101.log
log file path: /dm8/data/DM01/DM0102.log
write to dir [/dm8/data/DM01].
create dm database success. 2025-01-20 18:19:49
[dmdba@dm01 ~]$ exit
注销
[root@dm01 ~]# /dm8/script/root/dm_service_installer.sh \
> -t dmserver \
> -dm_ini /dm8/data/DM01/dm.ini \
> -p DM01
Created symlink /etc/systemd/system/multi-user.target.wants/DmServiceDM01.service → /usr/lib/systemd/system/DmServiceDM1.service.
创建服务(DmServiceDM1)完成
[root@dm01 ~]# systemctl daemon-reload
[root@dm01 ~]# systemctl status DmServiceDM01.service
● DmServiceDM1.service - DM Instance Service(DmServiceDM1).
Loaded: loaded (/usr/lib/systemd/system/DmServiceDM1.service; enabled; vendor preset: disabled)
Active: inactive (dead)
[root@dm01 ~]# systemctl enable DmServiceDM01.service
[root@dm01 ~]# systemctl start DmServiceDM01.service
[root@dm01 ~]# systemctl status DmServiceDM01.service
● DmServiceDM1.service - DM Instance Service(DmServiceDM1).
Loaded: loaded (/usr/lib/systemd/system/DmServiceDM1.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2025-01-20 18:23:01 CST; 6s ago
Process: 5292 ExecStart=/dm8/bin/DmServiceDM1 start (code=exited, status=0/SUCCESS)
Main PID: 5315 (dmserver)
Tasks: 121
Memory: 885.5M
CGroup: /system.slice/DmServiceDM01.service
└─5315 /dm8/bin/dmserver path=/dm8/data/DM01/dm.ini -noconsole
1月 20 18:22:46 dm01 systemd[1]: Starting DM Instance Service(DmServiceDM1)....
1月 20 18:23:01 dm01 DmServiceDM1[5292]: [34B blob data]
1月 20 18:23:01 dm01 systemd[1]: Started DM Instance Service(DmServiceDM1)..
[root@dm01 ~]# su - dmdba
上一次登录: 一 1月 20 18:18:05 CST 2025 pts/0 上
[dmdba@dm01 ~]$ disql SYSDBA/Dm01SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 5.315(ms)
disql V8
SQL> SELECT * FROM V$INSTANCE;
行号 NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME SVR_VERSION DB_VERSION START_TIME STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE BUILD_VERSION
---------- ------- ------------- --------------- --------- -------------------------- ------------------- ------------------- ------- ------ ----------- ----------- -------- ----------------------------------
BUILD_TIME
--------------------
1 DM01 DM01 1 dm01 DM Database Server x64 V8 DB Version: 0x7000c 2025-01-20 18:22:46 OPEN NORMAL 0 0 NULL 1-4-6-2024.12.25-255012-20119-ENT
Dec 26 2024 16:09:16
已用时间: 0.893(毫秒). 执行号:66301.
文章
阅读量
获赞