こんにちは、ひつじ先輩 (@baacash_)です。
WordPressを、SQLiteからMySQLへ移行する方法を書きます。
これまで、Wordpress SQLite Integrationを使ってきた人向けです。
SQLiteからMySQLへの移行は、長くWordPressを使うなら避けられません。
しかし残念ながら、移行作業はかなり大変。
わたしは時間に追われる中、数々のエラーに悩まされることになりました。
この記事では移行の流れに加え、わたしが遭遇したエラーと対策をまとめています。
お役に立てれば幸いです。
SQLiteから移行すべき理由
WordPressは本来、MySQLで動きます。
しかし、WordPress SQLite IntegrationというプラグインでSQLite運用できます。
このプラグインはもう更新されておらず、ダウンロードもできなくなっています。
わたしもサーバ代の節約のため、SQLite運用していましたがおすすめしません。
理由は、
- 管理画面・ページ表示が遅い
- ウェブで見つかる情報がMySQL前提
からです。
今はもう更新されていないプラグインです。
セキュリティ面を考えても、MySQLへ移行すべきです。
MySQLへの移行
移行前。
- データベース:SQLite
- サーバ:ロリポップ! (エコノミープラン)
WordPressテーマはCocoonで、プラグイン「Wordpress SQLite Integration」を使用。
移行後は、
- データベース:MySQL
- サーバ:ロリポップ! (ライトプラン)
となりました。
作業の流れは
- 旧WordPressデータのエクスポート
- 移行前のバックアップ
- 新WordPressのインストール
- 新WordPressへデータをインポート
- プラグイン・テーマを移行
の5ステップです。
MySQLを使うため、同じサーバ契約をアップグレード。
新しくWordPressをもう1つインストールして、データをインポートしました。
1.旧WordPressのエクスポート
データベースをエクスポートします。
XMLファイルが得られます。
2.移行前のバックアップ
WordPressのバックアップ
プラグインのBackWPupを使ってバックアップしました。
サーバ内でも、別ディレクトリに旧「WordPress」フォルダのコピー(SQLite版)を作りました。
新しいWordPress(MySQL)で上書きされるかもしれないと思ったからですが、杞憂でした。
その他のバックアップ
移行で、カテゴリとカテゴリのスラッグがうまく引き継がれないことがあります。
そこで最悪、手作業で直せるようにカテゴリ(およびスラッグ)の状態をスクショ。
- メニュー
- ウィジェット
の状態もスクショしました。
テーマの設定もエクスポートできるならバックアップしましょう。
Cocoonの場合は、この画面からできます。
3.新WordPressのインストール
プランを、MySQLが使えるライトプランに変更。
移行先となるWordPress(MySQL版)をインストールします。
「承諾する」にチェック。
「インストール」をクリック。
4.新WordPressへインポート
ダッシュボードにログインできたら、インポート。
「ツール」⇒「インポート」⇒「WordPress」を選択。
引用元:WordPress SQLiteからMySQLへ移行 in CORESERVER Part.1で
先ほどエクスポートしておいたデータベース(XMLファイル)を選択します。
「添付ファイルをダウンロードしてインポート」してください。
エラー
アップロードしたファイルは php.ini で定義された upload_max_filesize を超過しています。
以下、ロリポップでの解決方法。
設定をクリック。
upload_max_filesizeを、大きな値に変えます。
エックスサーバーの場合は、こちらを見てください。
エラー2
エラーが発生しました。
ファイルが空のようです。中身のあるファイルをアップロードしてください。
このエラーはphp.ini ファイルでアップロードができない設定になっているか、post_max_size が upload_max_filesize よりも小さく設定されているために発生している可能性もあります。
このエラーがでましたが、インポートは一部できているようです。
3回やって、
すべて入った!
と思いました。(入ってない)
実際は、ここで大量の画像のコピーに失敗。
画像のコピーは、後半で書く方法で別に行うことになります。
記事・カテゴリー・タグは移行できました。
5.プラグイン・テーマを移行
プラグインの移行
FFFTPで旧WordPressからプラグインをコピーします。
「wp-content」の「plugins」というフォルダです。
「ダウンロードできませんでした」とエラーがでました。
FFFTPで、
「高度」タブをクリックします。
設定項目のうち、「可能であればMLSDコマンドで一覧を取得」のチェックを外します。
続いて「暗号化」タブをクリックします。
ここでは、「暗号化なしで接続を許可」のみチェックを入れた状態にします。
(引用元:FFFTPで頻繁に起きるファイル転送エラーを回避する方法)
をすると解決します。
移行に失敗したり、利用時にエラーが出たプラグインは以下の3つです。
- calculated fields form
- All in one SEO
- BackWPup
1.calculated fields form
calculated fields formは、計算フォームを記事に貼るプラグイン。
無料版では、コピーしてもデータが移行できないようになっています。
がんばって作った計算フォームが消え、1記事消しました。
2.All in one SEO
All in one SEO のサイトマップ機能、が初期設定に戻ります。
noindexになっているURLについては送信しないよう、設定しておきましょう。
これをしないと後日、Search Consoleで
送信されたURLにnoindexタグが追加されています
のエラーがでます。
3.BackWPup
WordPressをバックアップするプラグイン。
試しに回すとエラーがでました。
サーバ上のinstall.phpを削除します。wp-adminフォルダの中にあります。
(引用元:【WordPress】install.phpが原因でBackWPupに警告が出る場合の対処法)
で解決。
テーマの移行
Cocoonフォルダも、FFFTPでコピーしました。
吹き出しデータが引き継げるかも
と、旧WordPressからコピーしましたが、ダメでした。
既に記事に貼った吹き出しは、ちゃんと表示されます。
事前にエクスポートした、Cocoonの設定ファイルを入力します。
今度は、リストアの方です。
Cocoonの場合はこれで、
- Google アナリティクス
- Search Console
- Google AdSense
との連携が復活します。
WordPressの設定
記事
記事のスラッグに、日付が追加されていました。
パーマリンク設定を「投稿名」に変更。
すべての記事のスラッグから、日付表記が消えました。
カテゴリー
順序・親子関係が消えていました。
プラグイン、Taxonomy Orderで順序を修正。
親子関係は手作業で修正。
ウィジェット・メニュー
取っておいたスクショを頼りにウィジェット・メニューを再表示。
メニューは、同じデータが2重に入ってめちゃくちゃに。
多分3回インポートしたせいです。
ウィジェットは移行できておらず、最初から設定しなおしです。
Favicon
サイトを開いたときのタブに表示されるアイコン。
こちらの方法で再設定しました。
サブタイトル
サイトのサブタイトルを再設定。
「設定」→「一般」。
プロフィール・SNS情報
プロフィールも消えています。
SNSの情報も再設定。
「ユーザー」→「あなたのプロフィール」。
投稿SNS設定
記事を公開したときに、自動でSNSに投稿する設定。
「設定」→「共有」。
セキュリティ関連
- ログインIDを隠す
- WordPressのパスワードを複雑化
- プラグインでログイン試行回数制限(Login LockDown)
- レンタルサーバのパスワード複雑化
- htaccessを設置してサーバ上のファイルへのアクセス制限
などの対応を行いました。
セキュリティ関連の設定については、こちらの記事で書きました。
ぜひ、読んでみてください。
画像の移行に失敗
設定を一通り終えたあと、画像が消えている記事が大量にあることに気付きました。
もういろいろ設定しちゃったので、インポートからやり直したくない。
起きていることは、
- 画像が新しいWordPressフォルダにコピーされていない
- 記事内の画像リンクのURLが間違っている
の2パターンのどちらか。
もしくは両方でした。
まずは新WordPressの画像フォルダに、旧画像フォルダからすべてコピー。
今回も、FFFTPを使いました。
さらに、記事内の画像リンクを直していきます。
Search Regexというプラグインを使いました。
すべての記事内の
https://baacash.com/wordpress/wp-content/
を
https://baacash.com/wp-content/
へ書き換え。
これで、画像もちゃんと表示されるようになりました。
SQLiteからMySQLへの移行
まとめます。
WordPress SQLite Integrationはもう、アップデートされていない。
MySQLに移行する必要がある。
流れは
- 旧WordPressデータのエクスポート
- 移行前のバックアップ
- 新WordPressのインストール
- 新WordPressへデータをインポート
- プラグイン・テーマを移行
の5ステップ。