読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

負荷かけず、ゆるやかにdrop tableを実行するスクリプトをつくってみた

php mysql

稼働中のサービスで安全にdrop tableする方法

こちらで記載した内容のことを実行するスクリプトをつくってみました

drop_table_gently

READMEに記載してある通りですが、

DBの設定情報を記載したini,とdropしたいテーブルを羅列したcsvを用意すれば、それにそってゆるやかにdrop tableする感じです。

ゆるやかにdropするおおまかな処理の流れ

  1. 実行前チェックとして、DBサーバーがリモート場合はsshできるか、data_fileがあるか確認を行う
  2. drop対象のテーブルのdumpファイルを保存
  3. dropするテーブルの関連データファイルに対して、ハードリンクを貼ります ハードリンクを貼ることでdrop時にデータファイルの同期的な削除を防ぎます
  4. drop tableを実行
  5. ハードリンクを貼ったファイルをtruncateコマンドで徐々にサイズを切り詰めた後に、rmを行います

中々強引にphpから外部コマンドを実行して,mydqldump,truncate,rm等々行っているので、事前にdry_runして実行されるコマンドを確認してから、実行してくださいませ・・・