質問: mysqlダンプから復元するためにmysqlを調整する方法は? mysqldumpを介してダンプするのに5分かかる私の小さな5gbデータベースは、復元するのに9時間かかります。幸いなことに、実際の緊急事態ではなく、テスト実行中にこれを発見しました。これをスピードアップするために最適化するのに最適なパラメータは何ですか?2gbのramを搭載したサーバーで次の設定を試しました。innodb_buffer_pool_size=512m innodb_additional_mem_pool_size=50m innodb_file_per_table innodb_flush_method=o_direct innodb_flush_log_at_trx_commit=0 innodb_log_file_size=1g innodb_log_buffer_size=1g 奇妙なことに、これらのaggresssize設定を使用しても、topは、mysqldが割り当てられたメモリの一部をほとんど使用していないことを示しています。 pid user pr ni virt res shr s %cpu %mem time+ command 4421 mysql 20 0 247m 76m 5992 s 91 3.7 4:09.33 mysqld
回答: ダンプの復元に時間がかかりすぎるという同様の状況に直面しました。私の場合、mysqlインデックスの作成を延期することで、復元を3〜10倍高速化することができました。つまり、インデックスは挿入ごとに再計算されます。したがって、テーブル全体のインデックスを一度に計算することをお勧めします。mysqlがデータをエクスポートする方法の例を次に示します。create table `some_table` ( `id` int(11) not null auto_increment, `some_column` varchar(255) not null, `other_column` varchar(255) not null, primary key (`id`), unique key `uk_some_column` (`some_column`), key `idx_other_column` (`other_column`) ); insert into `some_table` (`id`, `some_column`, `other_column`) values (...), (...), ... ; インデックスのあるテーブルに数百万の行がある場合、挿入後にインデックスが適用されたかのように、はるかに長く復元されます。挿入後にインデックス作成ステートメントを移動するだけで、インポート速度が向上します。create table `some_table` ( `id` int(11) not null auto_increment, `some_column` varchar(255) not null, `other_column` varchar(255) not null, primary key (`id`) ); insert into `some_table` (`id`, `some_column`, `other_column`) values (...), (...), ... ; alter table `some_table` add unique key `uk_some_column` (`some_column`), add key `idx_other_column` (`other_column`); 上記の変換を行う単純なpythonスクリプトについては、 私のリポジトリ を確認してください。