複数の .sql ファイルを MySQL に効率的にインポートする方法の詳細な説明

複数の .sql ファイルを MySQL に効率的にインポートする方法の詳細な説明

MySQL には、複数の .sql ファイル (SQL ステートメントを含む) をインポートする方法が複数あります。よく使用されるコマンドは、mysql と source の 2 つです。

ただし、これら 2 つのコマンドのインポート効率は大きく異なります。詳細については、最終的な比較を参照してください。

(sqlimportやLOAD DATA INFILEなどのインポート方法もありますが、これらは主に.sqlファイルではなく.csvや.xmlファイルのデータをインポートするために使用されます)

大きなファイル users.sql があるとします。便宜上、これを 3 つの独立した小さな sql ファイル、user1.sql、user2.sql、user3.sql に分割します。

1. mysqlコマンドをインポートする

複数の SQL ファイルをインポートするための mysql コマンド:

$ *.sql 内の SQL の場合; do mysql -uroot -p"123456" mydb < $SQL; 完了

2. ソースのインポートコマンド

ソース コマンドでは、まず MySQL コマンド ラインを入力する必要があります。

$ mysql -uroot -p"123456"

複数の SQL ファイルをインポートするには、まず追加のファイルを作成する必要があります。名前は任意です。ここでは、all.sql を使用します。内容は次のとおりです。

ソースuser1.sql
ソースuser2.sql
ソースuser3.sql

各行はソース コマンドで始まる必要があることに注意してください。

次に、source コマンドを使用してファイルを実行します。

mysql > mydb を使用します。
mysql > ソース /home/gary/all.sql

3. インポート速度を向上させるにはどうすればいいですか?

100 MB を超えるファイルの場合、この方法でのみインポートすると速度が非常に遅くなります。

MySQL の公式推奨事項によると、次のようにインポートの速度を大幅に向上できる対策がいくつかあります。

MyISAM の場合、システムパラメータを調整します: bulk_insert_buffer_size (少なくとも 1 つのファイルの 2 倍のサイズ)

InnoDB の場合、システム パラメータ innodb_log_buffer_size を調整します (1 つのファイルのサイズの少なくとも 2 倍。インポートが完了したら、デフォルトの 8M に戻すことができます。innodb_buffer_pool_size ではないことに注意してください)。

インポートが完了したら、主キーを除く他のインデックスを削除し、インデックスを再構築します。

自動コミットをオフにします: autocommit=0。 (set global autocommit=1; コマンドを使用してこれをオフにしないでください。そうしないと、MySQL システム全体の自動コミットが停止し、innodb ログ バッファーがすぐにいっぱいになります。項目 5 と 6 もセッションでのみ有効です。正しい方法については以下を参照してください。)

ユニークインデックスチェックをオフにします: unique_checks=0。 (これをオフにすると、重複キーの更新に影響します)

外部キーのチェックをオフにします: foreign_key_checks=0。

挿入値は、次のように 1 つのステートメントで記述されます: INSERT INTO yourtable VALUES (1,2), (5,5), ...;

自動インクリメント列がある場合は、innodb_autoinc_lock_mode の値を 2 に設定します。

このうち、項目 1 ~ 2 と 8 は my.cnf ファイルを変更し、MySQL を再起動します。

バルク挿入バッファサイズ=2G;
innodb_log_buffer_size = 2G;
innodb_autoinc_lock_mode を 2 に設定します。

第3条で使用されるコマンド:

# インデックスを削除する DROP INDEX index_name ON talbe_name
ALTER TABLE テーブル名 DROP INDEX インデックス名
ALTER TABLE テーブル名 DROP PRIMARY KEY

# インデックスを追加する ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE テーブル名 ADD UNIQUE (列リスト)
ALTER TABLE テーブル名 ADD PRIMARY KEY (column_list)

項目 4 ~ 6 は .sql で記述されており、バッチ bash スクリプトは次のようになります。

