MySQLでSQLスクリプトを実行する方法は?


409

MySQLでSQLクエリを含むテキストファイルを実行したい。

実行しようとするsource /Desktop/test.sqlとエラーが発生しました:

mysql>。\ home \ sivakumar \ Desktop \ test.sqlエラー:ファイル '\ home \ sivakumar \ Desktop \ test.sql'を開けませんでした、エラー:2

私が間違っていることについて何か考えはありますか?



基本的に私はこれがここでの答えであるべきだと思います:\。/home/sivakumar/Desktop/test.sql
talsibony

回答:


433

MySQLコマンドラインmysql>を使用している場合は、SQLファイルをとして宣言する必要がありますsource

mysql> source \home\user\Desktop\test.sql;

29
Mac上のmysql 5.6.10の場合、ファイルパスに一重引用符は必要ありません。
RNA

3
Windowsの場合、「\」の代わりに「/」を使用すると正しく機能しました。最初に「/」を使用したときにエラーが発生しました。これは私のために働いたものです...ソースC:/Users/macombers/Downloads/midcoast_db.sql;
ザックマコンバー2014年

ubuntuにも引用符をドロップしてください(mysql Ver 14.14 debian-linux-gnu(x86_64)をEditLineラッパーを使用)
Siddhartha

1
@kapil何を基準にしていますか?あなたはこの時点でMySQL内にいるので、私が心配している親族はいません。
Thomas Edwards

1
@Sarah \ スペースの前に使用するか、ファイル名をで囲むことができます"
トーマスエドワーズ

165

あなたにはかなり多くのオプションがあります:

  • MySQLコマンドラインクライアントを使用します。 mysql -h hostname -u user database < path/to/test.sql
  • MySQL GUIツールをインストールしてSQLファイルを開き、実行します
  • データベースがWebサーバー経由で利用できる場合は、phpmysqlを使用します

3
ユーザーのパスワード(-pオプション)はどうですか?
アミールカッツ

@AmirKatzパスワードは-pオプションで指定できますが、これはお勧めできません。同じホスト上の他のユーザーは、この場合、パスワードpsを読み取るようなシステムツールを使用できます。
Eugen Rieck 2018年

1
引数の-pない@EugenRieck は、次の行にパスワードを入力するように要求します
Bobby Jack

130

次のコマンドを使用して、テキストファイルに記述されたmysqlステートメントを実行できます。

mysql -u yourusername -p yourpassword yourdatabase < text_file

yourdatabaseがまだ作成されていない場合は、最初にmysqlにログインします。

mysql -u yourusername -p yourpassword yourdatabase

次に:

mysql>CREATE DATABASE a_new_database_name

次に:

mysql -u yourusername -p yourpassword a_new_database_name < text_file

それでうまくいくはずです!

詳細はこちら:http : //dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html


7
Windowsの場合:パスワードを機能させるには、引用符とスペースを使用する必要がありました(パスワード自体にスペースや特殊文字は含まれていませんでした):mysql -u yourusername -p"yourpassword"
TmTron

1
パスワードプロンプト上にしたくない場合は、私はこの方法は、ここで概説信じて動作します:stackoverflow.com/questions/9293042/...を
alex9311

59

そのための私のお気に入りのオプションは次のとおりです。

 mysql --user="username" --database="databasename" --password="yourpassword" < "filepath"

このように使用しているのは、 ""を使用して文字列を設定すると、間違ったパスやスペースの間違いを回避できるためです。


@elcucoコメントを使用する前に、[スペース]を指定してこのコマンドを使用することをお勧めします。これにより、履歴への保存を無視するようにbashに指示します。これは、ほとんどのbashでそのまま使用できます。

コマンドがまだ履歴に保存されている場合は、次の解決策をご覧ください。

履歴に残さずにコマンドを実行する


追加のセキュリティ編集

さらに安全にしたい場合に備えて、次のコマンドを使用して、コマンドライン入力にパスワードを入力できます。

mysql --user="username" --database="databasename" -p < "filepath"

18
パスワードは〜/ .bash_historyに保存され、/ proc /を介して他のプログラムからアクセスできるため、コマンドラインにパスワードを渡すことはお勧めしません。
elcuco

@elcucoからのすばらしいアドバイス!また、おそらく-pの後に別のフラグを使用する(または最後の引数にする)ことで、別のパラメーターが意図したパスワードであると誤って解釈されないようにします。
ダバーネーター、

コマンドライン引数は他のユーザーから見えます。例:for i / proc / * / cmdline; $ iをエコーし​​ます。猫$ i; 完了
elcuco

サーバーのパスワードをコンソールの履歴に公開するため、これは推奨事項ではありません
Alexius DIAKOGIANNIS

@AlexiusDiakogiannisコマンドの前に[スペース]を付けてコマンドを実行すると、履歴からコマンドを表示する方法の例を教えてください。
タルシボニー

