在shell脚本中:批量导入恢复每天备份的表 ?
在shell脚本中:批量导入恢复每天备份的表 ?
批量导入MySQL归档的表、也是生产环境有这个场景、一般数据表都是按照业务保留几个月、后期有需要就恢复归档的数据。
之前单条命令导入:
表名字
cdr_call_item_20241224.sql.gz
解压缩:
gunzip cdr_call_item_20241224.sql.gz
导入恢复:(导入表数据时候、需要有库)
xl-port
mysql -uroot -p12345678 -hlocalhost xl-port < cdr_call_item_20241224.sql
脚本批量导入:
测试环境简单版本:
#!/bin/bash
# 循环从 20241201 到 20241230
for ((i=20241201; i<=20241230; i++)); do
# 文件名
file="cdr_call_item_${i}.sql.gz"
# 解压缩文件并将其导入到数据库
if gunzip -c "$file" | mysql -uroot -p12345678 -hlocalhost xl-port; then
echo "cdr_call_item_${i}.sql 导入成功"
else
echo "cdr_call_item_${i}.sql 导入失败"
fi
done
生产环境详细版本:
#!/bin/bash
# 日志文件路径
LOG_FILE="import_cdr_log.txt"
# 要导入的文件列表
FILES=(
"cdr_call_item_20250102.sql.gz"
"cdr_call_item_20250103.sql.gz"
"cdr_call_item_20250104.sql.gz"
"cdr_call_item_20250105.sql.gz"
"cdr_call_item_20250106.sql.gz"
"cdr_call_item_20250107.sql.gz"
"cdr_call_item_20250108.sql.gz"
"cdr_call_item_20250109.sql.gz"
"cdr_call_item_20250110.sql.gz"
"cdr_call_item_20250111.sql.gz"
"cdr_call_item_20250112.sql.gz"
"cdr_call_item_20250113.sql.gz"
"cdr_call_item_20250114.sql.gz"
"cdr_call_item_20250115.sql.gz"
"cdr_call_item_20250116.sql.gz"
"cdr_call_item_20250117.sql.gz"
"cdr_call_item_20250118.sql.gz"
"cdr_call_item_20250119.sql.gz"
"cdr_call_item_20250120.sql.gz"
"cdr_call_item_20250121.sql.gz"
"cdr_call_item_20250122.sql.gz"
)
# 创建或清空日志文件
echo "CDR表导入日志 - $(date)" > $LOG_FILE
# 遍历所有文件并导入
for file in "${FILES[@]}"; do
echo "正在处理文件: $file"
# 检查文件是否存在
if [ ! -f "$file" ]; then
echo "错误: 文件 $file 不存在" | tee -a $LOG_FILE
continue
fi
# 临时解压并导入,不保留解压后的文件
if gunzip -c "$file" | mysql -uroot -p12345678 --socket=/var/run/mysqld/mysqld.sock -A xl-port; then
echo "成功导入文件: $file - $(date)" | tee -a $LOG_FILE
else
echo "错误: 导入文件 $file 失败" | tee -a $LOG_FILE
fi
done
echo "所有文件处理完成。详细日志请查看 $LOG_FILE"

浙公网安备 33010602011771号