【WP】不要なリビジョンをphpMyAdminで削除する
データベースのダウンロードに時間が掛かるようになり、どうも執筆時の自動保存されるリビジョン(投稿履歴)が大量にあるみたいなのでphpMyAdminのSQL文で削除してみました。
因みに力を入れて書いた記事に248個ものリビジョンが保存されていました。
リビジョンがどれほど溜まっているか調べる
ドメインを取得して運用サイトのコピーサイト(非公開)を作っているんですがそちらの開発環境サイトで行いました。
まずはデータベース最適化プラグイン「Optimize Database after Deleting Revisions」でどのくらいのリビジョンデータがたまっているか調べてみました。
設定は「post(投稿記事)」と「Delete revisions older than」にチェックを入れてすべてリビジョンを削除するように「0」にしました。
Delete revisions older than → 0
最適化ページに移行して「analyze (summary)」をクリックするとどのくらいリビジョンがたまっているか確認できます。「analyze (detail)」を選択するとどのページにどれだけのリビジョンが残っているかまで細かく表示されます。
6255個のリビジョンが溜まっていることが分かりました。
phpMyAdminでテーブルの状態を確認
リビジョンはデータベースのwp_posts
テーブルのpost_type
に保存されています。
phpMyAdminにログインしてQSL(クエリ)メニューを開き、テキストボックスに以下の命名文を記載して実行。
SELECT
ID,
post_title,
post_type
FROM
wp_posts
WHERE
post_type='revision' AND post_status = 'inherit'
AND post_status = 'inherit'
自体を記載しなくてもリビジョンを抽出できますが抽出できないデータがあるかも知れません。
post_status = 'inherit'
は投稿に添付しているメディアファイルやリビジョンに付けられる投稿ステータスで親の投稿ステータスを引き継ぐので’post’とほぼ同じような意味合いなんですが’post’にすると「返り値が空でした」とメッセージで表示されて抽出できませんでした。
実行すると下図のようなpost_type=revisionのデータを抽出できます。
リビジョン数が「Optimize Database after Deleting Revisions」で確認した数値より10個多い6265個となっていました。
CSVでエクスポートして中身を確認したところ、タイトルのないリビジョンが22個ありました。
ただ、それらのリビジョンだと数が合わないですし、もしかしたら「revisions older than」の設定を「0」にしてもすべての投稿のリビジョンまでは削除できないのかも知れません。
SQL文でリビジョンを削除
以下のDELETE文をSQLクエリに記載して実行します。
DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';
結果は以下のような感じです。
96.1MiB だったのが 67.0 MiB まで下がり、約1/3ほどデータベースの容量を削減できました。
オマケ 意図しない感じでデータベースを削除してしまう!
wp_postsのコピーを作成してコピーした方でテストする筈だったんですが、ミスでコピー元のリビジョンの方を削除してしまいました。
原因はQSL文の確認ミスです。
参考サイトからコピペしたものがSELECT文だと勘違いしていて、またwp_post_copy1
というテーブルで削除するつもりがSQL文にFROM wp_posts
と書いてたのに気付かずに実行してしまいました。
テストサイトでしかもリビジョンだったのでまだいいですが、これが本チャンのサイトの重要なデータだったらと思うとやはりデータベースの操作はより慎重に行わないといけないと真に思いました。