实现linux系统CentOS7.6里用sh脚本批量执行sql文件插入到mysql的功能

实现linux系统CentOS7.6里用sh脚本批量执行sql文件插入到mysql的功能

一,需求描述:

  1. 读一个文件夹,文件夹里存的是sql文件,比如:tabelname.sql
  2. 读取文件后,取文件名,然后执行这种语句:mysql -uadmin -pAdmin@123 -h127.0.0.1 -P3307 test_db < line_table_name.sql

二,脚本实现:

新建sh脚本文件:batch_import_sql_from_dir.sh
#!/bin/bash
##############################################################################
# 功能:读取指定文件夹下的所有 .sql 文件,逐文件执行 MySQL 导入命令(无日志文件,实时打印)
# 适配:CentOS 7.6(基于 CentOS 7 内核,兼容 bash 4.2+)
# 依赖:系统已安装 mysql-client(或 mariadb-client)
##############################################################################

# ==================== 配置参数(根据实际情况修改)====================
DB_USER="admin"               # 数据库用户名
DB_PASS="Admin@123"           # 数据库密码
DB_HOST="127.0.0.1"           # 数据库地址
DB_PORT="3307"                # 数据库端口
DB_NAME="test_db"  # 目标数据库名
SQL_DIR="./sql_files"  # 存放 .sql 文件的文件夹路径(绝对/相对路径均可)
# ===================================================================

# ==================== 前置检查 ====================
# 1. 检查 mysql 客户端是否安装
if ! command -v mysql &> /dev/null; then
    echo -e "\033[31m错误:未找到 mysql 客户端,请先安装!\033[0m"
    echo "安装命令:sudo yum install -y mariadb-client"
    exit 1
fi

# 2. 检查 SQL 文件夹是否存在且可读
if [ ! -d "$SQL_DIR" ] || [ ! -r "$SQL_DIR" ]; then
    echo -e "\033[31m错误:SQL 文件夹 $SQL_DIR 不存在或无读取权限!\033[0m"
    exit 1
fi

# 3. 检查文件夹下是否有 .sql 文件
sql_files=("$SQL_DIR"/*.sql)
if [ ! -f "${sql_files[0]}" ]; then
    echo -e "\033[31m错误:SQL 文件夹 $SQL_DIR 下未找到任何 .sql 文件!\033[0m"
    exit 1
fi

# 4. 检查数据库连接是否正常
echo -n "正在测试数据库连接... "
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" -D"$DB_NAME" -e "SELECT 1;" &> /dev/null
if [ $? -ne 0 ]; then
    echo -e "\033[31m失败!\033[0m"
    echo -e "\033[31m错误:数据库连接失败,请检查配置参数(主机、端口、用户名、密码、数据库名)\033[0m"
    exit 1
fi
echo -e "\033[32m成功!\033[0m"

# ==================== 核心执行逻辑 ====================
echo -e "\n===== 脚本开始执行($(date +'%Y-%m-%d %H:%M:%S'))====="
echo "配置信息:"
echo "  数据库:$DB_HOST:$DB_PORT/$DB_NAME"
echo "  SQL 文件目录:$SQL_DIR"
echo "  找到的 .sql 文件数量:${#sql_files[@]}"
echo "--------------------------------------------------------"

# 遍历文件夹下所有 .sql 文件
for sql_file in "${sql_files[@]}"; do
    # 获取文件名(含后缀)
    file_name=$(basename "$sql_file")
    
    echo -n "正在导入文件:$file_name ... "

    # 构建并执行 MySQL 导入命令
    mysql -u"$DB_USER" -p"$DB_PASS" -h"$DB_HOST" -P"$DB_PORT" "$DB_NAME" < "$sql_file" 2> /tmp/mysql_import_error.log

    # 检查执行结果
    if [ $? -eq 0 ]; then
        echo -e "\033[32m成功\033[0m"
    else
        echo -e "\033[31m失败\033[0m"
        echo -e "  错误信息:$(cat /tmp/mysql_import_error.log)"
        # 可选:遇到错误是否停止脚本(如需继续执行则保留注释,如需停止则取消注释)
        # echo -e "\033[31m错误:文件 $file_name 导入失败,脚本终止\033[0m"
        # exit 1
    fi
done

# 清理临时错误文件
rm -f /tmp/mysql_import_error.log

echo -e "\n--------------------------------------------------------"
echo -e "===== 脚本执行结束($(date +'%Y-%m-%d %H:%M:%S'))====="
设置权限
chmod +x batch_import_sql_from_dir.sh

三,执行:

运行:
./batch_import_sql_from_dir.sh
效果:
正在测试数据库连接... 成功!

===== 脚本开始执行(2025-11-19 15:30:00)=====
配置信息:
  数据库:127.0.0.1:3307/test_db 
  SQL 文件目录:./sql_files
  找到的 .sql 文件数量:3
--------------------------------------------------------
正在导入文件:user.sql ... 成功
正在导入文件:order.sql ... 成功
正在导入文件:product.sql ... 失败
  错误信息:ERROR 1064 (42000) at line 5: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3

--------------------------------------------------------
===== 脚本执行结束(2025-11-19 15:30:05)=====
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值