mysql一键安装脚本分享

来源:这里教程网 时间:2026-03-01 18:29:14 作者:

mysql一键安装脚本分享

1、脚本



#########################################################################

########################第一部分,参数配置###################################

#########################################################################

#服务器
server=mysql1
server_ip=192.168.133.97
ntp_server=



#软件
db=mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
basepath=/usr/
local/mysql
db_path=/data/3306     
#定义数据存储目录
db_port=
'3306' 
#定义数据库端口


#########################################################################

########################第二部分,函数配置###################################

#########################################################################


f1_os7_yum_config(){

echo -e 
"\x1B[01;96m --------1.yum 仓库: \x1B[0m"

yum list &> /dev/null

if [[ $? = 0  ]];
then

echo -e 
"\n\n OK: yum list check sucessed \n\n"
yum -y remove libvirt-libs.x86_64
yum -y install  bc nfs-utils binutils  elfutils-libelf  elfutils-libelf-devel  fontconfig-devel  glibc  glibc-devel  ksh  libaio  libaio-devel  libXrender  libXrender-devel  libX11  libXau  libXi  libXtst  libgcc  librdmacm-devel  libstdc++  libstdc++-devel  libxcb  make  net-tools  smartmontools  sysstat  unzip  libnsl  libnsl2 zip unzip expect policycoreutils-python-utils glibc-langpack-* device-mapper* psmisc*
yum -y remove mysql mysql-server

else
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

cat >>/etc/yum.repos.d/rhel-dvd.repo<<-EOF
[server]
name=server
baseurl=file:///mnt

enable=1
gpgcheck=0
EOF

mount /dev/sr0 /mnt
mount /soft/*.iso /mnt

yum list &> /dev/null

if [[ $? != 0  ]];
then

echo -e 
"\n\nERROR: yum list check failed \n\n"

exit -1

else

echo 
"yum config completed"
yum -y remove libvirt-libs.x86_64
yum -y remove mysql mysql-server
yum -y install  bc nfs-utils binutils  elfutils-libelf  elfutils-libelf-devel  fontconfig-devel  glibc  glibc-devel  ksh  libaio  libaio-devel  libXrender  libXrender-devel  libX11  libXau  libXi  libXtst  libgcc  librdmacm-devel  libstdc++  libstdc++-devel  libxcb  make  net-tools  smartmontools  sysstat  unzip  libnsl  libnsl2 zip unzip expect policycoreutils-python-utils glibc-langpack-* device-mapper* psmisc*

fi

fi
}




f1_os8_yum_config(){

echo -e 
"\x1B[01;96m --------1.yum 仓库: \x1B[0m"

yum list &> /dev/null

if [[ $? = 0  ]];
then

echo -e 
"\n\n OK: yum list check sucessed \n\n"
dnf -y remove libvirt-libs.x86_64
dnf -y remove mysql mysql-server
dnf -y install  bc nfs-utils binutils  elfutils-libelf  elfutils-libelf-devel  fontconfig-devel  glibc  glibc-devel  ksh  libaio  libaio-devel  libXrender  libXrender-devel  libX11  libXau  libXi  libXtst  libgcc  librdmacm-devel  libstdc++  libstdc++-devel  libxcb  make  net-tools  smartmontools  sysstat  unzip  libnsl  libnsl2 zip unzip expect policycoreutils-python-utils glibc-langpack-* device-mapper* psmisc*


else
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/

cat >>/etc/yum.repos.d/rhel-dvd.repo<<-EOF
[BaseOS]
name = BaseOS
baseurl = file:///mnt/BaseOS
enabled = 1
gpgcheck = 0
gpgkey = file:///mnt/RPM-GPG-KEY-oracle

[AppStream]
name = AppStream
baseurl = file:///mnt/AppStream
enabled = 1
gpgcheck = 0
gpgkey = file:///mnt/RPM-GPG-KEY-oracle
EOF

mount /dev/sr0 /mnt
mount /soft/*.iso /mnt

yum list &> /dev/null

if [[ $? != 0  ]];
then

echo -e 
"\n\nERROR: yum list check failed \n\n"

exit -1

else

echo 
"yum config completed"
dnf -y remove libvirt-libs.x86_64
dnf -y remove mysql mysql-server
dnf -y install  bc nfs-utils binutils  elfutils-libelf  elfutils-libelf-devel  fontconfig-devel  glibc  glibc-devel  ksh  libaio  libaio-devel  libXrender  libXrender-devel  libX11  libXau  libXi  libXtst  libgcc  librdmacm-devel  libstdc++  libstdc++-devel  libxcb  make  net-tools  smartmontools  sysstat  unzip  libnsl  libnsl2 zip unzip expect policycoreutils-python-utils glibc-langpack-* device-mapper* psmisc*

fi

fi
}



f1_os_hosts(){

echo -e 
"\x1B[01;96m --------2.设置主机名: \x1B[0m"
hostnamectl 
set-hostname 
$server

echo -e 
"\x1B[01;96m --------3.设置/etc/hosts: \x1B[0m"
sed -i 
'3,$d' /etc/hosts

echo 
"
$server_ip  
$server" >> /etc/hosts
}



f1_os_time(){

echo -e 
"\x1B[01;96m --------4.设置设置时区和时间: \x1B[0m"
timedatectl
sudo timedatectl 
set-timezone 
'Asia/Shanghai'
clock --systohc



if [ -n  
"
$ntp_server" ];
then
yum install -y chrony
systemctl stop ntpd.service
systemctl 
disable ntpd.service

sed -i 
'/^server/d' /etc/chrony.conf
cat<<-EOF>>/etc/chrony.conf
server 
$ntp_server iburst
EOF

systemctl restart chronyd.service
systemctl 
enable chronyd.service


# 检查时间同步情况
chronyc tracking
chronyc sources -v


else
 
echo 
"ntpserver is not found;"

fi
}



f1_os_stopserver(){

echo -e 
"\x1B[01;96m --------5.关闭不需要的服务: \x1B[0m"
systemctl stop firewalld
systemctl 
disable firewalld
iptables -F
sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
setenforce 0
systemctl stop avahi-dnsconfd
systemctl stop avahi-daemon
systemctl 
disable avahi-dnsconfd
systemctl 
disable avahi-daemon
}



f1_os_closenuma(){

echo -e 
"\x1B[01;96m --------6.关闭numa和透明大页: \x1B[0m"
sed  -i  
"s/quiet.*/quiet\"/" /etc/default/grub
sed -i 
'/GRUB_CMDLINE_LINUX/{s/quiet/quiet transparent_hugepage=never numa=off/}' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
}



