使用shell脚本读elasticsearch,写msyql
#!/bin/bash
# 配置 Elasticsearch 和 MySQL 连接信息
ES_HOST="http://localhost:9200"
ES_INDEX="your_index"
ES_QUERY='{ "query": { "match_all": {} }, "size": 1000 }' # 每次查询1000条
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASS="your_password"
MYSQL_DB="your_database"
MYSQL_TABLE="your_table"
# 从 Elasticsearch 读取数据
read_es_data() {
curl -s -XGET "$ES_HOST/$ES_INDEX/_search" \
-H 'Content-Type: application/json' \
-d "$ES_QUERY" | jq -c '.hits.hits[]._source'
}
# 写入 MySQL
write_to_mysql() {
local json_data="$1"
# 提取字段(根据实际JSON结构调整)
id=$(echo "$json_data" | jq -r '.id')
name=$(echo "$json_data" | jq -r '.name')
timestamp=$(echo "$json_data" | jq -r '.timestamp // "NULL"') # 处理空值
# 构建 SQL 语句
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" -p"$MYSQL_PASS" "$MYSQL_DB" <<EOF
INSERT INTO $MYSQL_TABLE (id, name, timestamp)
VALUES ($id, '$name', FROM_UNIXTIME($timestamp));
EOF
}
# 主流程
main() {
# 读取 ES 数据
data=$(read_es_data)
total=$(echo "$data" | wc -l)
current=0
# 逐条处理
echo "$data" | while read -r line; do
write_to_mysql "$line"
((current++))
# 显示进度条
echo -ne "进度: [$((current * 100 / total))%]\r"
done
echo -e "\n导入完成!共导入 $total 条数据"
}
main