#!/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}"