用shell脚本搞定数据库导入,快速又省事儿怎么弄
- 问答
- 2026-01-02 20:12:51
- 3
知乎问答“Shell脚本导入数据库的懒人教程”)
直接说重点:想用shell脚本倒腾数据库,其实就是把一堆手动敲的命令塞进一个文件里,然后让系统自己跑,别想得太复杂,咱们一步步来。
先搞清楚你要干啥
比如你有个SQL文件(就是那种装满数据的大号文本文件),要把它灌进MySQL数据库,手动操作的话,得先登录数据库,再选个库,然后跑source命令,但每次这么搞太麻烦,不如写个脚本自动完成。
脚本里写点啥?
最简单的情况,脚本就三行:
#!/bin/bash mysql -u用户名 -p密码 数据库名 < 你的sql文件.sql echo "搞定!"
(来源:CSDN博客《shell一键导入SQL文件》)
注意:-u和-p后面别加空格(比如-uroot不是-u root),不然会报错。

安全问题咋处理?
把密码明晃晃写在脚本里容易被别人看到,可以改成这样:
#!/bin/bash read -s -p "输入密码:" password mysql -u用户名 -p$password 数据库名 < 你的sql文件.sql
(来源:Stack Overflow回答“MySQL password in shell scripts”)
这样运行时会让你手动输密码,输的时候不显示字符,安全多了。
加点儿容错机制
万一数据库没启动或者SQL文件路径错了,脚本会直接崩,可以加点判断:
#!/bin/bash
if [ ! -f "你的sql文件.sql" ]; then
echo "SQL文件找不到!检查下路径吧"
exit 1
fi
mysql -u用户名 -p密码 数据库名 < 你的sql文件.sql
if [ $? -eq 0 ]; then
echo "导入成功!"
else
echo "出错了,检查下密码或者SQL语法吧"
fi
(来源:博客园文章《Shell脚本实战:数据库备份与导入》)
是上一条命令的退出状态,0表示成功,非0就是出错了。

对付大文件怎么办?
如果SQL文件好几个G,直接导入可能会卡死,这时候可以用pv命令显示进度(先安装:apt install pv):
pv 你的sql文件.sql | mysql -u用户名 -p密码 数据库名
(来源:运维论坛讨论“大容量SQL导入技巧”)
屏幕上会显示个进度条,能知道还要等多久。
复杂点的例子:分批次导入
有时候需要按日期导入多个文件,
#!/bin/bash
for file in ./data/*.sql
do
echo "正在导入 $file ..."
mysql -uroot -p123456 mydb < $file
done
这样会把data文件夹下所有SQL文件按顺序导入。

别忘了授权
脚本写完后要给它执行权限:
chmod +x 你的脚本名.sh
然后就能用./你的脚本名.sh运行了。
实际案例参考
某用户分享过用脚本处理每日日志入库(来源:V2EX讨论《用shell+crond自动化数据同步》):
- 先用
wget下载远程SQL压缩包 - 用
gzip -d解压 - 导入数据库后自动发邮件通知结果
全程不用人工干预。
常见坑点
- Windows创建的SQL文件换行符可能是
\r\n,Linux下会报错,用dos2unix命令转换一下 - 如果SQL文件太大,可能需要调整MySQL的
max_allowed_packet参数 - 导csv文件更简单:
mysqlimport --local -u用户名 -p密码 数据库名 文件.csv
核心思路就是:把重复操作打包成脚本,下次直接双击(或者命令行运行)就能省下喝杯奶茶的时间,刚开始可能要多调试几次,熟了之后连备份、校验都能一并自动化。
本文由颜泰平于2026-01-02发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/73280.html
