一、环境准备
database | OS |
DM Database Server 64 V8 | CentOS Linux release 7.7.1908 (Core) |
二、安装包和脚本准备
链接: https://pan.baidu.com/s/1a-Yy6mUv-18xdN_v8BIoxw
提取码: eshp
将下载的安装包和脚本放至服务器任意位置,赋予X权限,执行脚本,按提示输入安装目录和自定义端口即可。
[root@mydm ~]#sh -x dm8_single_install.sh
三、脚本分享
#! /bin/bash
echo -e "\n\n****** 开始安装DM8******\n\n"
# 创建DM数据库镜像目录和安装目录
mkdir -p /dm8_setup/iso
mkdir –p /dm
# 获取当前所在目录位置
current_dir=$(pwd)
echo "当前所在目录位置: $current_dir"
# 目标路径
target_dir="/dm8_setup/iso"
# 检查目标路径是否存在,如果不存在则创建
if [ ! -d "$target_dir" ]; then
mkdir -p "$target_dir"
echo "已创建目录: $target_dir"
fi
# 移动当前目录下的所有文件到目标路径
mv -f $current_dir/* $target_dir
echo "已将当前目录下所有文件移动至 $target_dir"
# mount iso file
#read -p "Please input iso file name >" iso_name
iso_name="dm8_20240408_x86_rh7_64.iso"
mount /dm8_setup/iso/${iso_name} /mnt -o loop &>/dev/null
if [ $? -ne 0 ]; then
echo "cdrom has mount!please umount and continue setup."
exit
fi
# input setup base dir
read -p "Please input setup base dir >" dm_base
if [ ! -d "$dm_base" ]; then
mkdir -p "$dm_base"
fi
if [ "$(ls -A $dm_base)" ]; then
echo "$dm_base is not empty!"
exit
fi
# 自定义端口号
read -p "Please input setup port num(default 5236) >" port_num
#if [ "$(netstat -tpnl | grep $port_num)" ]; then
# echo "$port_num is used"
# exit
#fi
# modify /etc/hosts file
hostnamectl set-hostname mydm
public_ip=$(hostname -I| grep -o -e '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n 1)
node_name=$(hostname)
echo -e "${public_ip} ${node_name}">> /etc/hosts
groups=(dinstall) # install group
group_start_id=50000 # specify start id of group
setup_dir=${dm_base}/dbms
init_db_dir=${dm_base}/data
init_rlog_dir=${dm_base}/log
db_name=PROD
instance_name=PROD
ctl_path=$init_db_dir"/"$db_name
log_path=$init_rlog_dir"/"$db_name
page_size=16
extent_size=16
log_size=256
case_sensitive=y
charset=0
length_in_char=0
sysdba_pwd=SYSDBA
# create dm soft dirs and grant privlieges
mkdir -p ${dm_base}/dbms
mkdir -p ${dm_base}/data
mkdir -p ${dm_base}/log
mkdir -p ${dm_base}/arch
mkdir -p ${dm_base}/bak
mkdir -p ${dm_base}/script
# create group of required with dmdba user
function create_group() {
g_id=${group_start_id}
for g_name in ${groups[*]}
do
groupadd -g $((g_id++)) ${g_name} &>/dev/null
done
for line in $(cat /etc/group | awk -F: '$3>=50000 && $3<=50010')
do
OLD_IFS="$IFS"
IFS=":"
segs=($line)
echo "Group ${segs[0]} created successful!"
IFS="$OLD_IFS"
done
}
function del_group() {
del_gn=(`cat /etc/group | awk -F: '$3>50000 && $3 <50000{print $1}' | xargs`)
for gn in ${del_gn[*]}
do
groupdel $gn
done
}
# $1:user name
# $2:user id
# $3:group name
function create_user() {
$(id "$1" &>/dev/null)
if (($?!=0)); then
$(useradd -u "$2" -g "$3" "$1" ; echo "dmdba" | passwd --stdin $1 &>/dev/null)
echo "$1 user created! password is dmdba"
else
echo "user has existed!"
fi
}
# create groups
create_group
# create user for install
create_user dmdba 51000 dinstall
chown -R dmdba:dinstall /dm
chmod -R 775 /dm
# modify resources parameter
echo "dmdba soft nproc 16384
dmdba hard nproc 16384
dmdba soft nofile 16384
dmdba hard nofile 65536
dmdba soft stack 16384
dmdba hard stack 32768" >> /etc/security/limits.conf
# close firewalld
systemctl stop firewalld.service &>/dev/null
systemctl disable firewalld.service &>/dev/null
# disable selinux
sed -r -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 &>/dev/null
cat << EOF > ${dm_base}/script/silent_setup.xml
<?xml version="1.0"?>
<DATABASE>
<LANGUAGE>en</LANGUAGE>
<TIME_ZONE>+08:00</TIME_ZONE>
<KEY></KEY>
<INSTALL_TYPE>0</INSTALL_TYPE>
<INSTALL_PATH>${setup_dir}</INSTALL_PATH>
<INIT_DB>y</INIT_DB>
<DB_PARAMS>
<PATH>${init_db_dir}</PATH>
<DB_NAME>${db_name}</DB_NAME>
<INSTANCE_NAME>${instance_name}</INSTANCE_NAME>
<PORT_NUM>${port_num}</PORT_NUM>
<CTL_PATH>${setup_dir}/${db_name}/dm.ctl</CTL_PATH>
<LOG_PATHS>
<LOG_PATH>${init_rlog_dir}/${db_name}/redo01.log</LOG_PATH>
<LOG_PATH>${init_rlog_dir}/${db_name}/redo02.log</LOG_PATH>
</LOG_PATHS>
<EXTENT_SIZE>${extent_size}</EXTENT_SIZE>
<PAGE_SIZE>${page_size}</PAGE_SIZE>
<LOG_SIZE>${log_size}</LOG_SIZE>
<CASE_SENSITIVE>Y</CASE_SENSITIVE>
<CHARSET>0</CHARSET>
<LENGTH_IN_CHAR>0</LENGTH_IN_CHAR>
<TIME_ZONE>+08:00</TIME_ZONE>
</DB_PARAMS>
<CREATE_DB_SERVICE>n</CREATE_DB_SERVICE>
<STARTUP_DB_SERVICE>n</STARTUP_DB_SERVICE>
</DATABASE>
EOF
chown dmdba:dinstall /dm/script/silent_setup.xml
su - dmdba -c "/mnt/DMInstall.bin -q /dm/script/silent_setup.xml"
${setup_dir}/script/root/root_installer.sh
${setup_dir}/script/root/dm_service_installer.sh -t dmserver -p ${db_name} -dm_ini ${init_db_dir}/${db_name}/dm.ini
cat << EOF >> /home/dmdba/.bash_profile
DM_HOME=${setup_dir}
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\${DM_HOME}/bin
export PATH=\$PATH:\${DM_HOME}/bin
EOF
su - dmdba -c "source /home/dmdba/.bash_profile"
su - dmdba -c "${setup_dir}/bin/DmService${db_name} start"
echo -e "\n\n****** DM8安装完成 ******\n\n"
注意:安装过程中,只需要输入安装路径和端口号即可。
思考:为什么需要一键安装脚本
1、简化安装过程:通过一键安装脚本,用户可以避免手动执行一系列复杂的安装步骤,如配置网络、设置系统参数、安装软件等。这大大减少了安装数据库所需的时间和人力。
2、提高安装效率:脚本能够自动化处理许多重复性的任务,如复制软件到安装服务器、配置网络设置等,从而加快了整个安装过程。
3、确保安装的正确性和一致性:一键安装脚本通常经过精心设计和测试,能够确保所有必要的配置和参数都正确无误地应用到数据库安装过程中,从而避免了手动操作可能引入的错误。
4、便于管理和维护:对于需要频繁部署数据库环境的情况,如开发环境、测试环境等,使用一键安装脚本可以快速部署,减少重复工作,提高工作效率。