#!/bin/bash

# 定义日志输出颜色
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
RESET='\033[0m'

# 日志输出函数
log() {
    local level=$1
    local message=$2
    case $level in
        "INFO")
            echo -e "${BLUE}[INFO]${RESET} $message"
            ;;
        "WARNING")
            echo -e "${YELLOW}[WARNING]${RESET} $message"
            ;;
        "ERROR")
            echo -e "${RED}[ERROR]${RESET} $message"
            ;;
        "SUCCESS")
            echo -e "${GREEN}[SUCCESS]${RESET} $message"
            ;;
    esac
}

# 检查并卸载旧版本的 MySQL 或 MariaDB
log INFO "检查系统中是否存在旧版本的 MySQL 或 MariaDB..."
old_packages=$(rpm -qa | grep -E 'mysql|mariadb')
if [ -n "$old_packages" ]; then
    log WARNING "发现旧版本的 MySQL 或 MariaDB 包，开始卸载..."
    if sudo yum remove -y $old_packages; then
        log SUCCESS "旧版本的 MySQL 或 MariaDB 包已成功卸载。"
    else
        log ERROR "卸载旧版本的 MySQL 或 MariaDB 包时出错。"
        exit 1
    fi
else
    log INFO "未发现旧版本的 MySQL 或 MariaDB 包。"
fi

# 安装 MySQL Yum 仓库配置文件
log INFO "安装 MySQL Yum 仓库配置文件..."
if sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm; then
    log SUCCESS "MySQL Yum 仓库配置文件安装成功。"
else
    log ERROR "安装 MySQL Yum 仓库配置文件时出错。"
    exit 1
fi

# 手动下载并导入 MySQL GPG 密钥
log INFO "导入 MySQL GPG 密钥..."
gpg_key_url="https://repo.mysql.com/RPM-GPG-KEY-mysql-2023"
gpg_key_file="/tmp/RPM-GPG-KEY-mysql-2023"
if curl -sS -o "$gpg_key_file" "$gpg_key_url"; then
    if sudo rpm --import "$gpg_key_file"; then
        log SUCCESS "MySQL GPG 密钥导入成功。"
        rm "$gpg_key_file"
    else
        log ERROR "导入 MySQL GPG 密钥时出错。"
        rm "$gpg_key_file"
        exit 1
    fi
else
    log ERROR "下载 MySQL GPG 密钥时出错。"
    exit 1
fi

# 清理并重建 Yum 缓存
log INFO "清理并重建 Yum 缓存..."
if sudo yum clean all && sudo yum makecache; then
    log SUCCESS "Yum 缓存清理并重建成功。"
else
    log ERROR "清理或重建 Yum 缓存时出错。"
    exit 1
fi

# 安装 MySQL 8 社区服务器
log INFO "开始安装 MySQL 8 社区服务器..."
if sudo yum install -y mysql-community-server; then
    log SUCCESS "MySQL 8 社区服务器安装成功。"
else
    log ERROR "安装 MySQL 8 社区服务器时出错。"
    exit 1
fi

# 启动 MySQL 服务并设置开机自启
log INFO "启动 MySQL 服务并设置开机自启..."
if sudo systemctl start mysqld && sudo systemctl enable mysqld; then
    log SUCCESS "MySQL 服务已启动并设置为开机自启。"
else
    log ERROR "启动 MySQL 服务或设置开机自启时出错。"
    exit 1
fi

# 获取临时 root 密码
log INFO "获取 MySQL root 用户的临时密码..."
temp_password=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
if [ -n "$temp_password" ]; then
    log INFO "MySQL root 用户的临时密码为: $temp_password"
    log INFO "请使用该临时密码登录 MySQL 并修改密码。"
else
    log ERROR "未能获取到 MySQL root 用户的临时密码，请检查 /var/log/mysqld.log 文件。"
fi    