Pocket

WordPress MySQLのストレージエンジン変更(InnoDB→MyISAM)

  • add this entry to hatena bookmark

WordPressのデータベースMySQL 5.5 のストレージエンジンを、デフォルトのInnoDBからMyISAMに変更しました。経緯と変更作業を記録しておきます。

今までの課題

WordPressの速度の遅さが課題になっていました。WordPressの高速化を図るプラグイン(キャッシュファイルの作成)などを導入しており、一定の速度は確保していますが、WordPressにログインしている際にはキャッシュは利かせないので、かなり遅い状態でした。(10秒以上待つ感じ)

そろそろ何とか対策を打ちたいと考えていた中、データベースとして使っているMySQLのストレージエンジンをMySQL5.5のデフォルトである「InnoDB」から「MyISAM」に変更してみて効果があったとの情報がありましたので、今回私も変更してみました。結果はしばらく動かしてみた後に判断したいと考えていますが、まずは、その作業記録を行っておきます。

my.cnf の変更

/etc/my.cnf で、以下の設定を入れました(抜粋です)。

[mysqld]
default-storage-engine=MyISAM

skip-innodb も入れていたのですが、後の手順の、WordPress既存テーブルのストレージエンジン変更時に、InnoDBをサポートさせておかないと以下のようなエラーが出た為、skip-innodbは一旦はずしました。(後であらためて設定すると思いますが)

mysql> alter table wp_posts engine=MyISAM;
ERROR 1286 (42000): Unknown storage engine 'InnoDB'
mysql>

その後、MySQLを再起動します。

WordPressの表で、ストレージエンジンを変更

mysql でWordPress用データベースに接続し、「show engines;」でストレージエンジンの状態を確認します。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MyISAM             | DEFAULT | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.02 sec)

mysql>

MyISAM が DEFAULT になり、InnoDB は YES になっています。(今後問題が起こらなければ、InnoDB が NO になるように、skip-innodb を my.cnf に入れる予定。)

次に、WordPressの表でどのストレージエンジンが設定されているのかを「show table status;」で確認します。すると各表(私の環境では以下にあげる計12個のテーブル)の「Engine」が InnoDB になっていることが確認できます。
次のSQLコマンドで、InnoDB から MyISAM に変更します。

mysql> alter table wp_commentmeta engine=MyISAM;
mysql> alter table wp_comments engine=MyISAM;
mysql> alter table wp_links engine=MyISAM;
mysql> alter table wp_options engine=MyISAM;
mysql> alter table wp_postmeta engine=MyISAM;
mysql> alter table wp_posts engine=MyISAM;
mysql> alter table wp_posts_relations engine=MyISAM;
mysql> alter table wp_term_relationships engine=MyISAM;
mysql> alter table wp_term_taxonomy engine=MyISAM;
mysql> alter table wp_terms engine=MyISAM;
mysql> alter table wp_usermeta engine=MyISAM;
mysql> alter table wp_users engine=MyISAM;

以上で、WordPressの表でもストレージエンジンが MyISAM に変更できました。

あとはしばらく動かしながら、早くなったかを判断したいと思います。

※ 早くなったら、このマシンのMySQLは、WordPress専用で使うことになると思います・・・。

Pocket

2 thoughts on “WordPress MySQLのストレージエンジン変更(InnoDB→MyISAM)

  1. Pingback: mysqlのストレージエンジン変更 | log

  2. Pingback: epgrec のストレージエンジン「MyISAM」へ変更 ← PCと映画とテレビと、3rd

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。