Linux Shell 实现一键部署Msql8
mysql前言
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
mysql 下载
Mysql下载 | Mysql 管理 |
download | download |
Linux 各系统下载使用参考
Red Hat | Rocky Linux | Oracle Linux |
AlmaLinux |
ubuntu | suselinux | esxi | RHEL标准安装 | 系统安装参考 | YUM参考 |
MobaXterm 远程连接工具 |
Red Hat Enterprise 9.0 文档 | Kickstart 生成器 | |||||
download | download | download | download | download | download | download | 参考 | 参考 | 配置参考 | download | 参考 | Kickstart | |||||
版本兼容性 |
安装 Mysql 8
-
创建安装自动化脚本
- 安装位置 /usr/local/mysql
- Redhat 9 functions使用需要执行安装yum install initscripts -y
- mysql用户名密码 root/Ciasm@123
- curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXX' #更改自己的企业微信机器人地址
vim /mysql8_install.sh
#!/bin/sh
# -*- coding: utf-8 -*-
# Author: CIASM
# Date: 2023/04/01source /etc/rc.d/init.d/functions#Define data path variables
data_downloads=/data/downloads#Define MYSQL path variables
echo "Define MYSQL path variables"
sleep 3
MYSQL_URL=https://cdn.mysql.com/archives/mysql-8.0/
MYSQL_FILE=mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz
MYSQL_PREFIX=/usr/local/mysql
MYSQL_glibc=mysql-8.0.31-linux-glibc2.12-x86_64function mysql_package (){
echo "mysql package"
sleep 3
timedatectl set-timezone Asia/Shanghai
yum install epel-release -y
yum remove postfix mariadb-libs -y
yum install -y wget protobuf-lite libaio numactl-libs numactl policycoreutils-python-utils net-tools libncurses*
}function install_mysql (){
echo "install mysql "
sleep 3
if [ ! -d ${MYSQL_PREFIX} ];then
mysql_package
mkdir -p $data_downloads
wget -N -P $data_downloads ${MYSQL_URL}${MYSQL_FILE}
tar -xf $data_downloads/${MYSQL_FILE} -C $data_downloadsif [ $? -eq 0 ];then mv $data_downloads/$MYSQL_glibc /usr/local/mysqlmysql_configaction "The MYSQL Install Sussess..." /bin/trueelseaction "The MYSQL Install Failed..." /bin/falseexit 1fielseecho -e "\\033[31mThe MYSQL already Install...\\033[0m"
fi}function mysql_config (){
echo "mysql config"
sleep 3
useradd mysql -r -s /sbin/nologin
mkdir -p /data/mysql_data3306
chown root.mysql -R /usr/local/mysqlcat >>/etc/my.cnf<<EOF
[Client]
port=3306
default-character-set=utf8mb4
socket = /data/mysql_data3306/mysql.sock[mysqld]
datadir = /data/mysql_data3306
socket = /data/mysql_data3306/mysql.sock
log-error = /var/log/mysql_3306.log
port = 3306
max_connections=200
character_set_server=utf8mb4
collation-server=utf8mb4_unicode_ci
character-set-client-handshake=FALSE
default-storage-engine=INNODB
default_authentication_plugin=mysql_native_password
default-time_zone='+8:00'
lower_case_table_names=1
log_timestamps = SYSTEM
log_bin_trust_function_creators = on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[mysql]
default-character-set=utf8mb4
EOF#Creating log output
echo "Creating log output"
sleep 3
touch /var/log/mysql_3306.log && chown -R mysql:mysql /var/log && chmod 755 /var/log/mysql*echo "initialized database"
sleep 3
#Initialize each instance: After initialization, the password will be generated in the log. Remember to save it and use it later.
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3306 --log_error=/var/log/mysql_3306.log#Open SSL connections for each instance
/usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3306 --log_error=/var/log/mysql_3306.logecho "Configure the database startup service"
sleep 3
#Copying server the Startup Script
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld#start mysql
echo "start mysql"
sleep 3
service mysqld start
chkconfig --add mysqld
chkconfig mysqld on#Mysql environment variable
echo "Mysql environment variable"
sleep 3
ln -s /usr/local/mysql/bin/* /usr/bin/echo "limits config"
cat >>/etc/security/limits.conf<<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF#system Maximum config
echo "system Maximum number of connections"
echo "fs.file-max=65535" >> /etc/sysctl.conf#Resetting the Default Password
echo "mysql initialize default password"
sleep 3
mysql -S /data/mysql_data3306/mysql.sock -p`cat /var/log/mysql_3306.log | grep 'password is generated' | awk '{print $NF}'` --connect-expired-password -e "alter user root@localhost identified by 'Ciasm@123'; FLUSH PRIVILEGES;"#cofig Mysql alter database
mysql -uroot -pCiasm@123 -e "use mysql; update user set host = '%' where user = 'root'; FLUSH PRIVILEGES; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Ciasm@123';"#firewall config
echo "config"
sleep 3
firewall-cmd --zone=public --add-port=3306/tcp --permanent && firewall-cmd --reload #Delete mysql the downloaded installation package
echo "Delete mysql the downloaded installation package"
sleep 3
rm -rf $data_downloads/MYSQL_FILE
}function Deployment_completion_notification (){host_ID=`dmidecode -s system-serial-number | sed -r 's/\\s+//g'`host_IP=`ifconfig -a | grep inet | grep -v '127.0.0.1' | awk '{ print $2}' | awk 'NR==1'`memory_Size=`dmidecode -t memory | grep Size | grep -v No | awk '{sum+=$2} END {printf "%.0fG\\n",sum/1^C4}'`CPU_Model=`cat /proc/cpuinfo | grep 'model name' | awk '{print $6}' | uniq`Disk_size=`fdisk -l | grep "sda:" | awk '{print $3$4}'`redhat_version=`cat /etc/redhat-release | grep "release" | awk '{print $6}'`redhat_core=`cat /proc/version | grep "version" | awk '{print $3}'`mysqld_server=`systemctl status mysqld | grep "Active" | awk '{print $2}'`mysql_version=`mysql -V | grep "Ver" | awk '{print $3}'`curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXX' \\-H 'Content-Type: application/json' \\-d '{"msgtype": "markdown","markdown": {"content": " **system check** <font color=\\"info\\"> complete </font> \\n> **Host IP Address** \\n[http://'$host_IP'](http://'$host_IP') \\n> **Hardware information** \\nhostSN:<font color=\\"info\\"> '$host_ID' </font> \\nCPU_Model:<font color=\\"info\\"> '$CPU_Model' </font> \\nmemory_Size:<font color=\\"info\\"> '$memory_Size' </font> \\nDisk_size:<font color=\\"info\\"> '$Disk_size' </font> \\nSystem_version:<font color=\\"info\\"> '$redhat_version' </font> \\nsystem_core:<font color=\\"info\\"> '$redhat_core' </font> \\n> **mysql install** \\nmysql_version:<font color=\\"info\\"> '$mysqld_version' </font> \\nmysql_server:<font color=\\"info\\"> '$mysqld_server' </font> \\n",}}'
}function main (){
install_mysql
Deployment_completion_notification
}main
执行一键安装mysql
sh /mysql8_install.sh