114 lines
3.1 KiB
Bash
Executable File
114 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# MySQL配置验证脚本
|
|
# 用于验证MySQL配置文件与MySQL 8.0的兼容性
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 检查MySQL 8.0不兼容的配置项
|
|
check_mysql8_compatibility() {
|
|
local config_file="$1"
|
|
local issues_found=0
|
|
|
|
log_info "检查配置文件: $config_file"
|
|
|
|
if [[ ! -f "$config_file" ]]; then
|
|
log_error "配置文件不存在: $config_file"
|
|
return 1
|
|
fi
|
|
|
|
# 检查已移除的sql_mode选项
|
|
if grep -q "NO_AUTO_CREATE_USER" "$config_file"; then
|
|
log_error "发现不兼容的sql_mode选项: NO_AUTO_CREATE_USER (MySQL 8.0已移除)"
|
|
((issues_found++))
|
|
fi
|
|
|
|
# 检查已弃用的参数
|
|
if grep -q "expire_logs_days" "$config_file"; then
|
|
log_warn "发现已弃用的参数: expire_logs_days (建议使用 binlog_expire_logs_seconds)"
|
|
((issues_found++))
|
|
fi
|
|
|
|
if grep -q "binlog_format.*STATEMENT" "$config_file"; then
|
|
log_warn "发现已弃用的binlog_format: STATEMENT (建议使用 ROW)"
|
|
fi
|
|
|
|
# 检查query_cache相关配置 (MySQL 8.0已移除)
|
|
if grep -v "^[[:space:]]*#" "$config_file" | grep -q "query_cache"; then
|
|
log_warn "发现query_cache相关配置 (MySQL 8.0已移除查询缓存功能)"
|
|
fi
|
|
|
|
# 检查推荐的安全配置
|
|
if ! grep -q "sql_mode.*STRICT_TRANS_TABLES" "$config_file"; then
|
|
log_warn "建议在sql_mode中包含 STRICT_TRANS_TABLES"
|
|
fi
|
|
|
|
return $issues_found
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
log_info "MySQL 8.0配置兼容性检查"
|
|
echo "========================================"
|
|
|
|
local total_issues=0
|
|
local config_files=(
|
|
"../configs/my.cnf.dev"
|
|
"../configs/my.cnf.staging"
|
|
"../configs/my.cnf.prod"
|
|
)
|
|
|
|
for config_file in "${config_files[@]}"; do
|
|
if check_mysql8_compatibility "$config_file"; then
|
|
log_success "配置文件检查通过: $(basename "$config_file")"
|
|
else
|
|
local issues=$?
|
|
total_issues=$((total_issues + issues))
|
|
log_error "配置文件存在 $issues 个问题: $(basename "$config_file")"
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
echo "========================================"
|
|
if [[ $total_issues -eq 0 ]]; then
|
|
log_success "所有配置文件检查通过!"
|
|
else
|
|
log_error "总共发现 $total_issues 个配置问题"
|
|
echo ""
|
|
log_info "修复建议:"
|
|
echo "1. 移除 NO_AUTO_CREATE_USER 从 sql_mode"
|
|
echo "2. 将 expire_logs_days 替换为 binlog_expire_logs_seconds"
|
|
echo "3. 移除或注释 query_cache 相关配置"
|
|
echo "4. 确保 sql_mode 包含推荐的安全选项"
|
|
fi
|
|
|
|
return $total_issues
|
|
}
|
|
|
|
# 如果脚本被直接执行
|
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
main "$@"
|
|
fi |