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」になりました!
これでテーブルの最適化ができたようです。

さくらのレンタルサーバーでmysqlコマンドを使用する。

さくらのレンタルサーバーで、mysqlコマンドを使用する方法です。さくらのサポート情報によるとmysqlコマンドは使えるとのことでした。

さくらのサポート情報をもとにMySQL、Wordpressのインストールまで完了。SSHでレンタルサーバにログインし、wp-config.phpの中身を確認してみる。wp-config.phpは以下の場所にあります。

/home/example(※1)/www/wp(※2)

(※1):初期ドメインで指定したアカウント
(※2):Wordpressのインストール時に指定したインストール先

ここで、以下の情報を再確認。

・ユーザ名(DB_USER)
・パスワード(DB_PASSWORD)
・ホスト名(DB_HOST)
・文字コード(DB_CHARSET)
・データベース名(DB_NAME)

早速、SSHでレンタルサーバ接続してmysqlコマンドでDBにアクセスしてみると、、、。

% mysql -u (ユーザ名) -p
Enter password: (パスワードを入力)
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
%

繋がりませんでした・・。

そのあと調べてみてわかりましたが、さくらのレンタルサーバーはアプリケーションサーバーとデータベースサーバーが別なのでホスト名を指定しないと繋がらないようです。以下のようにすると繋がります。

% mysql -h (ホスト名) -u (ユーザ名) -p
Enter password: (パスワードを入力)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is ・・
Server version: 5.7.23-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>
mysql> use (データベース名を入力)
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

さくらのサポート情報にmysqlコマンドが使用できると書いてあったものの、惑わされたため書いておきました。