3

私の会社は、政府からのデータの要求に応じて20GB以上の.sqlファイルを配信されました。別の形式でデータを取得するためのオプションがあまりないので、妥当な時間でデータをインポートする方法のオプションが必要です。Navicatのバッチ実行ツールを使用して、ハイエンドサーバー(Win 2008 64ビット、MySQL 5.1)で実行しています。14時間稼働しており、完了間近の兆候は見られません。

誰かがそのようなトランザクションのためのより高速なオプションを知っていますか?それとも、ファイルサイズが大きいことを考えると、これは私が期待すべきことですか?

ありがとう

4

4 に答える 4

9

mysqldumpデータベースのバックアップとしてによって作成されたファイルであることを意味していると思います。そのため、ほとんどのステートメントCREATE TABLEINSERTステートメントが含まれています。

(ただし、厳密に言えば、SQL スクリプトには、実行時間の長いストアド プロシージャの定義と実行、デッドロックを引き起こすクエリなど、何でも含めることができます。これは当てはまらないと思います。)

バックアップ ファイルがあり、ファイルの種類を変更できない場合に、復元を高速化するためにできることを次に示します。

  1. 外部キー チェックを無効にします: SET FOREIGN_KEY_CHECKS=0(後で再度有効にすることを忘れないでください)。一意のチェックも無効にします。SET UNIQUE_CHECKS=0

  2. key_buffer_sizeMyISAM テーブルを使用する場合は、 ができるだけ大きく設定されていることを確認してください。デフォルトは 8MB で、最大は 4GB です。1GBにしてみました。

    これらの最初のヒントは、Baron Schwartz の投稿 ( http://lists.mysql.com/mysql/206866 ) からのものです。

  3. innodb_buffer_pool_sizeInnoDB テーブルを使用する場合は、 ができるだけ大きく設定されていることを確認してください。デフォルトは 8MB で、最大は 4GB です。1GBにしてみました。

  4. innodb_flush_log_at_trx_commit = 2InnoDB テーブルを使用する場合は、復元中に設定します。

  5. @Mark B は、復元中にキーを無効にするための適切な提案を以下に追加します。これはあなたがそれを行う方法です:

    ALTER TABLE <table-name> DISABLE KEYS;
    ...run your restore...
    ALTER TABLE <table-name> ENABLE KEYS;
    

    ただし、そのコマンドは一度に 1 つのテーブルにしか影響しません。テーブルごとに個別のコマンドを発行する必要があります。とはいえ、1 つのテーブルが他のテーブルよりもはるかに大きい場合が多いため、その 1 つの大きなテーブルに対してのみキーを無効にする必要がある場合があります。

    また、復元を含む SQL スクリプトがテーブルを削除して再作成する場合、これによりキーの無効化が回避されます。テーブルが作成された後、行が挿入される前に、キーを無効にするコマンドを挿入する方法を見つける必要があります。sedmysql クライアントにフィードする前に、SQL スクリプトを前処理する工夫が必要になる場合があります。

  6. --innodb-optimize-keysオプションを指定して、Percona Server バージョンの mysqldump を使用します。

于 2010-05-11T15:22:56.353 に答える
2

周りにはたくさんのツールがありますが、それには Navicat GUI をお勧めします。私の経験では、8GB の RAM を搭載したホストで 6 時間で 48GB の *.sql ファイルを実行できました。

ここでの説明(並べ替え): ここに画像の説明を入力 選択したDBを2番目にクリックし、「SQLファイルの実行」を選択し、ファイルを選択し、必要に応じて「エラー時に続行」を選択して、最後に実行します。MySQL DB が表示されていることはわかっていますが、ほとんどの使用/人気のある DBMS で動作します。

そのような割合のファイルをSQLクエリビルダーで「開く」ことは真剣にお勧めしません。RAMが何度もフル容量になるため、マシンがブロックされます。

これは、Navicat アプリケーションのホストとして Macintosh OS でも機能し、特定の DB サーバーに接続すると、必要な場所で実行でき、これまで RHEL、Ubuntu サーバー、Debian、および Windows サーバーでうまく機能していました。

于 2015-07-02T18:13:29.600 に答える
1

これには、MySQL で BULK Import を使用します。

于 2010-05-11T15:11:45.673 に答える
0

テーブル定義と .csv のデータのみを要求します。次に、一括インポートを行います。

于 2010-05-11T16:51:43.637 に答える