*.sql 内の SQL の場合;
する
  $SQL をエコーし​​ます。
  sed -i '1i\SET autocommit=0;\nSET unique_checks=0;\nSET foreign_key_checks=0;' $SQL
  sed -i '$a\COMMIT;\nSET autocommit=1;\nSET unique_checks=1;\nSET foreign_key_checks=1;' $SQL
終わり

上記の手順に従って調整すると、挿入速度が大幅に向上します。

4. MySQLとソースの効率の比較

SQL ファイルが小さい場合、ソースは MySQL よりも高速です。

実際のテストインポートでは、合計サイズが 25 MB の 5 つの SQL ファイルで、mysql コマンドはソースよりも 2 秒高速です (これは私自身のテストであり、一般的な結果を代表するものではありません)。

大まかに言えば、大きな SQL ファイルをインポートする場合は、mysql コマンドを使用することをお勧めします。

以上が、複数の .sql ファイルを MySQL に効率的にインポートする方法です。お役に立てれば幸いです。

以下もご興味があるかもしれません:
  • MySQL コマンドラインから SQL スクリプトをインポートするときに中国語の文字化けが発生する問題の解決方法
  • MySQL インポート SQL スクリプト エラー: 2006 の解決策
  • mysql インポート sql ファイル エラー ERROR 2013 2006 2002
  • mysql import sql file コマンドと mysql リモート ログインの使用方法の詳細な説明
  • Linux で SQL ファイルをインポートする方法 (コマンド ラインを使用して MySQL データベースを転送する)
  • MYSQLデータベースからSQLファイルをインポートする際の文字化けの問題を分析する
  • SQL データをインポートするための MySQL コマンドライン コード
  • Mysql コマンドラインで SQL データをインポートする

<<:  Windows 10 インストール vmware14 チュートリアル図

>>:  Node.js でのブレークポイント再開の実装

推薦する

Dockerイメージのサイズを縮小する6つの方法

2017 年に Vulhub に取り組み始めてから、私は厄介な問題に悩まされてきました。Docker...

Vueライフサイクルの詳細な説明

目次ライフサイクルを理解する理由ライフサイクルとはライフサイクルフック関数作成され、マウントされたフ...

Docker実践: Pythonアプリケーションのコンテナ化

1. はじめにコンテナはサンドボックス メカニズムを使用して相互に分離します。コンテナ内にデプロイさ...

HTML におけるいくつかの特殊属性タグの使用法の紹介

以下の属性はブラウザとの互換性があまりありません。 1.transform:rotate(45度) ...

Vue フロントエンド開発補助機能状態管理詳細例

目次マップ状態マップゲッターマップミューテーションマップアクション例まとめマップ状態コンポーネントが...

Linux での MySQL 5.7.18 yum のアンインストールからインストールまでのプロセスの図

いろいろ苦労しましたが、やっと yum インストールの手順がわかりました。以前、バイナリ パッケージ...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

Mysqlアカウント管理の原理と実装方法の詳細な説明

この記事では、例を使用して、MySQL アカウント管理の原則と実装方法を説明します。ご参考までに、詳...

フロントエンド JavaScript ハウスキーパー package.json

目次1. 必須属性1. 名前2. バージョン2. 説明情報1. 説明2. キーワード3. 著者4. ...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

Linuxグループの基礎知識ポイントまとめ

1. Linuxグループの基本紹介Linux では、すべてのユーザーはグループに所属する必要があり、...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

Tomcat マルチレイヤーコンテナの設計に関する簡単な説明

目次コンテナ階層サーブレットの検索を要求するプロセス仕組みTomcat のコンテナは Servlet...

WeChatアプレットコンポーネントライフサイクルの落とし穴の記録

通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...

Dockerを使用して分散lnmpイメージを作成する

目次1. Docker分散lnmpイメージ生成1. Nginx、MySQL、PHPコンテナを実行する...