您的位置:首页 > 教育 > 培训 > 装修网站设计师_郴州市面积多少平方公里_看颜色应该搜索哪些词汇_厦门人才网唯一官网招聘

装修网站设计师_郴州市面积多少平方公里_看颜色应该搜索哪些词汇_厦门人才网唯一官网招聘

2025/3/19 15:42:02 来源:https://blog.csdn.net/weixin_30777913/article/details/146323086  浏览:    关键词:装修网站设计师_郴州市面积多少平方公里_看颜色应该搜索哪些词汇_厦门人才网唯一官网招聘
装修网站设计师_郴州市面积多少平方公里_看颜色应该搜索哪些词汇_厦门人才网唯一官网招聘

Linux下用Bash Shell脚本连接到MySQL数据库,用SELECT @@secure_file_priv或者SHOW QUERY VARIABLE LIKE 'secure_file_priv’取得secure_file_priv变量的值,值为Linux的目录,如果获取的值为空,则输出提示信息让用户配置my.cnf文件中的secure_file_priv变量的值,否则打印输出这个值,说明输出文件到这个目录,并且实现一个基于多个带标签SQL模板作为配置文件和多组参数的Bash Shell脚本、SELECT INTO OUTFILE语句和mysql命令行程序,实现根据不同的输入参数,自动批量地将MySQL数据库的数据导出为字段用引号包裹以及带逗号分隔的CSV文件和到指定目录上,标签和多个参数(以“_”分割)为组成导出数据文件名,文件已经存在则覆盖原始文件。Bash Shell脚本需要异常处理,输出带时间戳和每个运行批次和每个导出文件作业运行状态的日志文件,每天单独一个带日期的和.log扩展名日志文件,放在logs子目录中,参数全部设置在json配置文件中。

#!/bin/bash
set -eo pipefail# 读取配置文件
CONFIG_FILE="config.json"# 解析JSON配置
parse_config() {jq -r '.database | "\(.host) \(.user) \(.password) \(.database)"' "$CONFIG_FILE" | read host user password databasetemplate_dir=$(jq -r '.export.template_dir' "$CONFIG_FILE")output_dir=$(jq -r '.export.output_dir' "$CONFIG_FILE")log_dir=$(jq -r '.logging.log_dir' "$CONFIG_FILE")mapfile -t tasks < <(jq -c '.export.tasks[]' "$CONFIG_FILE")
}# 初始化日志系统
setup_logging() {mkdir -p "$log_dir"log_file="${log_dir}/$(date +%Y%m%d).log"touch "$log_file"
}# 日志记录函数
log() {local status=$1local message=$2echo "[$(date '+%Y-%m-%d %T')] [${current_task}] [${status}] ${message}" >> "$log_file"
}# 检查secure_file_priv配置
check_secure_file_priv() {local secure_file_priv=$(mysql -h"$host" -u"$user" -p"$password" -sN -e "SELECT @@secure_file_priv;")if [[ -z "$secure_file_priv" || "$secure_file_priv" == "NULL" ]]; thenlog "ERROR" "secure_file_priv未配置,请修改my.cnf文件"exit 1elselog "INFO" "secure_file_priv配置为:${secure_file_priv}"if [[ ! "$output_dir" =~ ^$secure_file_priv ]]; thenlog "ERROR" "输出目录必须在secure_file_priv路径下"exit 1fifi
}# 执行数据导出
export_data() {local label=$1local params=(${2//_/ })local template_file="${template_dir}/${label}.sql"local output_file="${output_dir}/${label}_${2}.csv"# 处理SQL模板if [[ ! -f "$template_file" ]]; thenlog "ERROR" "模板文件不存在:${template_file}"return 1fi# 替换模板参数sql_query=$(<"$template_file")for i in "${!params[@]}"; doparam_name="param$((i+1))"param_value="${params[$i]//\'/\\\'}"sql_query=${sql_query//\{\{${param_name}\}\}/${param_value}}done# 构建完整SQL语句sql_query+=" INTO OUTFILE '${output_file}' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\\n'"# 执行导出log "INFO" "开始导出:${output_file}"if mysql -h"$host" -u"$user" -p"$password" -D"$database" -e "$sql_query" 2>> "$log_file"; thenlog "SUCCESS" "导出成功"elselog "ERROR" "导出失败"return 1fi
}# 主执行流程
main() {parse_configsetup_loggingcheck_secure_file_privmkdir -p "$output_dir"for task in "${tasks[@]}"; dolabel=$(jq -r '.label' <<< "$task")mapfile -t params_list < <(jq -cr '.params[] | join("_")' <<< "$task")for params in "${params_list[@]}"; docurrent_task="${label}_${params}"log "INFO" "开始处理任务"if export_data "$label" "$params"; thenlog "INFO" "任务处理完成"elselog "ERROR" "任务处理失败"fidonedone
}main

配套的config.json示例:

{"database": {"host": "localhost","user": "root","password": "your_password","database": "test_db"},"export": {"template_dir": "./sql_templates","output_dir": "/var/lib/mysql-files/exports","tasks": [{"label": "users","params": [["active", "2023"],["inactive", "2022"]]},{"label": "orders","params": [["pending"],["completed"]]}]},"logging": {"log_dir": "./logs","log_level": "INFO"}
}

SQL模板示例(sql_templates/users.sql):

SELECT * 
FROM users 
WHERE status = '{{param1}}'
AND YEAR(created_at) = '{{param2}}'

脚本特点:

  1. 安全验证:自动检查MySQL的secure_file_priv配置
  2. 模板引擎:支持带{{param}}占位符的SQL模板
  3. 批量处理:支持多任务多参数批量执行
  4. 日志系统
    • 每天生成独立日志文件
    • 包含时间戳和任务状态
    • 自动创建日志目录
  5. 错误处理
    • 自动捕获并记录错误
    • 模板文件存在性检查
    • MySQL执行错误处理
  6. 文件管理
    • 自动创建输出目录
    • 文件名自动生成(标签_参数1_参数2.csv)
    • 自动覆盖已有文件

使用说明:

  1. 将配置文件保存为config.json
  2. 创建sql_templates目录并放置SQL模板文件
  3. 确保MySQL用户有FILE权限和目标目录写入权限
  4. 通过chmod +x script.sh添加执行权限
  5. 使用./script.sh执行脚本

注意事项:

  1. MySQL的secure_file_priv目录需要提前配置
  2. 确保JSON配置文件的语法正确
  3. SQL模板中的参数占位符使用双大括号格式{{param}}
  4. 输出目录必须位于secure_file_priv指定的路径下
  5. 建议在生产环境中使用配置文件权限限制(如chmod 600 config.json)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com