Files
hzdyjs/退学、休学、复学、毕业/prod_debug.sh
T
2025-12-26 00:44:19 +08:00

141 lines
4.4 KiB
Bash

#!/bin/bash
# Production environment debug script for student status change scripts
# This script helps diagnose MySQL output format issues
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="${SCRIPT_DIR}/data.conf"
if [[ ! -f "$CONFIG_FILE" ]]; then
echo "错误:配置文件 $CONFIG_FILE 未找到!"
exit 1
fi
source "$CONFIG_FILE"
echo "=== 生产环境调试信息 ==="
echo "时间: $(date)"
echo "脚本目录: $SCRIPT_DIR"
echo "SHELL: $SHELL"
echo "BASH_VERSION: $BASH_VERSION"
echo
echo "=== MySQL版本信息 ==="
mysql --version
echo
echo "=== 系统信息 ==="
uname -a
echo
# Test basic connection
echo "=== 测试数据库连接 ==="
if mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "SELECT 1;" >/dev/null 2>&1; then
echo "数据库连接成功"
else
echo "数据库连接失败"
exit 1
fi
echo
# Test query formats
echo "=== 测试MySQL查询输出格式 ==="
QUERY="SELECT id, student_id, student_no, change_type, operator_id FROM xg_student_status_change WHERE process_status = 0 AND change_type IN ('XIU_XUE', 'TUI_XUE', 'BI_YE') AND deleted = 0 AND effective_date <= NOW() ORDER BY create_time ASC LIMIT 2;"
echo "查询SQL: $QUERY"
echo
echo "1. 标准mysql -e 输出 (可能包含表格格式):"
echo "----------------------------------------"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$QUERY" 2>&1
echo "----------------------------------------"
echo
echo "2. mysql -B 输出 (批量模式,无表格格式):"
echo "----------------------------------------"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" -B "$DB_NAME" -e "$QUERY" 2>&1
echo "----------------------------------------"
echo
echo "3. mysql -ss 输出 (超静默模式):"
echo "----------------------------------------"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" -ss "$DB_NAME" -e "$QUERY" 2>&1
echo "----------------------------------------"
echo
echo "=== 详细分析 -B 参数输出 ==="
RESULT_B=$(mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" -B "$DB_NAME" -e "$QUERY" 2>&1)
echo "原始输出 (包含警告):"
echo "\"$RESULT_B\""
echo
echo "按行分割查看:"
echo "$RESULT_B" | while IFS= read -r line; do
echo "行: '$line'"
done
echo
echo "过滤MySQL警告后的结果:"
FILTERED_RESULT=$(echo "$RESULT_B" | grep -v "^mysql:" | grep -v "^$")
echo "\"$FILTERED_RESULT\""
echo
echo "解析为变量 (使用tab分隔):"
if [[ -n "$FILTERED_RESULT" ]]; then
echo "$FILTERED_RESULT" | while IFS=$'\t' read -r record_id student_id student_no change_type operator_id; do
echo "解析结果:"
echo " record_id: '$record_id'"
echo " student_id: '$student_id'"
echo " student_no: '$student_no'"
echo " change_type: '$change_type'"
echo " operator_id: '$operator_id'"
echo
# Test if variables are numeric
echo "变量类型检查:"
echo " record_id 是数字: $([[ '$record_id' =~ ^[0-9]+$ ]] && echo '是' || echo '否')"
echo " student_id 是数字: $([[ '$student_id' =~ ^[0-9]+$ ]] && echo '是' || echo '否')"
echo " operator_id 是数字或空: $([[ -z '$operator_id' || '$operator_id' =~ ^[0-9]+$ ]] && echo '是' || echo '否')"
echo
# Simulate SQL construction
echo "模拟SQL构造:"
TEST_SQL="UPDATE xg_student_msg SET student_status = '2' WHERE id = '$student_id';"
echo " $TEST_SQL"
echo
# Test SQL execution (dry run - just show what would be executed)
echo "SQL执行测试 (仅显示,不实际执行):"
echo " mysql -h'$DB_HOST' -P'$DB_PORT' -u'$DB_USER' -p'***' '$DB_NAME' -e \"$TEST_SQL\""
done
else
echo "没有找到数据行,检查是否有待处理的记录"
fi
echo
echo "=== 脚本兼容性检查 ==="
# Check bash features
echo "Bash特性检查:"
echo " 支持pipefail: $(set -o | grep pipefail)"
echo " 支持nounset: $(set -o | grep nounset)"
echo
echo "=== 环境变量检查 ==="
echo "PATH: $PATH"
echo "LD_LIBRARY_PATH: ${LD_LIBRARY_PATH:-未设置}"
echo
echo "=== 建议的修复方案 ==="
echo "如果上述解析失败,请尝试以下修改:"
echo "1. 在脚本开头添加: export LANG=C"
echo "2. 修改MySQL查询使用 -ss 参数而不是 -B"
echo "3. 检查数据表中是否有实际的待处理记录"
echo "4. 验证operator_id字段是否可能为NULL"
echo
echo "=== 调试完成 ==="
echo "请将上述输出结果发送给开发人员"