1.导入备份的数据到表中,表是innodb引擎,900w多条,导入时用了将近9小时2.下面是sh脚本代码片段
`$MYSQL -u$dbUser -h$dbHost -p$dbPassword --default-character-set=utf8 $dbName < $mysqlImportFile`
3.问题: 1)时间是否正常导了这么长时间 2)有没有更快速的方法 3)网上找的方法是先关闭事务
SET autocommit=0; 在脚本里应该如何写呢?
认证高级PHP讲师
1. インデックスは最初に削除し、インポートが完了した後に追加できます。 2. バイナリログをオフにします。 (ディスク書き込みを減らす) 3.buffer_pool は可能な限り調整できます。 (ディスク書き込みを減らす)4. redo_log サイズをどれくらい大きくするか (チェックポイントを減らす)5. フラッシュ隣接を開く (連続ディスク書き込みを増やす)6. flash_at_trx_commit=0 (ディスク書き込みを減らす)7 、 5.7 は、myisam テーブルをコピーするのと同じように ibd を直接コピーできます。高速かどうかはわかりません (比較はしていません)
/etc/my.cnf 構成を変更しますautocommit=0 を追加します。log-bin=mysql-bin をコメントアウトします (当面はマスター/スレーブ構成要件はありません) インポート速度は確かにはるかに高速です
インポート後に autocommit=0 を削除するように注意してください。削除しないと、テーブルの変更操作が実行されないため、手動で送信する必要があります。
トランザクションのバッチ インポートを有効にすると、速度が非常に速くなります。Ubuntu (i5-3230M) 5.6 上の PHP では 1 秒あたり 5000 件を超えるレコードを挿入できます。つまり、900 万件のデータをインポートするのに必要な時間は 9000000/5000/60 だけです。 . = 30 分。 MySQL InnoDB では、INSERT/UPDATE/DELETE などのすべての書き込み操作がトランザクションとして自動的に送信されることに注意してください。 そのため、最初に自動送信を無効にする必要があります。 SET AUTOCOMMIT=0トランザクションを開き、最後にSTART TRANSACTION手動で送信します。COMMIT
SET AUTOCOMMIT=0
START TRANSACTION
COMMIT
log-bin バイナリ ログを無効にします。general_log 監査ログを無効にします。毎回の書き込みを無効にするには、innodb_flush_log_at_trx_commit を設定します。トランザクションが送信されます。innodb_buffer_pool_size を増やします。
1. インデックスは最初に削除し、インポートが完了した後に追加できます。
2. バイナリログをオフにします。 (ディスク書き込みを減らす)
3.buffer_pool は可能な限り調整できます。 (ディスク書き込みを減らす)
4. redo_log サイズをどれくらい大きくするか (チェックポイントを減らす)
5. フラッシュ隣接を開く (連続ディスク書き込みを増やす)
6. flash_at_trx_commit=0 (ディスク書き込みを減らす)
7 、 5.7 は、myisam テーブルをコピーするのと同じように ibd を直接コピーできます。高速かどうかはわかりません (比較はしていません)
/etc/my.cnf 構成を変更します
autocommit=0 を追加します。
log-bin=mysql-bin をコメントアウトします (当面はマスター/スレーブ構成要件はありません)
インポート速度は確かにはるかに高速です
インポート後に autocommit=0 を削除するように注意してください。削除しないと、テーブルの変更操作が実行されないため、手動で送信する必要があります。
トランザクションのバッチ インポートを有効にすると、速度が非常に速くなります。Ubuntu (i5-3230M) 5.6 上の PHP では 1 秒あたり 5000 件を超えるレコードを挿入できます。つまり、900 万件のデータをインポートするのに必要な時間は 9000000/5000/60 だけです。 . = 30 分。
さらに、ログ書き込み操作を減らすと、書き込みパフォーマンスも向上します。MySQL InnoDB では、INSERT/UPDATE/DELETE などのすべての書き込み操作がトランザクションとして自動的に送信されることに注意してください。
そのため、最初に自動送信を無効にする必要があります。
SET AUTOCOMMIT=0
トランザクションを開き、最後にSTART TRANSACTION
手動で送信します。COMMIT
log-bin バイナリ ログを無効にします。
general_log 監査ログを無効にします。
毎回の書き込みを無効にするには、innodb_flush_log_at_trx_commit を設定します。トランザクションが送信されます。
innodb_buffer_pool_size を増やします。