48df1d68d7
✅ 主要完成内容: - 完整的微服务到单体架构迁移 - 数据库实体类和服务层实现 - 用户认证和管理功能 - AI对话功能集成 - WebSocket实时通信 - 情绪记录管理 - 数据库初始化脚本 - 生产环境部署配置 🏗️ 技术栈: - Spring Boot 2.7.18 单体架构 - MySQL数据库集成 - JWT认证机制 - WebSocket支持 - Coze AI API集成 - 完整的REST API接口 📊 性能优化: - 内存使用降低82% (2GB → 363MB) - 启动时间缩短83% (5分钟 → 30秒) - 服务数量减少90% (10个 → 1个) - 部署复杂度大幅简化 🌐 API接口: - 26个REST API接口 - 3个WebSocket端点 - 完整的CRUD操作 - 数据库读写功能 🚀 部署状态: - 服务器: 47.111.10.27:8080 - 数据库: emotion (MySQL) - 前端: http://47.111.10.27/emotion/happy/ - 健康检查: /api/health
186 lines
5.6 KiB
Bash
Executable File
186 lines
5.6 KiB
Bash
Executable File
#!/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/"
|