過去の俺にしか需要のない話だと思うが、する。

以下に紹介するやり方は結構に強引であるゆえ、アクセス数がでかいブログではもっと丁寧にやるべきだろう。

◆発端

このブログはWordPressで書いていて、そのWordPressはAzureApp Service上に載っている。
WordPressを動かすためにはデータベースが必要で、俺はClearDBというサイトから課金制のMySQLサーバーを借りていた。
で、調べ物をしていた時に「App Serviceのリソース上でMySQLインスタンスを実行できる」という情報を得た。「MySQL In App」というらしい。App Serviceの上で動いているんだから、つまり無料でデータベースを使用することができる。やったぜ。

ちなみに今はAppServiceのWordPressテンプレートで始めっからMySQL In Appを選択することが可能だ。

◆注意

作業前に必ずWordPress全体のバックアップを取ること。
そして、そのバックアップはローカルに保存すること。つまりインターネット上にだけバックアップを置くのは危ない。確実に手元に置くこと。
また、データベースのサイズがでかい人はやらないほうがいいと思う。App Serviceのスケールによっては、そんなに馬力が出ないかもしれない。

やり方は説明するが、あくまで自己責任で実施しろ。

◆ClearDBから情報取得

ClearDBにログインする。
 ⇒https://www.cleardb.com/

ダッシュボードを開き、DBを探してクリック
 ⇒https://www.cleardb.com/dashboard

その際、DB名を控える。
「System Information」タブを開き。「Hostname」「Username」「Password」を控える。
※当たり前だが、Passrowdに「 (Reset) 」は含めない。

◆DBつくる

※十中八九大丈夫だけど、WordPressがインストール画面を表示し始める可能性が0ではない。理由は後述するが、インストール画面を表示しやがったらApp Serviceを停止すること。

  • Azure Portalを開き、WordPressの載っているApp Serviceを開く。
  • 縦ツールバーの「MySQL In App」をクリック。
  • MySQL In Appを「オン」にする。
  • 「保存」をクリック
  • 縦ツールバーの「高度なツール」をクリックし、「移動」をクリック。
  • 「Debug console」タブをクリックし「CMD」をクリック
  • data ⇒ mysql とフォルダを開き「MYSQLCONNSTR_localdb.ini」の左にある鉛筆マークをクリック
  • 「Database=localdb」とか書いてあるので、「localdb」の部分を自分が新たに作るDB名に変えて「Save」をクリック
     ⇒つまり、さっき控えた「DB名」にしておけばよい。
  • 「MYSQLCONNSTR_localdb.txt」の「localdb」も同様に更新する。

◆DB接続

  • 「MySQL In App」画面の「インポートとエクスポート」をクリック
  • 情報入力
    ・操作:インポート
    ・入力形式:資格情報
    ・ユーザー名:さっき控えたUsername
    ・パスワード:さっき控えたPassword
    ・データベース:さっき控えたDB名
    ・サーバー:さっき控えたHostname
  • 「保存」をクリック

◆元のDBからエクスポート

  • 「MySQL In App」画面の「管理」をクリック
  • phpMyAdminが起動するので左上のCurrent Serverをさっき指定したHostnameのサーバーに変更
    ※自動でインポートされるかも。俺はされなかったから手動でやった。わからん。
  • さっき指定したDBをクリック
  • 「Export」タブをクリックし、「Go」をクリック。適当な場所にSQLファイルを保存。

※phpMyAdminでログイン画面が表示された場合

  • 縦ツールバーの「コンソール」をクリック
  • 下のコマンドを打ち込んでEnterキーたたいて内容見てワッショイ
    type d:\home\data\mysql\MYSQLCONNSTR_localdb.txt

◆インポート

  • Current Serverを「(azure)」の記載があるサーバーに変更
  • 「Import」をクリック
  • 「Brows your computer」項目の「参照」をクリックし、さっきエクスポートしたSQLファイルを選択
  • 「Go」をクリック
  • 同名のDBが作成されたことを確認

なお
このまま進むと360日後にぶっとんで突き刺さって憤死する可能性があります。
MySQL5.7くんのdefault_password_lifetimeとかいうクソアホ初期値くんが360日後にパスワードをExpireしてくれるからです。
俺が作成したときは多分Azureくんが「無期限」の設定にしていてくれたようだが、以下の設定を一応確認すること。

  • phpMyAdminの左上の🏠ボタンをクリック
  • 「Variables」タブをクリック
  • 「default password lifetime」を検索し、「0」であることを確認。違ったら「0」に変更。

あとはまぁこのへんを適当に
https://weblabo.oscasierra.net/mysql-57-init-setup/

◆WordPressのDB接続先を変更

※ここから危険。

WordPressの作りが爆裂にアホなので、常に自分のサイトが大丈夫か確認し、何か操作を間違えたときは焦らずにApp Serviceを停止すること。

ちょっと言わせていただきたいんだけど、データベースが空の時に誰彼構わずインストール画面表示するってどういうことなの?馬鹿なの?ハッキングさせたいの?

あとさぁ、wp-config.php眺めてたんだけど

foreach ($_SERVER as $key => $value) {
    if (strpos($key, "MYSQLCONNSTR_") !== 0) {
        continue;
    }

    $connectstr_dbhost = preg_replace("/^.*Data Source=(.+?);.*$/", "\\1", $value);
    $connectstr_dbname = preg_replace("/^.*Database=(.+?);.*$/", "\\1", $value);
    $connectstr_dbusername = preg_replace("/^.*User Id=(.+?);.*$/", "\\1", $value);
    $connectstr_dbpassword = preg_replace("/^.*Password=(.+?)$/", "\\1", $value);
}

これなに。
「MYSQLCONNSTR_」が複数あったらどうするつもりなの?馬鹿なの?
そして「MYSQLCONNSTR_」は簡単に発生しうる。
マジこれ・・・えーと・・・ぶっ殺すぞとしか言えない。クソ雑魚でもプログラマーやってるという地獄のような事実が簡潔かつ強力に証明されている。

・・・まぁいいや(絶対に良くない)
気になる人は $_SERVER[“MYSQLCONNSTR_localdb”] から直で読むように修正すれば?

気を取り直して

  • Azure Portalを開き、WordPressの載っているApp Serviceを開く。
  • 縦ツールバーの「設定」にある「アプリケーション設定」をクリック。
  • 「接続文字列 」の「defaultConnection」を削除する。
     ⇒不具合が起きた時に戻せるように、元の値を控えておくべき。

※いいわけ

(strpos($key, “MYSQLCONNSTR_”) !== 0)とかふざけたマネしているからこんなことをやっているんであって、本来「MYSQLCONNSTR_localdb.txt」の中身を書き換えるようなことはするべきではないということはわかっている。

実際は新たに作成したDBの接続文字列を作成してそこを「wp-config.php」で読むように修正するべきだろう。

◆以上

以上。結果としてブログがちゃんと表示されているかを確認する。
(ブラウザキャッシュが残っている可能性があるので)Chromeでは「Ctrl + F5」でページ更新したり、適当なモバイル端末で表示を確認する。

◆結論

WordPressとMySQLは一定数の馬鹿がメンテしてる。