一、环境准备
| 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/bashecho -e "\n\n****** 开始安装DM8******\n\n"# 创建DM数据库镜像目录和安装目录mkdir -p /dm8_setup/isomkdir –p /dm# 获取当前所在目录位置current_dir=$(pwd)echo "当前所在目录位置: $current_dir"# 目标路径target_dir="/dm8_setup/iso"# 检查目标路径是否存在,如果不存在则创建if [ ! -d "$target_dir" ]; thenmkdir -p "$target_dir"echo "已创建目录: $target_dir"fi# 移动当前目录下的所有文件到目标路径mv -f $current_dir/* $target_direcho "已将当前目录下所有文件移动至 $target_dir"# mount iso file#read -p "Please input iso file name >" iso_nameiso_name="dm8_20240408_x86_rh7_64.iso"mount /dm8_setup/iso/${iso_name} /mnt -o loop &>/dev/nullif [ $? -ne 0 ]; thenecho "cdrom has mount!please umount and continue setup."exitfi# input setup base dirread -p "Please input setup base dir >" dm_baseif [ ! -d "$dm_base" ]; thenmkdir -p "$dm_base"fiif [ "$(ls -A $dm_base)" ]; thenecho "$dm_base is not empty!"exitfi# 自定义端口号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 filehostnamectl set-hostname mydmpublic_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/hostsgroups=(dinstall) # install groupgroup_start_id=50000 # specify start id of groupsetup_dir=${dm_base}/dbmsinit_db_dir=${dm_base}/datainit_rlog_dir=${dm_base}/logdb_name=PRODinstance_name=PRODctl_path=$init_db_dir"/"$db_namelog_path=$init_rlog_dir"/"$db_namepage_size=16extent_size=16log_size=256case_sensitive=ycharset=0length_in_char=0sysdba_pwd=SYSDBA# create dm soft dirs and grant privliegesmkdir -p ${dm_base}/dbmsmkdir -p ${dm_base}/datamkdir -p ${dm_base}/logmkdir -p ${dm_base}/archmkdir -p ${dm_base}/bakmkdir -p ${dm_base}/script# create group of required with dmdba userfunction create_group() {g_id=${group_start_id}for g_name in ${groups[*]}dogroupadd -g $((g_id++)) ${g_name} &>/dev/nulldonefor line in $(cat /etc/group | awk -F: '$3>=50000 && $3<=50010')doOLD_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[*]}dogroupdel $gndone}# $1:user name# $2:user id# $3:group namefunction 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"elseecho "user has existed!"fi}# create groupscreate_group# create user for installcreate_user dmdba 51000 dinstallchown -R dmdba:dinstall /dmchmod -R 775 /dm# modify resources parameterecho "dmdba soft nproc 16384dmdba hard nproc 16384dmdba soft nofile 16384dmdba hard nofile 65536dmdba soft stack 16384dmdba hard stack 32768" >> /etc/security/limits.conf# close firewalldsystemctl stop firewalld.service &>/dev/nullsystemctl disable firewalld.service &>/dev/null# disable selinuxsed -r -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configsetenforce 0 &>/dev/nullcat << 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>EOFchown dmdba:dinstall /dm/script/silent_setup.xmlsu - 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.inicat << EOF >> /home/dmdba/.bash_profileDM_HOME=${setup_dir}export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\${DM_HOME}/binexport PATH=\$PATH:\${DM_HOME}/binEOFsu - 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、便于管理和维护:对于需要频繁部署数据库环境的情况,如开发环境、测试环境等,使用一键安装脚本可以快速部署,减少重复工作,提高工作效率。