昨日は,一生懸命取り組んでいた。何にって,くりくりさんとの話にも出ていた Windows7HP+SP1(x86) 上での MySQL から MariaDB 移行に(汗)。
まずは,全サーバデータのバックアップ。
次に,右図の表示をする maintenance.html を作り,作業のために,以下の行をドキュメントルートの .htaccess の頭に追記した。(参考: mod_rewrite,<IfModule>,Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方)
ErrorDocument 503 /maintenance.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/maintenance.html
RewriteCond %{REMOTE_ADDR} !=IP address for Admin
RewriteRule ^.*$ – [R=503,L]
Header set Retry-After “Wed, 18 Dec 2013 01:00:00 GMT”
ここに,「特定のモジュールの存在に関わらず動作する 設定ファイルの原本が必要なときにのみこのセクションを使用してください。 通常の動作では、ディレクティブを <IfModule> セクションの中に 入れる必要はありません。」と書いてあったので, <IfModule> はいらないかなと思いはずした。
さて,さっき作った maintenance.html をサイト上に表示するようにして, MariaDB5.5 への移行に取り掛かった。
MariaDB をクリーンインストールする。今回,エンジンは MyISAM から InnoDB に変えてみたい。 MySQL を使い始めたときにすべてのテーブルを MyISAM で作った。最近, InnoDB のメリットをよく聞くのでやってみたくて仕方なかった。もっとも,そうしたって,よくわかっていないから,生かしきれないと思うけど(爆)。それに,移行で泥沼にはまっている話もちょくちょく見かけたので,二の足を踏んでいた。だって,何か起きたら対処しきれないじゃないヨ,もともと,よくわかってないんだから-Haha。
MariaDB はデフォルトで InnoDB らしい。この機会に,テーブルを作り変えてもいいや。
ステップ1 MySQL をアンインストールする。
- すべての WordPress プラグインを無効にする。
- さっきやったサーバのバックアップとは別に,すべてのデータベースを sql ファイルとしてバックアップする。
- ダッシュボードのツールから WordPress のすべての記事・コメントをエクスポートする。この時点では,可能なら WordPress Importer を使おうと思っていた。後述の理由で,結局あきらめたが。
- サービスを停止する。
コントロールパネル >> 管理ツール >> サービス
MySQL のサービスを選んで,停止。 - サービスを削除する。
cmd.exe を管理者として実行。
> sc delete MySql - フォルダ MySQL と MyDATA を削除(<--- これらには,自鯖の MySQL 関係のものがはいっている)。
ステップ2 MariaDB をインストールする。
- mariadb-5.5.34-win32.zip を MariaDB からダウンロードする。
- Installing MariaDB Windows ZIP packages にざっと目を通してから, mysql_install_db.exe について を読んだ。
- Zip を展開する。 MariaDB と MyDB というフォルダをサーバウェア用のパーティション Drive_SV に作り,展開でできたものを MariaDB フォルダにコピーする。
cmd.exe を管理者として実行。
> cd Drive_SV:MariaDBbin
> mysql_install_db.exe –datadir=Drive_SV:MyDB –service=MyDB –password=secretこれにより,root のパスワードが設定され, MyDB の中には my.ini が作られる。
- コントロールパネル >> 管理ツール >> サービス
MySQL のサービスを選んで,開始。
もし,「スタートアップの種類」が「自動」になっていない場合は,自動になおしておく。
ステップ3 phpMyAdmin で MariaDB にアクセスする。
- phpMyAdmin から root として,MariaDB にアクセスする。
バックアップしていた phpmyadmin データベースをインポートする。 - WordPress 用ユーザを作り, WordPress データベース用に Grant 以外のすべての privileges を付与し Global privileges は一定与えないこと。パスワードも設定する。 WordPress 用のデータベースを作成する。 collation は utf8_general_ci にする。
ログアウト。
WordPress Importer でインポートしたが,結局止めてしまった理由。
新しく WordPress をインストールした後, WordPress Importer でコンテンツをインポートした。間の悪いことに作業がほぼ終わってから,このプラグインが <object> などのある種のタグを移してくれないことに気づいた。 html 関係のどんなタグが対象になるのか調べるのも鬱陶しくて,この方法はやめることにした。これに結構時間かかってたんだけどね。
ステップ4 phpMyAdmin ですべてのWordPress のデータを復元する。
- InnoDB を使いたいので,バックアップファイル上の ‘ENGINE=MyISAM’ を ‘ENGINE=InnoDB’ に置き換えた。
- phpMyAdmin に WordPress ユーザとしてログインし,データベースにアクセス。
WordPress のデータベース上の現データをエクスポート。
現在の WordPress のデータベース上のテーブルをすべて削除。ところで,バックアップした sql ファイルには,全部が含まれていて大きいが,これを編集するのも面倒なので, php.ini のアップロードの制限を作業中だけちょっと変更した。 - バックアップをインポートしたら,エラーが出た。アララ。
#1214 – The used table type doesn’t support FULLTEXT indexesもともと, MyISAM だったので, FULLTEXT indexes が使われていたみたい。調べてみたら, YARPP が post_title と post_content のキーとして使っていた。ウーム。 しかし,フォーラムに, we can use YARPP on the InnoDB というのがあったので読んでみたら,性能は落ちるけど, InnoDB でも使えんことはないよと,プラグインの作者が言っていたので,「エイヤッ」と全 FULLTEXT indexes 関連行を削除した。(そういえば, MySQL5.6 は InnoDBでも FULLTEXT に対応したよね。–12/25追記)
- もっ一回,全テーブル削除。
書き換えたファイルをインポートしたら,あらまたエラーが……
#1064 – You have an error in your SQL syntax;これは,えっと,私のミスであった。 FULLTEXT indexes を消したときに “,” の消し忘れ。
KEY `post_author` (`post_author`), <<--------この ',' が残っていたのヨ。 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=xxxx ; で, ',' を削除。 - 全テーブル削除。
3度目の正直。ナンチャッテ。インポート。おっ,通った。
ステップ5 通常営業に戻る。
- WordPess にログイン。
全プラグインを有効化して,挙動をチェック。.htaccess を元に戻して,メンテ終了。
- 実のところ,作業後, Jetpack が親サイトでエラーを吐いている。
Your website needs to be publicly accessible to use Jetpack: site_inaccessible
Error Details: The Jetpack server was unable to communicate with your site https://MySITE
[IXR -32300: transport error: http_request_failed SSL certificate problem: self signed
certificate in certificate chain]でも,調べてみたところ,メンテのせいではないようだ。そんなわけで, Jetpack フォーラム での情報待ちです。
MariaDBについては,移行完了ってところ。拍手×2。
追記(12/21):
MyISAM から InnoDB に変更して以来, YARPP プラグインの性能低下がはなはだしい。予想以上のひどさである。 YARPP のページの示唆通り,元に戻したほうが賢明だ。
- phpMyAdmin にログイン。
- WordPress 用のデータベースを選択。
- wp_posts テーブルを選択。
- 上のナビバーから ‘操作’ を選択。
- ストレージエンジンを Innodb から MyISAM に変更。
- テーブルオプションの ‘実行’ をクリック。
- phpMyAdmin をログアウト。
ところが,この変更を YARPP が認識してくれない。こういう操作のための機能も用意されているのだが,うまく働かない。解決策を探しに, YARPP サポートフォーラムに行ったら, MyISAM Override check doesn’t work というのがあった。 hussong の方法をやってみた。
- まず, YARPP を無効にする。
- phpMyAdmin にログイン。
- WordPress 用のデータベースを選択。
- wp_options テーブルを選択。
- 上のナビバーから ‘SQL’ を選択。
SELECT * FROM `wp_options` WHERE option_name LIKE "yarpp%"
をやる。見つかったのをすべて削除。yarpp_fulltext_disabled = 1
というのがあるはずなので,これをyarpp_fulltext_disabled = 0
に変更する。- phpMyAdmin をログアウト。
- YARPP を有効にする。
元の設定はすべて消えてしまうので, YARPP の設定をやり直す。
これで,タイトルと内容の検討オプションが使える。ヤレヤレ。
追記2(12/25):
「Jetpack の不具合について。」というのを書いた。
追記3(2014/6/22):
WordPressでの「SSL3_READ_BYTES:sslv3 alert handshake failure」を解決というのを書いた。