Ubuntuのコマンドラインを使用して、約300 MBのsqlファイルをMySqlにインポートしようとしています。私は使った
source /var/www/myfile.sql;
現在、次のような無限に見える行が表示されています。
Query OK, 1 row affected (0.03 sec)
しかし、それは今少しの間実行されています。以前にこれほど大きなファイルをインポートしたことがないので、これが正常かどうか、プロセスが停止したりエラーが発生した場合、コマンドラインに表示されるか、このプロセスが無期限に継続するかを知りたいだけです。
ありがとう
次のような標準入力を使用して.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
は、標準入力でパスワードを入力するように求めます。
巨大なファイルをインポートするのにかかる時間に関して最も重要なのは、mysqlのデフォルト設定が「autocommit = true」であるためです。ファイルをインポートする前にそれをオフにしてから、インポートがgemのように動作する方法を確認する必要があります...
最初にMySQLを開きます:
mysql -u root -p
次に、次の操作を行うだけです。
mysql>use your_db
mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
@MartinNucに+1すると、バッチモードでmysql
クライアントを実行できますが、「OK」行の長いストリームは表示されません。
特定のSQLファイルをインポートするのにかかる時間は、多くのことに依存します。ファイルのサイズだけでなく、ファイル内のステートメントの種類、サーバーサーバーの能力、および同時に実行されている他の機能の数も含まれます。
@MartinNucによれば、4〜5分で4GBのSQLをロードできますが、0.5 GBのSQLファイルを実行しており、より小さなサーバーで45分かかりました。
サーバーでSQLスクリプトを実行するのにどれくらい時間がかかるかは、実際には推測できません。
あなたのコメント、
@MartinNucは正しいので、mysqlクライアントにすべてのステートメントを出力させることができます。または、2番目のセッションを開いてmysql> SHOW PROCESSLIST
を実行し、実行中のものを確認することもできます。ただし、おそらく「完了した割合」の数値や、残りのステートメントを完了するのにかかる時間の見積もりに興味があるでしょう。
申し訳ありませんが、そのような機能はありません。 mysqlクライアントは、後のステートメントを実行するのにどれくらいの時間がかかるか、またはいくつあるかさえも知りません。そのため、完了までにどれくらいの時間がかかるかについて、意味のある推定をすることはできません。
大規模なSQL復元に使用するソリューションは、mysqldumpsplitterスクリプトです。 sql.gzを個々のテーブルに分割しました。次に、mysqlワークベンチのようなものをロードし、目的のスキーマへの復元として処理します。
スクリプトは次のとおりです https://github.com/kedarvj/mysqldumpsplitter
また、これは大規模なSQLリストアで機能します。使用している1つのサイトでの私の平均は、2.5GBのsql.gzファイル、20GBの非圧縮、および完全に復元された後の〜100GBです。
コマンドライン経由でMySQLに大きなSQLファイルをインポートする
例:mysql -u root -p aanew <aanew.sql