WordPressでリビジョン削除後にMySQLのテーブルを最適化する。

前回の記事「WordPressのリビジョンを削除する。」でMySQLのテーブルからリビジョンのレコードを削除しました。頻繁にMySQLでテーブルのデータを削除しているので、最適化を実施してみます。データベースではデータ登録の際、未使用領域から使用していくためデータサイズが大きくなっていきます。データを削除してもまとまった「空き」がなければ未使用領域が使用されます。最適化を行うことで空き領域をまとめ、そこにデータが書き込まれるようになるためディスク領域の有効活用ができるようになります。また、データの断片化が解消されるためパフォーマンスも良くなります。

[広告]


前回と同様、最適化を行ったMySQLのバージョンは、5.7.23 です。

■OPTIMIZE TABLE テーブル名

最適化を行うMySQLの命令文は「OPTIMIZE TABLE テーブル名」です。WordPressの記事が書かれているテーブルは「wp_posts」テーブルであるため、このテーブルを最適化してみることにします。

mysql> OPTIMIZE TABLE wp_posts;

以下が実行結果です。

問題なく最適化できると思っていたのですが、どうやらこの結果ではダメっぽい。そもそも、statusが「Operation failed」となっているし。「Invalid default value for 'post_date'」というのが原因らしいけれど、さっぱり見当がつきません。
※'post_date'というのは、wp_postsテーブルが持つカラムの一つだけれど、それ以上のことは不明。。

しばらくわからなかったけれども、ある時以下の情報を見つけました。

MySQL 5.6.6 以降でのデフォルトのSQL モードは NO_ENGINE_SUBSTITUTION で、MySQL 5.6.5 以前では、これは空白です (モードの設定なし)。

で、以下をやってみた。

mysql> SET sql_mode = '';

その後、再度、OPTIMIZE TABLE を実行。

「Invalid default value for 'post_date'」が消え、statusが「OK」になりました!
これでテーブルの最適化ができたようです。

WordPressのリビジョンを削除する。

WordPressを使用していて「下書きとして保存」をしていると、リビジョンが溜まってしまいます。このリビジョンを削除する方法です。プラグインを使わず、MySQLからレコードを削除してリビジョンを消します。

MySQLのバージョンは、5.7.23 です。

なお、リビジョンを含め投稿記事が格納されているテーブルは「wp_posts」というテーブルになります。

1.データベースにログインします。

$ mysql -u (ユーザ名を入力) -p
Enter password: (パスワードを入力)

mysql> use (データベース名を入力)

2.テーブルの状態を確認します。

mysql> select ID, post_status, post_type from wp_posts;
(※出力結果は、抜粋です)
+—–+————-+———————+
| ID | post_status | post_type |
+—–+————-+———————+
| 26 | trash    | page   | ←(※1)
| 28 | publish   | post   | ←(※2)
| 20 | publish   | post   |
| 27 | publish   | post   |
| 15 | trash    | post   | ←(※3)
| 18 | inherit   | revision | ←(※4)
| 16 | inherit   | revision | ←(※4)
+—–+————-+———————+

(※1) 固定ページがゴミ箱に入れらたもの
(※2) 公開記事
(※3) 投稿がゴミ箱に入れらたもの
(※4) リビジョン

リビジョンは、post_status が inherit、post_type が revision となっているので、この条件で消す(Deleteする)ことにします。

3.レコードの削除をします。

mysql> delete from wp_posts where post_status = 'inherit' and post_type = 'revision';
mysql> commit;
mysql> exit
Bye

以上。