[SHELL/MYSQL] 基于Shell实现mysql查询结果保存为CSV文件

step1 安装 mysql 客户端

安装客户端章节

step2 shell 脚本

  • mysql 命令执行 SQL 查询后,默认输出的列使用制表符 (\t) 分隔。
  • 通过 --batch--skip-column-names 参数,取消了列名,并让结果更适合输出。
  • 使用 sed 's/\t/,/g' 将制表符替换为逗号,从而生成 CSV 格式的输出。
  • 对于 TXT 文件输出,保持原始的制表符格式即可,不需要使用 sed 进行替换。
#!/bin/bash

# MySQL 配置
DB_HOST="host"
DB_PORT="port"
DB_USER="user"
DB_PASSWORD="password"
DB_NAME="dbName"

# 要执行的 SQL 查询
## 方式1: 多行的复杂SQL时不推荐
#SQL_QUERY="
#SELECT * FROM xxxTable;
#"

## 方式2: 多行的复杂SQL时不推荐
SQL_QUERY=$(< query-sql.sql)
# echo "$SQL_QUERY"


# 输出文件
CSV_FILE="output.csv"
#TXT_FILE="output.txt"

# 查询并将结果保存为 CSV 文件
##mysql -h "$DB_HOST" --port=$DB_PORT -u "$DB_USER" -p"$DB_PASSWORD" -D "$DB_NAME" -e "$SQL_QUERY" --batch --skip-column-names | sed 's/\t/,/g' > "$CSV_FILE"
mysql -h "$DB_HOST" --port=$DB_PORT -u "$DB_USER" -p"$DB_PASSWORD" -D "$DB_NAME" < query-sql.sql --batch --skip-column-names | sed 's/\t/,/g' > "$CSV_FILE"

# 查询并将结果保存为 TXT 文件
## mysql -h "$DB_HOST" --port=$DB_PORT -u "$DB_USER" -p"$DB_PASSWORD" -D "$DB_NAME" -e "$SQL_QUERY" --batch --skip-column-names > "$TXT_FILE"

# 提示文件已保存
## echo "查询结果已保存为 $CSV_FILE 和 $TXT_FILE"
echo "查询结果已保存为 $CSV_FILE !"

X 参考文献

posted @ 2026-01-30 20:07  千千寰宇  阅读(3)  评论(0)    收藏  举报