ClearDB から Azure VM 上の MySQL に移行

ClearDB to Azure VM

Azure App Service のギャラリーで作成した WordPress は、サードパーティのクラウドデータベース「ClearDB」の提供する MySQL を使用します。この ClearDB の使用をやめ、Azure VM に MySQL をインストールし、DB を移行した話です。

ClearDB 関連の話題は、少し古い記事ですが「Azure Web Sites で WordPress を使い倒す DB 編」も参照してください。

メリット・デメリット

ClearDB であれば、希望に応じて4段階のプランがあり、簡単に冗長性や自動バックアップ、ワンタッチでリストアなどのメリットがあります。

Azure VM を使う方法であれば、すべて自分でしなければいけませんが、自由な構成にできます。

ClearDB の有料の一番下のプラン Venus は、15コネクション・1GB までで、当サイトではときどき DB 接続エラーが気になるところという感じで、上のプランは金額が約5倍になるので、Azure VM に移行を試してみました。

Azure VM の作成~MySQL のインストール

Azure VM に MySQL をインストールします。公式ドキュメントにそのままの内容があるので、これを元に作業します。

Azure ポータルで、仮想マシンをギャラリーから新規作成します。ドキュメント通り「Windows Server 2012 R2 Datacenter」を選択しましたが、Windows の方が料金高めです

作成後、リモートデスクトップで Windows Server にサインインし、MySQL のインストール。MySQL を外部から接続できるよう設定、MySQL へのログインと進めます。

データベースの作成

Azure VM 側の MySQL にインポート先となるデータベースを作成します。コマンドプロンプトから MySQL にログインし作業します。

データベースの作成
mysql> CREATE DATABASE database_name;

ユーザーの作成(インストール時にも作成できます)。
mysql> CREATE USER 'your_name'@'localhost' IDENTIFIED BY 'your_password';

作成したユーザーに作成したデータベースの操作権限を付与
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'your_name'@'localhost';

MySQLインストール時にやること(DBとユーザーの作成等) – Qiita より)

エクスポート・インポート

ClearDB の DB をエクスポート(バックアップ)して、Azure VM の MySQL にインポート(リストア)します。

DB の接続情報

ClearDB の接続情報は、ClearDB にログイン後の Dashboard から DB を選択 →「Endpoint Information」で確認できます。WordPress を運用している場合は、wp-config.php 内に書かれている情報です。

ClearDB

mysqldump によるエクスポート

コマンドプロンプトで「C:\Program Files\MySQL\MySQL Server 5.6\bin」に移動します。データベースをエクスポート(ダウンロード)する方法は次のコマンドです。

mysqldump.exe -u ユーザー名 -p[パスワード] -h ホスト名 -r バックアップファイル名 --single-transaction バックアップするデータベース名

例: mysqldump -u user_name -p -h example.cloudapp.net -r backup --single-transaction database_name

mysqldump によるインポート

作成済みのデータベースにインポートするには次の通り。

mysql.exe -u ユーザー名 -p[パスワード] インポートするデータベース名 < インポートするファイル名

mysql -u[ユーザー名] -p[パスワード] [インポートするデータベース名] < [インポートするファイル名] より)

WordPress の DB 接続先の切り替え

WordPress の Web サイトはそのままの場合、web-config.php の以下の値を書き換えれば OK です。

  • define('DB_NAME', 'Azure VM の MySQL に作ったデータベース名');
  • define('DB_USER', 'Azure VM の MySQL に作ったユーザー名');
  • define('DB_PASSWORD', 'ユーザーのパスワード');
  • define('DB_HOST', 'Azure VM のホスト名 (***.cloudapp.net)');

以上で、移行完了です。

余談: MySQL Workbench の方法(失敗)

はじめ、MySQL Workbench を使ってエクスポート/インポートしようとしましたが、うまくできませんでした。

手順としては、メニュー[Server]-[Data Export]から、データベースとテーブルを選択して「Start Export」ボタンで開始です。「Error executing task: 'ascii' codec can't decode byte 0x81 in position 26」のようなエラーが出て解決方法はわかりませんでした。