AzureのWEBサイト

昨日の記事ですが色々訂正しました。

AzureのWEBサイトからも当然ローカル接続できると踏んでいたのですが、どうやらダメっぽい。
以下のエラーが出ていてホストが解決出来ない。
mysqli_connect(): php_network_getaddresses: getaddrinfo failed: No such host is known.

まあ、よくよく考えたら同じクラウドサービスにいないから当然だよな…
って思ってしょうがなくグローバルから接続しようと*.cloudapp.netを指定しても同じエラー。
これ、もしかしてDNSサーバーが見つかってない?

ということはIP指定じゃないとダメっぽい?(IP指定はつながった)
IP指定だと2つ問題があってですね…

  1. 接続先のDBがIP変わった際に死ぬ
  2. 接続元のサイトがIP変わった際に死ぬ

1も2もAzureにあるならマシン自体を再起動とか停止とかしない限り大丈夫なはずですけど…
MySQLのユーザーのホストを指定しない(user@%)なら2は回避出来ますが、今度はセキュリティ的に死ぬ。

もう死ぬしかないじゃない!

レンタルサーバーとWindows Azure

昨晩、なんかの拍子にWindows Azureについて調べてました。
確か中~大規模なWEBの構築とか、仮想マシンの複製とかだった気がする…
最終的にメインで調べてたのは、Windows Azureって安いの?ってこと。

今回の比較条件は以下の通りです。
・月間PVが比較的少ない(1万PVぐらい)
・PHP(5.4以上)が使える
・SSLが使える(共有可)
・MySQL(5.5以上)がローカル接続で使える
・定期ジョブ(cronとか)が使える

Windows Azureと比較するレンタルサーバーは僕が個人的に使っているロリポップです。
上記を満たすプランはロリポプランで、6ヶ月以上まとめ払いで月額250円ですが、その代わり以下の制限がかかります。
・MySQLはDBが1つで細かい設定は出来ない。
・Cronは5個までで最小5分毎
・ASP.NETは使えない。

Windows Azureの場合どうなるかというと、以下の構成で月額3034円
・WEBサイト(無料モード)
・Linux仮想マシンXS 2VM

これだけ見るとAzure高い!ってなるんですけど、理由はDBを「ローカル接続可能なMySQL」に限定したせいです。
AzureにはSQLデータベースは自前であるんですけど、MySQLがありません。(SQLデータベースでも100MBで509円)
(SQLデータベースにした場合、Linux仮想マシンではなくWEBサイトとSQLデータベーでデータベースで限りなく小規模なら無料でいけます。)
アドオンにClearDBがあります。(無料の範囲かなり制限かかってますが)
その代わりアドオンになり、Azure外のサービスとなるためローカル接続ができません。
AzureのWEBサイト自体がローカル接続出来ないっぽいです。
これを満たすには仮想マシンを立てて、そこにIISなりApacheとMySQLを用意するしかないのです。
その仮想マシンも最小のXSで月額1500円3000円(1500円×2インスタンス)します…

ただ調べてて色々分かったんですけど、Azureはやっぱり便利だと思った次第。
WEBサイトにWEBアプリケーションを配置して中~大規模になったらインスタンスを増やすだけでロードバランサーになるし、
キャッシュサービスもあるし、モバイルサービスからPUSH通知出せるしで。

何だかんだ工夫したら仮想マシン立てなくてもいろんなサービスできるんだなと実感しました。
仮想マシンだとスケールアウトするにも時間と手間がかかるし、スケールアウトのこと考えたらWEBとDBとリソースで分けないとだし…

iMacをMavericksにしたらMySQLとか消えた(復旧メモ)

以前「MySQLに絵文字を格納する」で記述した方法に似た方法でMac OS X 10.8にMySQLを構築してローカルに開発環境を構築していました。

昨晩、退社前にいい加減OSアップデートをやろうと思いインストール始まった状態で帰宅しました。
で、今朝出社したらローカルのサーバーに繋がらない。

LaunchDaemonに設定したはずのhttpdが消えていたみたいなので再度設定。
で、アクセスするとページは表示されたけどindex.phpの中身そのまま表示されてる。

httpd.confの設定も綺麗に消えてたので各種モジュールのコメントアウトを外した。

直ったと思ったら404が返って来たのでURLにindex.phpを追加して表示されるのを確認
(CodeIgniterを使っているのでデフォルトだとhttp://localhost/index.php/controllerになる)

今度はdate.timezoneが設定されていないとWarning出まくりなのでphp.iniを修正…って思ったらいなくなってるのでphp.ini.defaultをコピーしてdate.timezone = Asia/Tokyoに修正

index.phpをURLから削るのにAllowOverride : Allに変更

これでようやく正常に表示された…けどログインできない。
(DBにID、PWが格納されているサービスの構築中…)

ログに以下の記載
Severity: Warning  –> mysqli_connect(): (HY000/2002): Connection refused /Library/WebServer/Documents/hoge/system/database/drivers/mysqli/mysqli_driver.php 73

Sequel ProもローカルのDBに接続できない。
MySQLが起動していない…

こいつもLaunchDaemonから消えてるのかと思いながら、起動しようとしていたら、「/usr/local/mysql」がいない!?
本来であれば「/usr/local/mysql/bin/mysqld start」になるのだが…
仕方なくインストール時に使っていたmysql-5.5.34-osx10.6-x86_64をMySQLとしてコピーしたが起動はしなかった。

色々探していたらシステム環境設定にMySQLがおる…
アップデート前にいたかはちょっと分かんない…
スクリーンショット 2014-03-19 14.10.51
ここで「Start MySQL Server」のボタンを押すと、「/usr/local/mysql」にアクセス権限がないと言われるので「chown -R mysql:mysql /usr/local/mysql」を実行し、
再度Start MySQL Serverを押すと無事に起動し、正常に接続することが出来た。