115 lines
3.9 KiB
Bash
115 lines
3.9 KiB
Bash
#!/bin/bash
|
||
|
||
# 检测系统类型
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
OS=$ID
|
||
OS_VERSION=$VERSION_ID
|
||
elif type lsb_release >/dev/null 2>&1; then
|
||
OS=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
|
||
OS_VERSION=$(lsb_release -sr)
|
||
elif [ -f /etc/redhat-release ]; then
|
||
OS=centos
|
||
OS_VERSION=$(grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release)
|
||
else
|
||
echo "不支持的操作系统"
|
||
exit 1
|
||
fi
|
||
|
||
# 用户输入MySQL端口和密码
|
||
read -p "请输入MySQL端口(默认3306):" MYSQL_PORT
|
||
MYSQL_PORT=${MYSQL_PORT:-3306}
|
||
|
||
read -s -p "请输入MySQL root用户密码:" MYSQL_ROOT_PASSWORD
|
||
echo
|
||
|
||
# 用户选择是否使用国内源
|
||
read -p "是否使用国内镜像源以加快下载速度?(y/n,默认y):" USE_CHINA_MIRROR
|
||
USE_CHINA_MIRROR=${USE_CHINA_MIRROR:-y}
|
||
|
||
# 配置国内镜像源
|
||
configure_china_mirror() {
|
||
case $OS in
|
||
ubuntu|debian)
|
||
echo "正在配置阿里云镜像源..."
|
||
sudo sed -i 's|http://archive.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
|
||
sudo sed -i 's|http://security.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
|
||
;;
|
||
centos|rocky)
|
||
echo "正在配置阿里云镜像源..."
|
||
sudo sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-*
|
||
sudo sed -i 's|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g' /etc/yum.repos.d/CentOS-*
|
||
;;
|
||
*)
|
||
echo "不支持的操作系统,无法配置国内镜像源"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 安装MySQL 8
|
||
install_mysql() {
|
||
case $OS in
|
||
ubuntu|debian)
|
||
echo "正在更新软件包列表..."
|
||
sudo apt-get update
|
||
sudo apt-get install -y wget
|
||
|
||
echo "正在下载MySQL APT配置..."
|
||
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
|
||
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
|
||
|
||
echo "正在安装MySQL服务器..."
|
||
sudo apt-get update
|
||
sudo apt-get install -y mysql-server
|
||
|
||
echo "正在配置MySQL..."
|
||
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';"
|
||
sudo mysql -e "FLUSH PRIVILEGES;"
|
||
;;
|
||
centos|rocky)
|
||
echo "正在安装MySQL YUM仓库..."
|
||
sudo yum install -y wget
|
||
sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el${OS_VERSION:0:1}-3.noarch.rpm
|
||
|
||
echo "正在安装MySQL服务器..."
|
||
sudo yum install -y mysql-server
|
||
|
||
echo "正在启动MySQL服务..."
|
||
sudo systemctl start mysqld
|
||
sudo systemctl enable mysqld
|
||
|
||
echo "正在配置MySQL..."
|
||
TEMP_PASSWORD=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
|
||
mysql -uroot -p${TEMP_PASSWORD} --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';"
|
||
mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
|
||
;;
|
||
*)
|
||
echo "不支持的操作系统"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
# 修改MySQL配置文件以使用用户指定的端口
|
||
echo "正在修改MySQL端口为 ${MYSQL_PORT}..."
|
||
sudo sed -i "s/^port\s*=\s*[0-9]*/port = ${MYSQL_PORT}/" /etc/my.cnf || sudo sed -i "s/^port\s*=\s*[0-9]*/port = ${MYSQL_PORT}/" /etc/mysql/my.cnf
|
||
|
||
# 重启MySQL服务以应用更改
|
||
echo "正在重启MySQL服务..."
|
||
if [ "$OS" == "centos" ] || [ "$OS" == "rocky" ]; then
|
||
sudo systemctl restart mysqld
|
||
else
|
||
sudo systemctl restart mysql
|
||
fi
|
||
}
|
||
|
||
# 配置国内镜像源
|
||
if [[ $USE_CHINA_MIRROR =~ ^[Yy]$ ]]; then
|
||
configure_china_mirror
|
||
fi
|
||
|
||
# 执行安装
|
||
install_mysql
|
||
|
||
echo "MySQL 8 安装完成!"
|
||
echo "MySQL root 密码: ${MYSQL_ROOT_PASSWORD}"
|
||
echo "MySQL 端口: ${MYSQL_PORT}" |