ubuntu 一键安装mysql8脚本

作者: adm 分类: mysql 发布时间: 2025-04-04

#!/bin/bash

set -e

# 颜色输出
green() { echo -e “\033[32m$1\033[0m”; }
yellow() { echo -e “\033[33m$1\033[0m”; }
red() { echo -e “\033[31m$1\033[0m”; }
blue() { echo -e “\033[34m$1\033[0m”; }

# 检查MySQL是否已安装
check_mysql_installed() {
if command -v mysql >/dev/null 2>&1; then
return 0
fi

if [ -f /etc/init.d/mysql ] || { command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files | grep -q mysql; }; then
return 0
fi

if pgrep mysqld >/dev/null 2>&1; then
return 0
fi

return 1
}

# 显示MySQL状态和数据信息
show_mysql_status() {
echo
blue “=====================================”
blue ” MySQL 状态检查”
blue “=====================================”

if command -v mysql >/dev/null 2>&1; then
green “MySQL客户端: 已安装”
mysql –version 2>/dev/null || mysql -V 2>/dev/null
else
yellow “MySQL客户端: 未安装”
fi

# 检查数据目录
if [ -d “/var/lib/mysql” ]; then
local db_size=$(du -sh /var/lib/mysql 2>/dev/null | cut -f1)
local db_count=$(find /var/lib/mysql -maxdepth 1 -type d -name ‘*’ | wc -l)
red “⚠ 发现MySQL数据目录: /var/lib/mysql”
red “⚠ 数据目录大小: $db_size”
red “⚠ 数据库数量: $((db_count – 1))”
fi

blue “=====================================”
echo
}

# 备份数据库(可选)
backup_databases() {
echo
yellow “建议在重新安装前备份数据库!”
printf “是否要备份数据库?(y/N): ”
read backup_choice

if [ “$backup_choice” = “y” ] || [ “$backup_choice” = “Y” ]; then
if command -v mysqldump >/dev/null 2>&1; then
local backup_dir=”/tmp/mysql_backup_$(date +%Y%m%d_%H%M%S)”
mkdir -p “$backup_dir”

yellow “正在备份数据库到: $backup_dir”

# 尝试备份所有数据库
if sudo mysqldump –all-databases > “$backup_dir/all_databases.sql” 2>/dev/null; then
green “✓ 数据库备份完成: $backup_dir/all_databases.sql”
else
red “✗ 数据库备份失败,可能无法连接或没有权限”
fi
else
red “✗ mysqldump 不可用,无法备份”
fi
else
yellow “跳过数据库备份”
fi
}

# 清理旧版本MySQL
clean_old_mysql() {
red “开始清理旧版本MySQL…”
red “⚠ 警告:这将删除所有MySQL数据和配置!”

# 显示将被删除的内容
echo
red “将被删除的内容:”
red ” – 所有数据库数据 (/var/lib/mysql/)”
red ” – 配置文件 (/etc/mysql/)”
red ” – 日志文件 (/var/log/mysql*)”
red ” – 所有用户数据和权限”
echo

# 最终确认
printf “确定要删除所有MySQL数据并重新安装吗?(输入 ‘DELETE’ 确认): ”
read final_confirmation

if [ “$final_confirmation” != “DELETE” ]; then
green “安装已取消,数据得以保留”
exit 0
fi

yellow “开始清理…”

# 停止MySQL服务
if command -v systemctl >/dev/null 2>&1 && systemctl list-unit-files | grep -q mysql; then
sudo systemctl stop mysql 2>/dev/null || true
sudo systemctl disable mysql 2>/dev/null || true
elif [ -f /etc/init.d/mysql ]; then
sudo /etc/init.d/mysql stop 2>/dev/null || true
fi

# 结束MySQL进程
sudo pkill -9 mysqld 2>/dev/null || true
sleep 2

# 卸载MySQL包
yellow “卸载MySQL软件包…”
sudo apt remove –purge mysql* mariadb* -y 2>/dev/null || true
sudo apt autoremove -y
sudo apt autoclean

# 删除MySQL文件和配置
yellow “删除MySQL配置和数据文件…”
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql* /var/run/mysqld

green “旧版本MySQL清理完成”
echo
}

# 安装MySQL
install_mysql() {
green “开始安装MySQL…”

yellow “更新软件包列表…”
sudo apt update

yellow “安装MySQL服务器…”
if sudo apt install mysql-server -y; then
green “MySQL安装成功”
else
yellow “尝试使用官方源安装…”
sudo apt install mysql-server-8.0 mysql-client-8.0 -y
fi

# 启动MySQL服务
yellow “启动MySQL服务…”
if command -v systemctl >/dev/null 2>&1; then
sudo systemctl start mysql
sudo systemctl enable mysql
else
sudo service mysql start
fi

sleep 3
}

# 验证安装
verify_installation() {
echo
green “验证MySQL安装…”

if command -v mysql >/dev/null 2>&1; then
green “✓ MySQL客户端安装成功”
green ” 版本: $(mysql –version 2>/dev/null || mysql -V 2>/dev/null)”
else
red “✗ MySQL客户端安装失败”
return 1
fi

return 0
}

# 等待用户按键(兼容版本)
wait_for_key() {
yellow “按 Enter 键继续或 Ctrl+C 取消…”
read dummy
}

# 主安装流程
main() {
clear
green “=====================================”
green ” MySQL 安装管理脚本”
green ” (数据安全警告版本)”
green “=====================================”
echo

# 检查MySQL是否已安装
if check_mysql_installed; then
red “⚠ 检测到系统已安装 MySQL!”
show_mysql_status

printf “是否重新安装MySQL?(y/N): ”
read reinstall_choice

if [ “$reinstall_choice” = “y” ] || [ “$reinstall_choice” = “Y” ]; then
yellow “您选择了重新安装MySQL”

# 提供备份选项
backup_databases

# 最终确认
echo
red “==================================================”
red ” ⚠ 警告 ⚠”
red “重新安装将永久删除:”
red ” – 所有数据库和数据表”
red ” – 所有用户账户和权限”
red ” – 所有配置和日志”
red “此操作不可撤销!”
red “==================================================”
echo

printf “确定要继续重新安装吗?(输入 ‘CONFIRM’ 继续): ”
read final_confirm

if [ “$final_confirm” != “CONFIRM” ]; then
green “安装已取消,所有数据得以保留”
exit 0
fi

green “开始重新安装MySQL…”
clean_old_mysql
else
green “已退出安装,MySQL保持原状”
exit 0
fi
else
green “未检测到已安装的MySQL,开始全新安装…”
fi

# 等待用户确认(修复了 -n 选项问题)
wait_for_key

# 安装MySQL
install_mysql

# 验证安装
if verify_installation; then
green “MySQL安装完成!”
echo
yellow “注意:如果是重新安装,所有旧数据已被清除”
yellow “建议运行: sudo mysql_secure_installation 进行安全配置”
else
red “MySQL安装过程中出现问题,请检查日志”
exit 1
fi
}

# 执行主函数
main

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!