56

上位の回答はすべて良好です。しかし、念のために誰かがリモートサーバー上のテキストファイルからクエリを実行したい(代わりに、コンソール上に表示の)結果をファイルに保存し、あなたがこれを行うことができます:

mysql -u yourusername -p yourpassword yourdatabase < query_file > results_file

これが誰かを助けることを願っています。


10
-pパスワードの間にはスペースを入れないでください
webNeat

ファイルに書き込む目的がデータダンプを取ることである場合、私SELECT ... INTO OUTFILE /path/to/file.csvはより効率的な方法だと思います。オプションと構文はこちら-dev.mysql.com/doc/refman/5.7/en/select-into.html
Anis

20

.sqlファイルのパスを次のように指定します。

source c:/dump/SQL/file_name.sql;

画像で見る:


トンありがとう!これは、ユーザーにSUDO権限がなく、リモートのAmazon RDS
でも機能し

20

私もこの答えを探してここに来ました、そして私が見つけたものは私にとって最も効果的です:Note私はUbuntu 16.xxを使用しています

  1. 以下を使用してmysqlにアクセスします。

mysql -u <your_user> - p

  1. mysqlプロンプトで、次のように入力します。

source file_name.sql

お役に立てれば。


2
:代わりにプロンプトを起動すると、それもただ一つのコマンドで2つのステップを組み合わせることが役に立つかもしれないmysql -u<user> -p -e 'source filename.sql'
junix

ありがとう、@ junix!ソースこの方法を使用するオプションは、私が探していたものです。
ManuelJE

14
mysql> source C:\Users\admin\Desktop\fn_Split.sql

単一引用符は指定しないでください。

上記のコマンドが機能しない場合は、ファイルをc:ドライブにコピーして、再試行してください。以下に示すように、

mysql> source C:\fn_Split.sql

13

コマンドラインから直接パスワード引数を渡すことはお勧めし~/.bash_historyません。ファイルに保存され、他のアプリケーションからアクセスできるようになります。

代わりにこれを使用してください:

mysql -u user --host host --port 9999 database_name < /scripts/script.sql -p
Enter password:


9

ほとんどの場合、スラッシュ/ブラックスラッシュを変更する必要があります:から

 \home\sivakumar\Desktop\test.sql

 /home/sivakumar/Desktop/test.sql

したがって、コマンドは次のようになります。

source /home/sivakumar/Desktop/test.sql

6

mysqlコマンドプロンプトから次を使用します -

source \\home\\user\\Desktop\\test.sql;

引用を使用しないでください。パスにスペース( '')が含まれている場合でも、引用符は使用しません


5

リダイレクトの代わりに、私は次のようにします

mysql -h <hostname> -u <username> --password=<password> -D <database> -e 'source <path-to-sql-file>'

これは、sql-fileへのファイルパスを実行します


5

それを行うには非常に多くの方法があります。

From Workbench: File > Run SQL Script -- then follow prompts

From Windows Command Line:
   Option 1: mysql -u usr -p
             mysql> source file_path.sql
   Option 2: mysql -u usr -p '-e source file_path.sql'
   Option 3: mysql -u usr -p < file_path.sql
   Option 4: put multiple 'source' statements inside of file_path.sql (I do this to drop and recreate schemas/databases which requires multiple files to be run)
             mysql -u usr -p < file_path.sql

コマンドラインからエラーが発生した場合は、以前に実行したことを確認してください

cd {!!>>mysqld.exe home directory here<<!!}
mysqld.exe --initialize 

これは、mysqld.exeディレクトリ、つまりCD内から実行する必要があります。

これが役立つだけでなく、冗長であるといいのですが。


3

mysql -u yourusername -p yourpassword yourdatabase < text_fileリモートサーバー(AmazonのEC2)では機能しなかったため...

最初にデータベースが作成されていることを確認してください。

次に:

mysql --host=localhost --user=your_username --password=your_password your_database_name < pathTofilename.sql

3

将来の参考のために、これは前述の方法と比較して、Windowsのmsqlコンソールで機能することがわかりました。

mysql >>source c://path_to_file//path_to_file//file_name.sql;

ルートドライブが「c」と呼ばれていない場合は、ドライブの名前と交換してください。最初にバックスラッシュを試してください。機能しない場合は、スラッシュを試してください。それらも機能しない場合は、完全なファイルパス、ファイル名に.sql拡張子があることを確認し、バージョンがセミコロンを要求している場合は、そこにあることを確認して、再試行してください。


0

私はこのエラーを抱えており、私が役に立たない可能性があるすべてのアドバイスを試しました。

最後に、問題は、フォルダー名にスペースがあり、フォルダーパスにスラッシュとして表示されることでした。フォルダーを見つけて削除すると、問題なく動作しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.