web-dev-qa-db-ja.com

コマンドライン経由で大きなSQLファイルをMySqlにインポートする

Ubuntuのコマンドラインを使用して、約300 MBのsqlファイルをMySqlにインポートしようとしています。私は使った

source /var/www/myfile.sql;

現在、次のような無限に見える行が表示されています。

Query OK, 1 row affected (0.03 sec)

しかし、それは今少しの間実行されています。以前にこれほど大きなファイルをインポートしたことがないので、これが正常かどうか、プロセスが停止したりエラーが発生した場合、コマンドラインに表示されるか、このプロセスが無期限に継続するかを知りたいだけです。

ありがとう

61
user2028856

次のような標準入力を使用して.sqlファイルをインポートできます。

mysql -u <user> -p<password> <dbname> < file.sql

注:<-p><password>の間にスペースがあってはなりません

リファレンス: http://dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html

提案された編集に関する注意:この回答は、インラインパスワードパラメータを使用するための提案された編集によってわずかに変更されました。スクリプトに推奨することはできますが、パラメーター(-p<password>)に直接パスワードを書き込むと、履歴ファイルを読み取ることができるすべてのユーザーにパスワードを公開するシェル履歴によってキャッシュされる可能性があることに注意してください。一方、-pは、標準入力でパスワードを入力するように求めます。

112
Martin Nuc

巨大なファイルをインポートするのにかかる時間に関して最も重要なのは、mysqlのデフォルト設定が「autocommit = true」であるためです。ファイルをインポートする前にそれをオフにしてから、インポートがgemのように動作する方法を確認する必要があります...

最初にMySQLを開きます:

mysql -u root -p

次に、次の操作を行うだけです。

mysql>use your_db

mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

59
Paresh Behede

@MartinNucに+1すると、バッチモードでmysqlクライアントを実行できますが、「OK」行の長いストリームは表示されません。

特定のSQLファイルをインポートするのにかかる時間は、多くのことに依存します。ファイルのサイズだけでなく、ファイル内のステートメントの種類、サーバーサーバーの能力、および同時に実行されている他の機能の数も含まれます。

@MartinNucによれば、4〜5分で4GBのSQLをロードできますが、0.5 GBのSQLファイルを実行しており、より小さなサーバーで45分かかりました。

サーバーでSQLスクリプトを実行するのにどれくらい時間がかかるかは、実際には推測できません。


あなたのコメント、

@MartinNucは正しいので、mysqlクライアントにすべてのステートメントを出力させることができます。または、2番目のセッションを開いてmysql> SHOW PROCESSLISTを実行し、実行中のものを確認することもできます。ただし、おそらく「完了した割合」の数値や、残りのステートメントを完了するのにかかる時間の見積もりに興味があるでしょう。

申し訳ありませんが、そのような機能はありません。 mysqlクライアントは、後のステートメントを実行するのにどれくらいの時間がかかるか、またはいくつあるかさえも知りません。そのため、完了までにどれくらいの時間がかかるかについて、意味のある推定をすることはできません。

8
Bill Karwin

大規模なSQL復元に使用するソリューションは、mysqldumpsplitterスクリプトです。 sql.gzを個々のテーブルに分割しました。次に、mysqlワークベンチのようなものをロードし、目的のスキーマへの復元として処理します。

スクリプトは次のとおりです https://github.com/kedarvj/mysqldumpsplitter

また、これは大規模なSQLリストアで機能します。使用している1つのサイトでの私の平均は、2.5GBのsql.gzファイル、20GBの非圧縮、および完全に復元された後の〜100GBです。

0

コマンドライン経由でMySQLに大きなSQLファイルをインポートする

  1. 最初のダウンロードファイル。
  2. 自宅にファイルを貼り付けます。
  3. 端末で次のコマンドを使用します(CMD)
  4. 構文:mysql -u username -p databsename <file.sql

例:mysql -u root -p aanew <aanew.sql

0
Shailesh Sharma