状況
DB サーバーで、テーブルを作り直す(一時的に同じ大きさのコピーを作る)ALTER TABLE を始める前に、作業者が df -h を実行した。
作業前に止めるべき点は?
$ df -hFilesystem Size Used Avail Use% Mounted on/dev/nvme0n1p1 30G 18G 12G 60% //dev/nvme1n1 200G 196G 4.0G 98% /var/lib/mysql正答
- / が 60% 使われているので、先にログを消して空けるべき
- 単位が G で丸められているので、正確な値を -k で確かめるべき
- /var/lib/mysql の空きが 4.0G しかなく、コピーを作る ALTER で溢れる
- nvme0n1p1 と nvme1n1 で名前の形式が違うので、マウントを確認すべき
解説
テーブルを作り直す ALTER TABLE は、元のテーブルと同じくらいの一時領域を DB のデータ領域に使う。/var/lib/mysql の空きは 4.0G しかなく、対象テーブルが大きければ途中でディスクが溢れ、ALTER が失敗するだけでなく他の書き込みもできなくなり、DB が止まる。対象テーブルの大きさを確かめ、空きを確保してから行う。/ の 60% は余裕があり今回の作業とは関係しない。パーティション名の形式の違いはよくあること。
参考: www.gnu.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