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}" |