おっしゃるとおり、を kill してもALTER TABLE
、テーブルの新しいコピーを作成しようとし続けます。この操作は、そのステップが完了した後にのみ「強制終了」されます。kill -9
mysqld プロセス以外では、中断する方法はありません。ディスク容量が不足するとエラーが発生することに注意してください。ALTER TABLE
その時点で中止し、一時テーブルをクリーンアップしてから終了すると思います。
変更のフラッシュに関する質問については、によって行われている作業をフラッシュするコマンドはありませんALTER TABLE
。他のタイプの変更の場合、set global innodb_fast_shutdown=0
mysqld をシャットダウンすると、バッファ プール内のすべてのダーティ ページがフラッシュされ、ロールバック セグメント内のガベージがパージされ、変更バッファ内の保留中のインデックス変更がマージされます。しかし、これは に対しては何もしませんALTER TABLE
。その結果、シャットダウンALTER TABLE
が完了するまで待機することになると思います。
バッファープールに関する質問については、別の値を指定しない場合、デフォルトの innodb_buffer_pool_sizeは 128MB です。構成ファイルで 8GB に設定する必要があります。Ubuntu は/etc/mysql/conf.d
複数の構成ファイルが存在するディレクトリをサポートしており、これはこれらの構成ファイルのいずれかに設定できることに注意してください。
大きな ibdata1 ファイルがあり、余分なスペースを占有するものは何もないかもしれません。
一時テーブルは、MySQL での処理が完了するとクリーンアップされますが、使用中に ibdata1 ファイルのサイズが増加した可能性があります。MySQL は ibdata1 ファイルを縮小しませんが、割り当てられたスペースを後のデータに再利用します。
はい、ibdata1 を縮小する唯一の方法は、すべての InnoDB データをダンプし、mysqld をシャットダウンしrm
、ibdata1 ファイルをフィジカル化し、mysqld を起動してから、ダンプしたデータを再インポートすることです。これは、長年にわたって MySQL ユーザーにとって大きな不便でした。
innodb_file_per_table
今後この問題に直面しないように、データをインポートする前に有効にすることをお勧めします。MySQL は引き続きグローバル InnoDB データ用に ibdata1 を必要としますが、サイズは小さくなるはずです。また、InnoDB テーブル (一時的かどうかにかかわらず) を削除または変更すると、ディスク領域の一部が再利用されます。これは実際、MySQL 5.6 ではデフォルトで有効になっています。
mysqld は、いくつかの場所で my.cnf を探します。
- /var/lib/mysql/my.cnf (データディレクトリ)
- /usr/my.cnf (ベースディレクトリ)
- /etc/my.cnf
したがって、それらの場所をチェックして、 のミステリー設定を持つ別の my.cnf を探しますinnodb_buffer_pool_size=8G
。
MySQL が my.cnf を見つける方法の詳細については、http://dev.mysql.com/doc/refman/5.6/en/option-files.html を参照してください。