暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql一键安装脚本分享

原创 王旭 2024-12-19
403

 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、总结

**平时工作中做实验较多,传统的安装太浪费时间,闲暇之余写了一个脚本,如果有错误,请自行调整。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论