「サーバーA」のMySQLを、「サーバーB」から利用する。
さくらのVPSを2台借りた所で、上記のような接続にチャレンジしてみたくなった。
簡単に接続出来るのか?パスワード漏れや外部からの攻撃等々、セキュリティ的な問題は無いのか、取り掛かる前は色々と心配事が多かったが、その辺は意外とアッサリとクリア出来た。
但し全く何も解らない状態からのスタートだったので、最後まで進むのにもの凄く時間がかかった。
参考にしたサイト
ありがとうございました。
普通に接続しようとしても接続できない
- サーバーAにMySQLをインストール、普通の手順でユーザー作成。パスワード設定
- サーバーAのiptables編集。3306番ポート開放。
- サーバー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>こんな感じに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>
もしくは「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分で再構築が終わる量。)
▲サーバー間の転送量1.3~1.6M Bits/s
無料期間中の転送量制限に引っかかっているのか?
時間がかかるのも心配だが、接続タイムアウトの設定を30秒にすると1回の通信が間に合わず500エラーが出ちゃうのも心配。
正式契約したらキチンと速度出るだろうか・・?不安になって来た。