インシデント調査(1), プラグインを削除したらデータが消えた

先日、利用していないプラグインを全て削除した。
WordPressの管理画面にて、無効化されているプラグインを削除するという単純な作業。

その翌日、予約システムのデータが全て消えているという問題の報告があった。

あわてて調査したところ、原因が判明した。「A(仮名)」というプラグインを削除したのが原因。
予約システムは「A+(仮名)」という有償プラグインを利用しているが、それの無償版にあたる。

予約システムの構築にあたり「A」を試したところ、十分に使えそうだったので「A+」に切り替えた。
その時点で、「A」を無効化した状態にしていた。

今回、無効化されていた「A」を削除した結果、「A+」のデータが削除されてしまったということ。
なぜ、こんなことが起きるのか、調査してみた。

プラグインのファイルを調査したところ、uninstall.phpというファイルが見つかった。
名前からプラグインの削除時に実行されるファイルに見える。
このファイルでは、DELETE及びDROPのSQL文が書かれている。
投稿タイプがCの投稿、及びD, Eテーブルを削除するように見える。

<?php

global $wpdb;

$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE 'C%'");
$wpdb->query("DROP TABLE " . $wpdb->prefix . 'D');
$wpdb->query("DROP TABLE " . $wpdb->prefix . 'E');

無償版でも同じテーブル、投稿タイプを利用しているようなので、無償版の削除時にデータが消えたということ。

対策:

事前にバックアップを取得していたので、データ復旧は出来た。

WordPressのベストプラクティスは使っていないプラグインを定期的に削除すること。
ただし、削除にはリスクが伴う、という教訓になった。バックアップは大事ですね。