序文: 日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、データの移行、データの回復、新しいスレーブ データベースの作成などです。これらの操作には、大量のデータのインポートが伴う場合があります。インポートの進行が遅く、コンピューターのファンが激しく回転しているときがあり、非常にイライラします。実際、インポートを高速化できるヒントがいくつかあります。この記事では、データをすばやくインポートする方法について説明します。 注: この記事では、論理バックアップによって生成された SQL スクリプトをすばやくインポートする方法のみを説明し、他のファイル形式については現時点では説明しません。 1. インポートするファイルのサイズを小さくしてみてください まず、提案させていただきたいのですが、データのエクスポートやインポートを行う際は、MySQL に付属しているコマンドラインツールを使用するようにし、Navicat や workbench などのグラフィカルツールは使用しないでください。特に大量のデータを扱う場合、MySQL の組み込みコマンドラインツールを使用したエクスポートとインポートは、Navicat などのグラフィカルツールを使用するよりも数倍高速です。さらに、Navicat などのグラフィカルツールは、大量のデータに対して操作を実行すると簡単に停止する可能性があります。以下は、MySQL に付属するコマンドライン ツールを使用してインポートおよびエクスポートを行う方法の簡単な紹介です。 # インスタンス全体をエクスポートします。mysqldump -uroot -pxxxxxx --all-databases > all_database.sql # 指定されたライブラリをエクスポートします mysqldump -uroot -pxxxxxx --databases testdb > testdb.sql # 指定されたテーブルをエクスポートします mysqldump -uroot -pxxxxxx testdb test_tb > test_tb.sql #指定されたSQLファイルをインポートします(testdbライブラリへのインポートを指定します) mysql -uroot -pxxxxxx testdb < testdb.sql インポートされた SQL スクリプトのほとんどは、最初にデータベースとテーブルを作成し、次にデータを挿入します。最も時間のかかる部分は、おそらくデータの挿入です。ファイル サイズを縮小するには、拡張挿入メソッド、つまり insert into table_name values (),(),(),...,(); のように複数の行をまとめてバッチ挿入する方法を使用することをお勧めします。拡張挿入を使用すると、ファイル サイズが大幅に小さくなり、1 つずつ挿入する場合よりも挿入速度が数倍速くなります。 mysqldump を使用してエクスポートされたファイルは、デフォルトでバッチ挿入方式を使用します。エクスポート時に、--skip-extended-insert パラメータを使用して、1 つずつ挿入するように変更できます。以下では、1,000 万のデータ ポイントを含むデータ テーブルを例に、さまざまな方法でエクスポートされたファイルを挿入する速度をテストします。 上図からわかるように、拡張挿入を使用して SQL スクリプトをインポートするには約 10 分かかりますが、SQL スクリプトを 1 つずつインポートすると時間がかかりすぎて、約 1 時間経ってもまだ完了しません。2G を超えるテキストのインポートが 1 時間以上完了せず、作成者は待ちきれず手動でキャンセルしますか? ただし、複数のエントリをまとめて挿入すると、データを 1 つずつ挿入するよりも数倍の時間を節約できることがわかります。 2. インポートを高速化するためにパラメータを変更してみる MySQL には、innodb_flush_log_at_trx_commit と sync_binlog という有名な「ダブル ワン」パラメータのペアがあります。セキュリティ上の理由から、これら 2 つのパラメータのデフォルト値は 1 です。スクリプトをすばやくインポートするために、これら 2 つのパラメータを一時的に変更できます。以下は、これら 2 つのパラメータの簡単な紹介です。
これら 2 つのパラメータはオンラインで変更できます。すばやくインポートしたい場合は、次の手順に従ってください。 # 1. MySQL コマンドラインを入力して、これら 2 つのパラメータを一時的に変更します。set global innodb_flush_log_at_trx_commit = 2; グローバルsync_binlogを2000に設定します。 # 2. SQLスクリプトを実行してmysqlをインポートします -uroot -pxxxxxx testdb < testdb.sql # 3. インポートが完了したら、パラメータを元に戻して、global innodb_flush_log_at_trx_commit = 1 に設定します。 グローバルsync_binlogを1に設定します。 新しいスレーブ データベースを作成する必要がある、または binlog を生成する必要がないという別のシナリオもあります。この場合、SQL スクリプトをインポートするときに一時的に binlog を記録しないように設定できます。スクリプトの先頭に set sql_log_bin=0; を追加してからインポートを実行すると、プロセスがさらに高速化されます。 MySQL インスタンスで binlog が有効になっていない場合は、このステートメントを実行する必要はありません。 要約: この記事では主にデータを素早くインポートする方法を紹介します。データのロードやマルチスレッド挿入用のプログラムの作成など、データを素早くインポートする方法は他にもあるかもしれません。この記事で説明する方法は、SQL スクリプトを手動でインポートする場合にのみ適しています。以下は、この記事で説明した方法の概要です。
実際には、最初にインデックスを作成せず、データを挿入した後にインデックスを追加する、最初にテーブルを MyISAM または MEMORY エンジンに変更し、インポートが完了した後に InnoDB エンジンに変更するなど、他の解決策もいくつかあります。しかし、これら 2 つの方法は実装が面倒であり、その効果も不明です。上記の方法は、著者の個人的な経験に基づく要約に過ぎず、包括的ではない可能性があります。追加していただいても結構です。 上記は、MySQL にデータを素早くインポートする方法の詳細です。MySQL へのデータのインポートの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: jQueryは従業員情報の追加と削除の機能を実装します
>>: Windows 10 は使いにくいです。Ubuntu をカスタマイズするにはどうすればいいでしょうか?
最近、古い RN プロジェクトを Xcode で実行すると、次のコード エラーが報告されました。 &...
<br />著者はかつてWebデザインの初心者でしたが、継続的な探求と実践を通じて、今で...
昨年の前半から開発と娯楽のために Linux を使い始めましたが、今では Windows には戻れま...
ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...
MySQL公式サイトのzipファイルのダウンロードリンク https://dev.mysql.co...
目次1. 準備Redisイメージを取得する2. Redis Sentinel マスタースレーブモード...
序文現在、私はコースウェア PPT のオンライン プレビューを必要とする高品質のコースに取り組んでい...
目次事件の原因解剖学ファイルの並べ替えファイルのソートが非常に遅いのですが、他に解決策はありますか?...
ウェブページを画像としてキャプチャする新機能があったので、人気のhtml2canvasを使ってみまし...
目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...
これが何を指しているのかをどのように判断するのでしょうか? ①グローバル環境で呼び出された場合はwi...
1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....
序文これは、オンライン コンテナーの拡張によって発生した調査です。最終的には、実際の OOM が原因...
この記事では、例を使用して、MySQL イベントの変更 (ALTER EVENT)、イベントの無効化...
序文起源は質問 1 です: umask が 022 に設定されている場合、作成するファイルのデフォル...