sql >> データベース >  >> RDS >> Mysql

mysqldumpを使用してMySQLInnoDBデータベースをダンプおよびロードする最も簡単な方法は何ですか?

    静止したデータベースをすばやくダンプする:

    mysqldumpで「-T」オプションを使用すると、指定したディレクトリに多数の.sqlファイルと.txtファイルが作成されます。これは、INSERTステートメントを含む単一の.sqlファイルよりも大きなテーブルをダンプする場合に約50%高速です(壁掛け時計の時間が1/3短縮されます)。

    さらに、複数のテーブルを並行してロードし、複数のコアを飽和させることができれば、復元するときに大きなメリットがあります。 8コアのボックスでは、これは、「-T」によって提供される効率の向上に加えて、ダンプを復元するための壁掛け時計の時間の8倍の差になる可能性があります。 「-T」を使用すると、各テーブルが個別のファイルに保存されるため、大規模な.sqlファイルを分割するよりも並列にロードする方が簡単です。

    上記の戦略を論理的に極端にすると、データベースを広く並行してダンプするスクリプトを作成できます。まあ、それはまさにMaakit mk-parallel-dumpです( http:/を参照) /www.maatkit.org/doc/mk-parallel-dump.html )およびmk-parallel-restoreツールは;基盤となるmysqldumpプログラムを複数回呼び出すperlスクリプト。ただし、これらを使用しようとすると、バニラダンプでは発生しなかった重複キーエラーなしで復元を完了するのに問題があったため、マイレージが異なる場合があることに注意してください。

    LIVEデータベースからのデータのダンプ(サービスの中断なし):

    --single-transactionスイッチは、ライブデータベースを静止せずにダンプを取得したり、スレーブデータベースのダンプを停止せずに取得したりする場合に非常に便利です。

    残念ながら、-Tは--single-transactionと互換性がないため、1つしか取得できません。

    通常、ダンプを取得する方が、復元するよりもはるかに高速です。入ってくるモノリシックダンプファイルを取得し、それを複数の部分に分割して並列にロードするツールの余地はまだあります。私の知る限り、そのようなツールはまだ存在していません。

    ネットワークを介してダンプを転送することは、通常、勝利です

    1つのホストで着信ダンプをリッスンするには、次のコマンドを実行します。

    nc -l 7878 > mysql-dump.sql
    

    次に、DBホストで、

    を実行します。
    mysqldump $OPTS | nc myhost.mydomain.com 7878
    

    これにより、マスター上のディスクスピンドルがダンプをディスクに書き込む際の競合が減少し、ダンプがわずかに高速化されます(ネットワークが維持するのに十分な速度であると仮定すると、同じデータセンター内の2つのホストに対してかなり安全な仮定です)。さらに、新しいスレーブを構築する場合、これにより、終了後にダンプファイルを転送する必要がなくなります。

    警告-明らかに、耐えられないほど遅くならないように十分なネットワーク帯域幅が必要です。TCPセッションが中断した場合は、最初からやり直す必要がありますが、ほとんどのダンプでは、これは大きな問題ではありません。

    最後に、よくある混乱の1点を明らかにしたいと思います。

    mysqldumpの例とチュートリアルでこれらのフラグが頻繁に表示されますが、デフォルトでオンになっているため、不要です。

    • -opt
    • -add-drop-table
    • -add-locks
    • -create-options
    • -disable-keys
    • -extended-insert
    • -lock-tables
    • -クイック
    • -set-charset

    http://dev.mysql.com/doc/refman/から5.1 / en / mysqldump.html

    これらの動作の中で、「-quick」は最も重要なものの1つであり(最初の行を送信する前に結果セット全体をmysqldにキャッシュすることをスキップします)、「mysql」(デフォルトでは--quickをオンにしません)を使用できます。大きな結果セットを返すクエリを劇的に高速化するため(たとえば、大きなテーブルのすべての行をダンプする)。



    1. 削除後にSQLServerで自動インクリメントをリセットする

    2. SQL-2つの異なるテーブルから行を選択します

    3. MYSQLでの削除時に同じテーブルを更新するにはどうすればよいですか?

    4. 外部phpファイルJoomlaにJfactoryクラスを含める