首页 > 解决方案 > 有没有办法使用 shell 脚本将多个 SQL 文件插入到 mysql(带密码)?

问题描述

我只想问是否可以制作一个 Makefile/脚本,让我只输入一次 MySQL 密码,然后将所有 SQL 文件插入数据库。我目前在我的 Makefile 上有类似的东西。

mysql -u root -p < ./sqlfile1.sql
mysql -u root -p < ./sqlfile2.sql
...
mysql -u root -p < ./sqlfile34.sql

每次为每个 SQL 文件输入密码对我来说真的很累。

我希望我能做的是,当我运行命令时,提示只会要求我输入一次密码,然后它会自动输入每个 SQL 文件的密码。


更新

我正在努力完成这项工作,但我遇到了这个警告:

[警告] 在命令行界面上使用密码可能不安全。

...随后出现此错误:

错误 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:是)

下面是我的代码(根据 Ron 的 [https://stackoverflow.com/users/2291328/ron] 解决方案):

#!/bin/bash

db_alpha:

    read mypass
    make db_build
    make db_dummy

db_build:
    mysql -u root -p$mypass < ./backend/database/functions.sql
    make db_procedures 
    mysql -u root -p$mypass < ./backend/database/triggers.sql

db_dummy:
    mysql -u root -p$mypass < ./backend/database/dummy/dummy_user.sql 

db_procedures:
    mysql -u root -p$mypass < ./backend/database/procedures/procedure_user.sql 

标签: mysqlsqlshellmakefile

解决方案


是的,

#!/bin/bash
echo enter your pass:
read mypass
for z in  ./sqlfile1.sql ./sqlfile2.sql ./sqlfile2.sql; do
  echo importing file: $z
  mysql -u root -p$mypass -D databasename < "$z"
done

更新:

取决于您的 .sql 文件的结构,您可能需要-D databasename在命令中指定。请检查更新的脚本。这个对我有用。

您可能还需要-h 127.0.0.1在同一行中指定主机。

由于您正在运行 CLI mysql 客户端并以明文形式提供密码,因此您将看到一条警告:

[警告] 在命令行界面上使用密码可能不安全。这不是错误,因此可以忽略。

最后,您当然需要使用正确的凭据。


推荐阅读