f1_os_NOZEROCONF(){

echo -e 
"\x1B[01;96m --------7.配置NOZEROCONF: \x1B[0m"
sed -i 
'2,$d' /etc/sysconfig/network
cat >>/etc/sysconfig/network<<-EOF
NOZEROCONF=yes
EOF
}



f1_os_mtu(){

echo -e 
"\x1B[01;96m --------8.设置lo mtu为16384: \x1B[0m"
ifconfig lo mtu 16384
}



mysql_single_set_sysctl(){

echo -e 
"\x1B[01;96m --------9.systl.conf配置: \x1B[0m"

if [[ `cat /etc/sysctl.conf|grep for_mysql|wc -l` == 0 ]];
then
mem_total=`free|egrep 
'Mem:'|awk 
'{print $2}'`
cat >> /etc/sysctl.conf <<-EOF

#for_mysql
fs.file-max = 76724200
kernel.sem = 10000 10240000 10000 1024
kernel.shmmni = 4096
kernel.shmall = 
$mem_total
kernel.shmmax = $((
$mem_total*1024))
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 1048576
fs.aio-max-nr = 40960000
vm.swappiness=10
vm.min_free_kbytes=524288

EOF
sysctl -p

fi
}



mysql_single_set_limits(){

echo -e 
"\x1B[01;96m --------10.limits.conf配置: \x1B[0m"

if [[ `cat /etc/security/limits.conf|grep 
"mysql soft nofile"|wc -l` == 0 ]];
then
cat>>/etc/security/limits.conf <<EOF
mysql soft nofile 1048576
mysql hard nofile 1048576
mysql soft nproc 131072
mysql hard nproc 131072
mysql soft stack 32768
mysql hard stack 32768
mysql soft core unlimited
mysql hard core unlimited
EOF

cat /etc/security/limits.conf

fi

}



f2_os_user_menu(){

echo -e 
"\x1B[01;96m --------11.mysql user and menu created: \x1B[0m"
userdel -r mysql
rm 
$basepath -f
rm 
$db_path -fr
rm /mysql -fr
systemctl stop mysqld
pkill mysqld

useradd mysql

mkdir -p 
$db_path
mkdir -p /mysql
tar -xvf /soft/
$db -C /mysql
dbn=`
echo 
$db |awk -F 
"-" 
'{print $1$2}'`
mv /mysql/mysql-* /mysql/
$dbn
ln -s /mysql/
$dbn 
$basepath


chown -R mysql:mysql 
$db_path
chmod -R 775 
$db_path
chown -R mysql:mysql 
$basepath
chmod 775 
$basepath
chown -R mysql:mysql /mysql
chmod 775 /mysql
}



