Files
happy-life-star/mysql-reinit-with-backup.sh
T
peanut 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
2025-07-22 20:29:29 +08:00

171 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
# MySQL重新初始化并恢复数据脚本
# 作者: emotion-museum
# 日期: 2025-07-21
REMOTE_HOST="root@47.111.10.27"
echo "🚀 开始MySQL重新初始化..."
# 创建远程脚本
cat > /tmp/mysql_reinit_remote.sh << 'EOF'
#!/bin/bash
set -e
echo "📦 MySQL重新初始化开始..."
# 1. 停止MySQL进程
echo "🛑 停止MySQL进程..."
pkill -f mysqld 2>/dev/null || true
sleep 5
# 2. 备份现有数据
echo "📦 备份现有数据..."
BACKUP_DIR="/data/backups/mysql_reinit_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r /data/programs/mysql "$BACKUP_DIR/"
echo "✅ 数据已备份到: $BACKUP_DIR"
# 3. 清理数据目录但保留数据库文件
echo "🧹 清理数据目录..."
cd /data/programs/mysql
# 保留数据库目录,删除系统文件
rm -f auto.cnf ib_logfile* ibdata* mysql.ibd undo_* binlog.* *.pid *.err 2>/dev/null || true
rm -rf mysql performance_schema information_schema sys 2>/dev/null || true
echo "✅ 系统文件清理完成,数据库文件已保留"
# 4. 重新初始化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
# 5. 启动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 20
# 检查进程
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未监听"
fi
# 6. 设置密码和权限
echo "🔐 设置密码和权限..."
sleep 10
/usr/local/mysql/bin/mysql -u root << 'EOSQL'
-- 设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#';
-- 创建远程root用户
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 创建emotion用户
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!';
FLUSH PRIVILEGES;
EOSQL
echo "✅ 密码和权限设置完成"
# 7. 创建emotion_museum数据库
echo "🗄️ 创建emotion_museum数据库..."
/usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' << 'EOSQL'
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 "✅ emotion_museum数据库创建完成"
# 8. 恢复数据(如果有SQL备份)
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 "✅ 数据恢复完成"
else
echo "⚠️ 没有找到SQL备份文件,需要手动恢复数据"
fi
# 9. 验证安装
echo "🔍 验证安装..."
if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SHOW DATABASES;' > /dev/null 2>&1; then
echo "✅ MySQL连接验证成功"
/usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SHOW DATABASES;'
# 检查emotion_museum数据库
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 "❌ MySQL连接验证失败"
exit 1
fi
echo "🎉 MySQL重新初始化完成!"
echo ""
echo "📋 连接信息:"
echo " 主机: localhost"
echo " 端口: 3306"
echo " root密码: EmotionMuseum2025*#"
echo " emotion密码: EmotionDB2024!"
echo " 数据库: emotion_museum"
echo ""
echo "📋 备份位置:"
echo " 数据备份: $BACKUP_DIR"
echo ""
echo "🔧 下一步:"
echo " 1. 检查数据完整性"
echo " 2. 如需要,手动导入数据"
echo " 3. 重启微服务"
EOF
# 上传并执行脚本
echo "📤 上传重新初始化脚本到服务器..."
scp /tmp/mysql_reinit_remote.sh $REMOTE_HOST:/tmp/
echo "🚀 在服务器上执行重新初始化..."
ssh $REMOTE_HOST "chmod +x /tmp/mysql_reinit_remote.sh && /tmp/mysql_reinit_remote.sh"
echo "✅ MySQL重新初始化脚本执行完成!"