テーブルの接頭辞をインストール後に変更する

こちらの記事でwp-config.phpの初期設定について記述しましたが、うっかりテーブルの接頭辞をデフォルトのままで運用していたりしませんか?はい、私がそうです。

デフォルトのままではセキュリティの面で不安があるので、テーブルの接頭辞をインストール後に変更しました。その手順です。

1.wp-config.phpを編集

wp-config.phpを検索し、$table_prefixの値を変更します。

$table_prefix = '<新しい接頭辞>';

2.データベースのバックアップ

テーブル名を変更し、テーブルの値を更新するので念の為、バックアップを取りましょう。備えあれば憂い無し、です。

ターミナルからmysqlコマンドで取ってもいいですし、稼働しているWordPressの管理画面のDatabaseから取っても構いません。お好みでどうぞ。

3.データベースのテーブル名を変更

まず既存のテーブル名を確認します。

WordPressの管理画面のDatabaseから確認できます。

私はターミナルからmysqlコマンドラインツールを用いて、以下のようにしてテーブル名をファイルに保存し、確認しました。後程、更新クエリを作成する為に用いる狙いもありました。

mysql -u <ユーザー名> -p -e 'show tables;' <データベース名> > tables.txt

インストールしているプラグインによってテーブル数は増加します。必ずお使いのデータベースのテーブル名を確認して下さい。

次にテーブル名の変更を行います。私の環境では、15個のテーブルが存在していましたので、以下のファイルを作成し、alter.sqlという名で保存しました。

ALTER TABLE wp_commentmeta RENAME TO <新しい接頭辞>commentmeta;
ALTER TABLE wp_comments RENAME TO <新しい接頭辞>comments;
ALTER TABLE wp_ewwwio_images RENAME TO <新しい接頭辞>ewwwio_images;
ALTER TABLE wp_hugeit_lightbox RENAME TO <新しい接頭辞>hugeit_lightbox;
ALTER TABLE wp_links RENAME TO <新しい接頭辞>links;
ALTER TABLE wp_options RENAME TO <新しい接頭辞>options;
ALTER TABLE wp_postmeta RENAME TO <新しい接頭辞>postmeta;
ALTER TABLE wp_posts RENAME TO <新しい接頭辞>posts;
ALTER TABLE wp_structuring_markup RENAME TO <新しい接頭辞>structuring_markup;
ALTER TABLE wp_term_relationships RENAME TO <新しい接頭辞>term_relationships;
ALTER TABLE wp_term_taxonomy RENAME TO <新しい接頭辞>term_taxonomy;
ALTER TABLE wp_termmeta RENAME TO <新しい接頭辞>termmeta;
ALTER TABLE wp_terms RENAME TO <新しい接頭辞>terms;
ALTER TABLE wp_usermeta RENAME TO <新しい接頭辞>usermeta;
ALTER TABLE wp_users RENAME TO <新しい接頭辞>users;

そして、以下のコマンドでテーブル名を更新しました。

mysql -u <ユーザー名> -p -e 'show tables;' <データベース名> < alter.sql

4.テーブルに保存されたテーブル名を更新

wp_optionsとwp_usermetaテーブルにテーブル名が保存されています。この保存されているテーブル名を新しいテーブル名に変更する必要があります。

先程と同様にクエリを作成し、update.sqlファイルに保存しました。

UPDATE <新しい接頭辞>test_options SET option_name = '<新しい接頭辞>test_user_roles' WHERE option_name = 'wp_user_roles';
UPDATE <新しい接頭辞>test_usermeta SET meta_key = '<新しい接頭辞>test_capabilities' WHERE meta_key = 'wp_capabilities';
UPDATE <新しい接頭辞>test_usermeta SET meta_key = '<新しい接頭辞>test_user_level' WHERE meta_key = 'wp_user_level';

古いテーブル名で検索し、新しいテーブル名で更新するだけです。

以上で接頭辞の変更は完了です。

よっぽどセキュリティがザルで無い限り、大丈夫とは思いますが、念の為、変更しておいた方が安心できます。デフォルトの接頭辞のまま運用されらっしゃる方、変更はそれ程難しくはありませんので、検討してチャレンジしてみて下さい。