f2_os_inventory(){

echo -e 
"\x1B[01;96m --------12.mysql user inventory: \x1B[0m"


if [[ `cat /etc/profile|grep for_mysql|wc -l` == 0 ]];
then

cat >> /etc/profile <<-EOF

#for_mysql

export PATH=/usr/
local/mysql/bin:\
$PATH
EOF

source /etc/profile

fi

}



f2_os_mycnf(){

echo -e 
"\x1B[01;96m --------13.修改/etc/my.cnf: \x1B[0m"
rm /etc/my.cnf -f

if [[ `cat /etc/my.cnf|grep for_mysql|wc -l` == 0 ]];
then

cat >> /etc/my.cnf <<-EOF

#for_mysql
[mysqld]

#skip-grant-tables  #可以不用密码登录

#update user set authentication_string=password('新密码') where user='root';
user=mysql
basedir=
$basepath
datadir=
$db_path
port=
$db_port
socket=
$db_path/mysql.sock
server_id = 1


log-bin=mysql-bin
max_binlog_size =500M
max_binlog_cache_size =2G
max_binlog_stmt_cache_size =2G
binlog_format =ROW
expire_logs_days = 30

log_bin_trust_function_creators = 1


log-error=
$db_path/mysqld.log
pid-file=
$db_path/mysqld.pid
default-storage-engine=INNODB
character-set-server=utf8mb4
lower_case_table_names=1
max_connections=10000
sql_mode=
"STRICT_TRANS_TABLES,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
max_allowed_packet=160M

bind-address=0.0.0.0
lock_wait_timeout = 3600
slow_query_log =ON 
#慢日志
slow_query_log_file =
$db_path/slow.log
long_query_time =10

transaction-isolation =
"READ-COMMITTED"
innodb_log_file_size =2048M
innodb_log_files_in_group =3
innodb_buffer_pool_size =4G  
#8g内存设置50%

[mysql]
socket=
$db_path/mysql.sock
no-auto-rehash

[client]
socket=
$db_path/mysql.sock
EOF

fi
}




f2_os_autostart(){

echo -e 
"\x1B[01;96m --------14.mysql autostart: \x1B[0m"
rm /etc/init.d/mysqld -f &>/dev/null
mysqld --initialize-insecure --user=mysql
chmod -R 775 
$db_path
cp /usr/
local/mysql/support-files/mysql.server /etc/init.d/mysqld
systemctl 
enable mysqld
systemctl start mysqld
}




node_config(){

echo -e 
"\x1B[01;96m -------->正在初始化参数,配置过程请查看/soft/log日志; \x1B[0m"
str=`cat /etc/os-release |grep 
'^PRETTY_NAME'|awk -F
"=" 
'{print $2}'`
str=`
echo 
${str^^}`
 

if [[ 
$str == *
"OPENEULER"* ]]; 
then
    f1_os7_yum_config &>> /soft/
log

elif [[ 
$str == *
"ANOLIS"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

elif [[ 
$str == *
"CENTOS"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

elif [[ 
$str == *
"ORACLE"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

elif [[ 
$str == *
"ROCK"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

elif [[ 
$str == *
"REDHAT"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

elif [[ 
$str == *
"ALMA"* && 
$str != *
"7."* && (
$str == *
"8"* ||  
$str == *
"9"*)  ]]; 
then
   f1_os8_yum_config &>> /soft/
log

else
    f1_os7_yum_config &>> /soft/
log

fi

f1_os_hosts &>> /soft/
log
f1_os_time &>> /soft/
log
f1_os_stopserver &>> /soft/
log
f1_os_closenuma &>> /soft/
log
f1_os_NOZEROCONF &>> /soft/
log
f1_os_mtu &>> /soft/
log
mysql_single_set_sysctl &>> /soft/
log
mysql_single_set_limits &>> /soft/
log

f2_os_user_menu &>> /soft/
log
f2_os_inventory &>> /soft/
log
f2_os_mycnf &>> /soft/
log
f2_os_autostart &>> /soft/
log
}



while 
true

echo -e 
"\x1B[01;96m  ##脚本使用方法## \x1B[0m"

echo -e 
"\x1B[01;96m ##上传mysql安装包到 /soft目录下再执行-------- \x1B[0m"

echo -e 
"\x1B[01;96m  ##1.安装mysql## \x1B[0m"

echo -e 
"\x1B[01;96m  ##2.退出## \x1B[0m"


do
        
read -p 
"请输入你要查询的内容[1-2]" key
        
case 
$key 
in
        1)
                node_config;;
        2)
                
exit;;

esac

done

2、总结


**平时工作中做实验较多,传统的安装太浪费时间,闲暇之余写了一个脚本,如果有错误,请自行调整。

相关推荐