【WP】不要なリビジョンをphpMyAdminで削除する

【WP】不要なリビジョンをphpMyAdminで削除する

thumbnail SQL(phpMyAdmin) wp-note

データベースのダウンロードに時間が掛かるようになり、どうも執筆時の自動保存されるリビジョン(投稿履歴)が大量にあるみたいなのでphpMyAdminのSQL文で削除してみました。

【WP】不要なリビジョンをphpMyAdminで削除する

因みに力を入れて書いた記事に248個ものリビジョンが保存されていました。

【WP】不要なリビジョンをphpMyAdminで削除する

 

 

リビジョンがどれほど溜まっているか調べる

ドメインを取得して運用サイトのコピーサイト(非公開)を作っているんですがそちらの開発環境サイトで行いました。

まずはデータベース最適化プラグイン「Optimize Database after Deleting Revisions」でどのくらいのリビジョンデータがたまっているか調べてみました。

設定は「post(投稿記事)」と「Delete revisions older than」にチェックを入れてすべてリビジョンを削除するように「0」にしました。

Delete revisions older than → 0

【WP】不要なリビジョンをphpMyAdminで削除する

最適化ページに移行して「analyze (summary)」をクリックするとどのくらいリビジョンがたまっているか確認できます。「analyze (detail)」を選択するとどのページにどれだけのリビジョンが残っているかまで細かく表示されます。

6255個のリビジョンが溜まっていることが分かりました。

【WP】不要なリビジョンをphpMyAdminで削除する

 

 

phpMyAdminでテーブルの状態を確認

リビジョンはデータベースのwp_postsテーブルのpost_typeに保存されています。

phpMyAdminにログインしてQSL(クエリ)メニューを開き、テキストボックスに以下の命名文を記載して実行。

PHP
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’にすると「返り値が空でした」とメッセージで表示されて抽出できませんでした。

【WP】不要なリビジョンをphpMyAdminで削除する

実行すると下図のようなpost_type=revisionのデータを抽出できます。

【WP】不要なリビジョンをphpMyAdminで削除する

リビジョン数が「Optimize Database after Deleting Revisions」で確認した数値より10個多い6265個となっていました。

【WP】不要なリビジョンをphpMyAdminで削除する

CSVでエクスポートして中身を確認したところ、タイトルのないリビジョンが22個ありました。

ただ、それらのリビジョンだと数が合わないですし、もしかしたら「revisions older than」の設定を「0」にしてもすべての投稿のリビジョンまでは削除できないのかも知れません。

【WP】不要なリビジョンをphpMyAdminで削除する

 

 

SQL文でリビジョンを削除

以下のDELETE文をSQLクエリに記載して実行します。

PHP
DELETE FROM wp_posts WHERE post_status = 'inherit' AND post_type = 'revision';
注意事項マネされる方はミスったら元に戻せないみたいなので必ずバックアップやコピー等を取ってから作業して下さい。

結果は以下のような感じです。

96.1MiB だったのが 67.0 MiB まで下がり、約1/3ほどデータベースの容量を削減できました。

【WP】不要なリビジョンをphpMyAdminで削除する

 

 

オマケ 意図しない感じでデータベースを削除してしまう!

wp_postsのコピーを作成してコピーした方でテストする筈だったんですが、ミスでコピー元のリビジョンの方を削除してしまいました。

【WP】不要なリビジョンをphpMyAdminで削除する

原因はQSL文の確認ミスです。

参考サイトからコピペしたものがSELECT文だと勘違いしていて、またwp_post_copy1というテーブルで削除するつもりがSQL文にFROM wp_postsと書いてたのに気付かずに実行してしまいました。

テストサイトでしかもリビジョンだったのでまだいいですが、これが本チャンのサイトの重要なデータだったらと思うとやはりデータベースの操作はより慎重に行わないといけないと真に思いました。