180 lines
5.2 KiB
Bash
Executable File
180 lines
5.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 重置数据库脚本 - 清除旧数据,使用新的data.sql初始化
|
|
# 使用方法:./reset-database.sh [backup_first]
|
|
|
|
set -e
|
|
|
|
# 兼容CentOS - 检查终端颜色支持
|
|
if [ -t 1 ] && [ "${TERM:-}" != "" ] && tput colors >/dev/null 2>&1; then
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
else #CentOS兼容:无颜色支持时使用空值
|
|
RED=''
|
|
GREEN=''
|
|
YELLOW=''
|
|
BLUE=''
|
|
NC=''
|
|
fi
|
|
|
|
echo -e "${BLUE}🔄 LJWX数据库重置工具${NC}"
|
|
echo "=============================================="
|
|
|
|
# 配置变量
|
|
MYSQL_CONTAINER="ljwx-mysql"
|
|
MYSQL_VOLUME="client-deployment_mysql_data"
|
|
BACKUP_DIR="./backups/reset"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
|
|
# 检查是否需要备份
|
|
BACKUP_FIRST=${1:-"yes"}
|
|
|
|
echo -e "${YELLOW}⚠️ 警告: 此操作将删除所有现有数据库数据!${NC}"
|
|
echo ""
|
|
echo "当前配置:"
|
|
echo "- MySQL容器: $MYSQL_CONTAINER"
|
|
echo "- 数据卷: $MYSQL_VOLUME"
|
|
echo "- 备份目录: $BACKUP_DIR"
|
|
echo ""
|
|
|
|
if [ "$BACKUP_FIRST" = "yes" ]; then
|
|
echo -e "${YELLOW}📦 备份选项: 启用 (推荐)${NC}"
|
|
else
|
|
echo -e "${RED}📦 备份选项: 跳过${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "确认继续重置数据库? (y/N): " confirm
|
|
if [[ $confirm != [yY] ]]; then
|
|
echo "操作已取消"
|
|
exit 0
|
|
fi
|
|
|
|
# 创建备份目录
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# 1. 备份现有数据(如果需要)
|
|
if [ "$BACKUP_FIRST" = "yes" ]; then
|
|
echo ""
|
|
echo -e "${BLUE}📦 步骤1: 备份现有数据${NC}"
|
|
echo "创建备份: $BACKUP_DIR/pre_reset_backup_$TIMESTAMP.sql.gz"
|
|
|
|
if docker ps | grep $MYSQL_CONTAINER > /dev/null; then
|
|
docker exec $MYSQL_CONTAINER mysqldump \
|
|
-u root -p123456 \
|
|
--single-transaction \
|
|
--routines \
|
|
--triggers \
|
|
--events \
|
|
--hex-blob \
|
|
--databases lj-06 | gzip > "$BACKUP_DIR/pre_reset_backup_$TIMESTAMP.sql.gz"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✅ 数据备份完成${NC}"
|
|
else
|
|
echo -e "${RED}❌ 数据备份失败,继续执行重置...${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW}⚠️ MySQL容器未运行,跳过备份${NC}"
|
|
fi
|
|
fi
|
|
|
|
# 2. 停止服务
|
|
echo ""
|
|
echo -e "${BLUE}🛑 步骤2: 停止相关服务${NC}"
|
|
docker-compose down
|
|
|
|
# 3. 删除数据卷
|
|
echo ""
|
|
echo -e "${BLUE}🗑️ 步骤3: 删除旧数据卷${NC}"
|
|
if docker volume ls | grep $MYSQL_VOLUME > /dev/null; then
|
|
docker volume rm $MYSQL_VOLUME
|
|
echo -e "${GREEN}✅ 数据卷已删除${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ 数据卷不存在${NC}"
|
|
fi
|
|
|
|
# 4. 清理可能存在的旧容器
|
|
echo ""
|
|
echo -e "${BLUE}🧹 步骤4: 清理旧容器${NC}"
|
|
if docker ps -a | grep $MYSQL_CONTAINER > /dev/null; then
|
|
docker rm -f $MYSQL_CONTAINER 2>/dev/null || true
|
|
echo -e "${GREEN}✅ 旧容器已清理${NC}"
|
|
fi
|
|
|
|
# 5. 重新启动MySQL服务
|
|
echo ""
|
|
echo -e "${BLUE}🚀 步骤5: 启动MySQL服务(使用新数据)${NC}"
|
|
docker-compose up -d mysql
|
|
|
|
# 6. 等待MySQL初始化完成
|
|
echo ""
|
|
echo -e "${BLUE}⏳ 步骤6: 等待MySQL初始化...${NC}"
|
|
echo "正在等待MySQL服务启动并初始化新数据..."
|
|
|
|
for i in {1..60}; do
|
|
if docker logs $MYSQL_CONTAINER 2>&1 | grep -q "ready for connections"; then
|
|
echo -e "${GREEN}✅ MySQL服务启动完成${NC}"
|
|
break
|
|
fi
|
|
if [ $i -eq 60 ]; then
|
|
echo -e "${RED}❌ MySQL启动超时${NC}"
|
|
echo "请检查日志: docker logs $MYSQL_CONTAINER"
|
|
exit 1
|
|
fi
|
|
echo -n "."
|
|
sleep 2
|
|
done
|
|
|
|
# 7. 验证新数据
|
|
echo ""
|
|
echo -e "${BLUE}🔍 步骤7: 验证新数据库${NC}"
|
|
sleep 5
|
|
|
|
# 检查数据库是否包含新数据
|
|
table_count=$(docker exec $MYSQL_CONTAINER mysql -u root -p123456 -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='lj-06';" 2>/dev/null | tail -1)
|
|
|
|
if [ ! -z "$table_count" ] && [ "$table_count" -gt 0 ]; then
|
|
echo -e "${GREEN}✅ 数据库初始化成功${NC}"
|
|
echo "📊 检测到 $table_count 个数据表"
|
|
|
|
# 显示一些关键表的记录数
|
|
echo ""
|
|
echo "关键表记录统计:"
|
|
docker exec $MYSQL_CONTAINER mysql -u root -p123456 lj-06 -e "
|
|
SELECT 'sys_user' as table_name, COUNT(*) as record_count FROM sys_user
|
|
UNION ALL
|
|
SELECT 'sys_dict_data', COUNT(*) FROM sys_dict_data
|
|
UNION ALL
|
|
SELECT 'sys_org_units', COUNT(*) FROM sys_org_units
|
|
UNION ALL
|
|
SELECT 't_interface', COUNT(*) FROM t_interface;" 2>/dev/null || echo "📊 部分表可能还在初始化中"
|
|
|
|
else
|
|
echo -e "${RED}❌ 数据库初始化可能失败${NC}"
|
|
echo "请检查MySQL日志:"
|
|
docker logs $MYSQL_CONTAINER --tail 20
|
|
fi
|
|
|
|
# 8. 启动其他服务
|
|
echo ""
|
|
echo -e "${BLUE}🚀 步骤8: 启动所有服务${NC}"
|
|
docker-compose up -d
|
|
|
|
echo ""
|
|
echo -e "${GREEN}🎉 数据库重置完成!${NC}"
|
|
echo ""
|
|
echo "📋 操作摘要:"
|
|
echo "- 旧数据已备份到: $BACKUP_DIR/pre_reset_backup_$TIMESTAMP.sql.gz"
|
|
echo "- 数据卷已重建: $MYSQL_VOLUME"
|
|
echo "- 新数据已初始化: data.sql"
|
|
echo ""
|
|
echo "🔍 验证命令:"
|
|
echo "docker exec $MYSQL_CONTAINER mysql -u root -p123456 -e 'SHOW DATABASES;'"
|
|
echo ""
|
|
echo "📊 服务状态:"
|
|
docker-compose ps
|