实现linux系统CentOS7.6里用sh脚本批量执行sql文件插入到mysql的功能
一,需求描述:
读一个文件夹,文件夹里存的是sql文件,比如:tabelname.sql 读取文件后,取文件名,然后执行这种语句:mysql -uadmin -pAdmin@123 -h127.0.0.1 -P3307 test_db < line_table_name.sql
二,脚本实现:
新建sh脚本文件:batch_import_sql_from_dir.sh
#!/bin/bash
DB_USER = "admin"
DB_PASS = "Admin@123"
DB_HOST = "127.0.0.1"
DB_PORT = "3307"
DB_NAME = "test_db"
SQL_DIR = "./sql_files"
if ! command -v mysql &> /dev/null; then
echo -e "\033 [31m错误:未找到 mysql 客户端,请先安装!\033 [0m"
echo "安装命令:sudo yum install -y mariadb-client"
exit 1
fi
if [ ! -d "$SQL_DIR " ] || [ ! -r "$SQL_DIR " ] ; then
echo -e "\033 [31m错误:SQL 文件夹 $SQL_DIR 不存在或无读取权限!\033 [0m"
exit 1
fi
sql_files = ( "$SQL_DIR " /*.sql)
if [ ! -f "${sql_files[ 0] } " ] ; then
echo -e "\033 [31m错误:SQL 文件夹 $SQL_DIR 下未找到任何 .sql 文件!\033 [0m"
exit 1
fi
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 "--------------------------------------------------------"
for sql_file in "${sql_files[ @] } " ; do
file_name = $( basename "$sql_file " )
echo -n "正在导入文件:$file_name ... "
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) "
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)== == =