#!/bin/bash # MySQL完整安装和数据恢复脚本 # 作者: emotion-museum # 日期: 2025-07-21 REMOTE_HOST="root@47.111.10.27" echo "🚀 开始MySQL完整安装和数据恢复..." # 创建远程执行脚本 cat > /tmp/complete_mysql_setup.sh << 'EOF' #!/bin/bash set -e echo "📦 MySQL完整安装开始..." # 1. 停止所有MySQL进程 echo "🛑 停止MySQL进程..." pkill -f mysqld 2>/dev/null || true sleep 5 # 2. 完全清空数据目录 echo "🧹 清空数据目录..." rm -rf /data/programs/mysql/* rm -rf /data/programs/mysql/.* 2>/dev/null || true # 3. 重新初始化MySQL echo "🔧 初始化MySQL..." /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/programs/mysql if [ $? -eq 0 ]; then echo "✅ MySQL初始化成功" else echo "❌ MySQL初始化失败" exit 1 fi # 4. 启动MySQL echo "🚀 启动MySQL..." nohup /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql > /var/log/mysqld.log 2>&1 & # 等待启动 echo "⏳ 等待MySQL启动..." sleep 25 # 检查进程 if pgrep -f mysqld > /dev/null; then echo "✅ MySQL进程启动成功" else echo "❌ MySQL进程启动失败" tail -20 /var/log/mysqld.log exit 1 fi # 检查端口 if netstat -tlnp | grep :3306 > /dev/null; then echo "✅ MySQL端口3306正在监听" else echo "⚠️ MySQL端口3306未监听,继续等待..." sleep 10 fi # 5. 设置密码和权限 echo "🔐 设置密码和权限..." sleep 5 /usr/local/mysql/bin/mysql -u root << 'EOSQL' ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#'; CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; CREATE USER IF NOT EXISTS 'emotion'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EmotionDB2024!'; CREATE USER IF NOT EXISTS 'emotion'@'%' IDENTIFIED WITH mysql_native_password BY 'EmotionDB2024!'; CREATE DATABASE IF NOT EXISTS emotion_museum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON emotion_museum.* TO 'emotion'@'localhost'; GRANT ALL PRIVILEGES ON emotion_museum.* TO 'emotion'@'%'; FLUSH PRIVILEGES; EOSQL echo "✅ 密码和权限设置完成" # 6. 验证连接 echo "🔍 验证MySQL连接..." if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SELECT VERSION();' > /dev/null 2>&1; then echo "✅ MySQL连接验证成功" /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SHOW DATABASES;' else echo "❌ MySQL连接验证失败" exit 1 fi # 7. 恢复数据 echo "📤 恢复数据..." LATEST_SQL_BACKUP=$(ls -t /data/backups/mysql_*/all_databases.sql 2>/dev/null | head -1) if [ -n "$LATEST_SQL_BACKUP" ] && [ -f "$LATEST_SQL_BACKUP" ]; then echo "发现SQL备份文件: $LATEST_SQL_BACKUP" echo "正在恢复数据库..." /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' < "$LATEST_SQL_BACKUP" echo "✅ 数据恢复完成" # 验证数据 echo "🔍 验证数据..." if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SHOW TABLES;' > /dev/null 2>&1; then echo "✅ emotion_museum数据库存在" TABLE_COUNT=$(/usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SHOW TABLES;' | wc -l) echo "数据库表数量: $((TABLE_COUNT - 1))" # 检查用户表 if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SELECT COUNT(*) FROM user;' > /dev/null 2>&1; then USER_COUNT=$(/usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SELECT COUNT(*) FROM user;' | tail -1) echo "用户数量: $USER_COUNT" fi else echo "⚠️ emotion_museum数据库验证失败" fi else echo "⚠️ 没有找到SQL备份文件" fi # 8. 最终状态检查 echo "📊 最终状态检查..." echo "==================" # 检查进程 echo -n "MySQL进程: " if pgrep -f mysqld > /dev/null; then echo "✅ 运行中" else echo "❌ 未运行" fi # 检查端口 echo -n "MySQL端口(3306): " if netstat -tlnp | grep :3306 > /dev/null; then echo "✅ 监听中" else echo "❌ 未监听" fi # 检查连接 echo -n "MySQL连接: " if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SELECT 1;' > /dev/null 2>&1; then echo "✅ 正常" else echo "❌ 失败" fi # 检查emotion用户连接 echo -n "emotion用户连接: " if /usr/local/mysql/bin/mysql -u emotion -p'EmotionDB2024!' -e 'USE emotion_museum; SELECT 1;' > /dev/null 2>&1; then echo "✅ 正常" else echo "❌ 失败" fi echo "" echo "🎉 MySQL安装和数据恢复完成!" echo "" echo "📋 连接信息:" echo " 主机: localhost 或 47.111.10.27" echo " 端口: 3306" echo " root密码: EmotionMuseum2025*#" echo " emotion密码: EmotionDB2024!" echo " 数据库: emotion_museum" echo "" echo "🔧 下一步:" echo " 1. 重启微服务测试数据库连接" echo " 2. 验证应用功能正常" EOF # 上传并执行脚本 echo "📤 上传完整安装脚本到服务器..." scp /tmp/complete_mysql_setup.sh $REMOTE_HOST:/tmp/ echo "🚀 在服务器上执行完整安装..." ssh $REMOTE_HOST "chmod +x /tmp/complete_mysql_setup.sh && /tmp/complete_mysql_setup.sh" echo "" echo "✅ MySQL完整安装脚本执行完成!" echo "" echo "📋 如果安装成功,你现在可以:" echo " 1. 测试MySQL连接: mysql -u root -p'EmotionMuseum2025*#' -h 47.111.10.27" echo " 2. 重启微服务: cd backend && ./deploy-remote.sh" echo " 3. 测试前端访问: http://47.111.10.27/emotion/happy/"