「サーバーA」のMySQLを、「サーバーB」から利用する。
さくらのVPSを2台借りた所で、上記のような接続にチャレンジしてみたくなった。

簡単に接続出来るのか?パスワード漏れや外部からの攻撃等々、セキュリティ的な問題は無いのか、取り掛かる前は色々と心配事が多かったが、その辺は意外とアッサリとクリア出来た。

但し全く何も解らない状態からのスタートだったので、最後まで進むのにもの凄く時間がかかった。

参考にしたサイト

  1. MySQLの基本操作
  2. MySQL基本操作 : マロンくん.NET
  3. GRANT構文 - bnote

ありがとうございました。

普通に接続しようとしても接続できない

  1. サーバーAにMySQLをインストール、普通の手順でユーザー作成。パスワード設定
  2. サーバーAのiptables編集。3306番ポート開放。
  3. サーバーBにphpmyadminインストール
    • サーバーA接続専用でインストールするものの、接続できず。

半分予想はしていたが、予備知識なしで思いつきセットアップじゃダメな模様。

以下、MySQLに他サーバーから接続する為のセットアップ手順

iptablesの設定

MySQLをインストールした方のサーバーの3306番ポートを開放する。
サイト内参考リンク→さくらのVPS iptables設定覚書き

こまかい解説はこのページではしない。

MySQLに専用のデータベースとユーザーを追加

MySQLのインストール、rootのパスワード作成等々は省略。

mysql -u root -p
でroot権限を持ってログイン。

まずデータベース追加
create database `xxxxx`;
ってな感じに外部から接続する専用のデータベース(例はデータベース名xxxxx)を作成。
ちなみに``で囲まないと、
create database `xx-xxx`;
みたいなハイフン付きのデータベース名が作れない。ってかハイフンつけるの禁止。これ以降のユーザーに結びつけるコマンドが上手く処理出来ない。ここで2時間くらいハマった。
データベース削除は
drop database `xx-xxx`;
こんな感じ。ハイフン付きデータベースは全部削除した。

ユーザー追加
ユーザーを追加する際、MySQLでは接続先ホストと紐付けるらしい。
insert into user set user="yyyy", password=password("********"), host="zz.zz.zz.zz";
yyyyがユーザー名。登録の際にパスワードとホスト(ここではzz.zz.zz.zz)を同時に入力。
このユーザーは、xx.xx.xx.xxからの接続専用ユーザーになる。
なるほど、こうやってセキュリティを保っているのか。今日初めて知った。

データベース・ユーザーを他ホストから接続するのを許可する
MySQLにログインしたまま。上からの流れそのまま。
flush privileges;
grant all on xxxxx.* to yyyy@zz.zz.zz.zz;
でデータベースxxxxxにユーザーyyyyがホストzz.zz.zz.zzから接続するのを許可する。
(ここでデータベース名にハイフンが混じっているとドツボにはまる)

quit
でMySQLからログアウト。MySQLサーバーでの操作完了。

phpmyadminのインストール

接続に使用するサーバーB側の任意のディレクトリにphpmyadminをインストールする。
localhostのMySQLに接続する場合と、少しだけ手順が異なる。

インストール前のオマジナイ
cd /var/www/html/myhome
chown -R apache:apache phpmyadmin
find phpmyadmin -type f -print0 | xargs -0 chmod g-w,o-rwx
find phpmyadmin -type d -print0 | xargs -0 chmod g-rw,o-rw
phpmyadminディレクトリの権限をapacheに移した。やらなくても別にOK。

インストール時の注意はホスト名だけ
普通にインストールするときは接続ホストに「localhost」を選択するが、MySQLをインストールしたサーバーのIPアドレス又はホスト名を入力する。

ホスト名を入力するタイミングは、/scripts/setup.php を実行中だったか、あらかじめconfig.inc.phpに書き込んでおいたか、思い出せない。サーバーA側のMySQLに正しくユーザー・データベースが登録してあれば、割と簡単にインストールは終了する。

phpmyadminディレクトリのセキュリティはしっかりやっておく

<Directory /var/www/html/PhpMyAdmin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1
Allow from xx.xx.xx.xx #自分のプロバイダーのIPアドレス
Allow from xx.xx.xx.xx #MySQLをインストールしてあるサーバー
</Directory>
こんな感じにphpmyadminをインストールしたディレクトリにはアクセス制限をかけておく。

もしくは「config.inc.php」や「setup.php」は削除しておく。

phpMyAdminのsetup.phpの脆弱性を突くサイバー攻撃を確認 - Snufkinski Memo
狙われるphpMyAdmin、攻撃のきっかけは? - @IT
phpmyadminのセットアップファイルを狙った攻撃に関する情報は、嫌と言うほど出てくる。

MovableTypeのインストール

接続に使用するサーバーB側にインストールする場合

セットアップダイアログに従って進めばOK。通常localhostを入力する箇所でMySQLをインストールしたホストを指定するだけ。
MovableTypeをインストールする際も、最初のデータベース決定時にMySQLをインストールした別サーバーのホスト名かIPアドレスと、専用に作成したユーザー名、パスワードを入力すればアッサリとインストール完了した。

追記:さくらVPS試用期間じゃ無理か?

試用期間中のさくらのVPS・・・・MovableTypeインストール
既に借りているさくらのVPS・・・MySQLインストール
この状態で800件のブログ記事をインポートして再構築。

1時間経っても60%位しか進んでない(´Д`;)
(テストに使ったデーター量は、ローカルだと7~8分、今使っているさくらスタンダードなら35~50分で再構築が終わる量。)

さくらのVPS使用期間中
▲サーバー間の転送量1.3~1.6M Bits/s

無料期間中の転送量制限に引っかかっているのか?
時間がかかるのも心配だが、接続タイムアウトの設定を30秒にすると1回の通信が間に合わず500エラーが出ちゃうのも心配。
正式契約したらキチンと速度出るだろうか・・?不安になって来た。