Bakulog

獏の夢日記的な何か。

壊れたWordPress環境のDBから記事復元しつつはてなブログに引っ越した話

タイトル通りの報告記事です。

  1. 概要
  2. 条件
  3. 作戦
  4. まとめ

1. 概要

はてなブログに来る前にはMicrosoft AzureWordPressを立ててブログを書いてました。

しかし、うっかりバックアップ無しでWordPressを更新して環境をブッ壊しました。

Azure Portal上でWordPressの再起動を試しても失敗し続けたため「これはもうダメかな…?」と思い、また以前からWordPressの機能を持て余していた節もあったので、引っ越しを決意しました。

最終的には

  • 元サーバーの復帰は完全に諦めた
  • ブログの文面は頑張って持ってくる
  • 画像の拾い上げは諦める

という落としどころを決めて、約4時間の作業で引っ越せました。

2. 条件

  • バックアップを取ってない
  • 死んだサーバーの再起動はできない
  • データベースは生きていて、エクスポートしたファイル(.sql)が取れる

本記事の対象読者は既にやらかしてしまい、「いまさらバックアップとか言われても…」という方です。

バックアップ取れよ!」は正論ですが、本記事内に限ってはタブーです。

また、本記事は普段DBとか触らない人が書いてる点にご注意下さい。

(「VSCodeSQLを見たらシンタックスハイライトで何となく分かる」程度を想定)

3. 作戦

以下の手順でだいたいの投稿文が拾えます。

  1. 死んだWordPressのデータベースを.sqlとしてエクスポート
  2. さくらインターネットに新しくサーバーを立て、新規にWordPressとDBを用意
  3. 1でエクスポートしたDBを整形して、2のDBにインポート
  4. WordPressが記事を読み込めてるかチェックし、標準機能でエクスポート
  5. はてなブログの標準機能を使い、4のエクスポートしたファイルを読み込む
  6. ドメインの再設定をしてhttps化

さくらインターネットは登録とDBアクセスが簡単なので使いましたが他でも多分行けます。

基本的には各手順それぞれググれば実施できますが、3の「エクスポートしたDBを整形して…」の所を少しだけ細かく。

まず3の手順に入る前にWordPressを立ち上げ、adminユーザーの登録まで済ませておきます。

そののち、エクスポートした.sqlファイルを以下の観点で修正してインポートさせました。

必要なテーブルだけ残す

エクスポートした.sqlのうち、投稿文っぽい所だけ拾い上げます。

VSCodeなどでファイルを開いてDROP TABLE IFとかで検索すると、十数個のテーブルを復元するためのSQL文が見つかります。

このうち、投稿文の引っ越しに必要なのは一部だけなので、そこだけを残します。

私の場合、本文とタグまで雰囲気残ってれば良いや、とザツに考えて以下のテーブルを拾い上げました。

  • postmeta
  • posts
  • term_relationships
  • term_taxonomy
  • termmeta
  • terms

コメント関係のテーブルも残したければ残していいと思います。

逆に、usersテーブルは下手に残すとさくらインターネット側で設定したログイン設定を上書きして少しだけ面倒なので、よく分からなければ消しておくのが無難です。

テーブル名が違ったら揃える

例えば私の手元環境だと、postmetaテーブルが以下の名前でそれぞれ保存されていました。

.sqlファイル側のテーブル名を修正し、さくらインターネット側のDBテーブル名に揃えておきます。 このとき、直接実行するSQL文以外でも下記のような間接命令で使われるテーブル名も直します。

/*!40000 ALTER TABLE `wp_terms` DISABLE KEYS */;

なお、テーブル名の指定が多少間違ってても書き直して再インポートするだけなので、エラーを見て直すのもアリです。

4. まとめ

古い記事の画像が無くなったのは痛いですが、結果的に維持コストが下がって気軽に記事投稿できる体制に移れたので良しとします。(あと表示速度はむしろ上がったような…。)

それと末筆ながらMicrosoft Azureへの礼も一言。

AzureWordPressの環境は大学院時代に立ててみて4年ほど運用した環境です。

当時は「ブログ作るって難しい?」という好奇心で使い始め、実際勉強で使うには良い環境でした。

ただしhttps化の圧が強まってきたころに使い勝手が若干悪かったりして億劫になり、最終的に今に至る感じです。

自力でのWordPressは勉強とかスキルのアピールには良いんですが、「ちょこっと技術ネタ+ポエム書きたい」なら、やはりはてなブログに軍配が上がりますね…。