ラベル MySQL の投稿を表示しています。 すべての投稿を表示
ラベル MySQL の投稿を表示しています。 すべての投稿を表示

2012年8月25日土曜日

Ubuntu 12.04 にて dotCloud の MySQL を試してみる (PHP編)


二回続けてのdotCloudエントリ
本エントリはUbuntu 12.04 にて dotCloud の MySQL を試してみる (コマンドライン編) の続きです。
前回はコマンドラインで、helloworldサービスを作り、データベースとテーブルを作って、データをINSERTするところまでやりました。

今回はPHPからMySQLを操作してみます。

このエントリの目次
  1. PHP + MySQLのサービスにする
  2. environment.json
  3. PHPでMySQLに接続する
  4. PHPでMySQLを操作する
  5. 参考にさせて頂いたサイト
  6. さいごに

1.PHP + MySQLのサービスにする
dotcloud.ymlを下のように書きます。
my_www:
    type: php 
my_database:
    type: mysql
my_wwwmy_database は好きな文字列を指定できます。
あとは、下のコマンドを打てばOKです。
dotcloud push helloworld
# upload ~/work/dotcloud/helloworld ssh://dotcloud@uploader.dotcloud.com:443/helloworld
# rsync
building file list ... done
./
(中略)
Deployment finished. Your application is available at the following URLs
my_www: http://helloworld1-windblue.dotcloud.com/
www: http://helloworld-windblue.dotcloud.com/

2.environment.json
dotCloudにはenvironment.jsonという設定ファイルがあり、そこに色々な情報が入っています。
ホスト名やポート番号などのMySQLに関する情報も入っていて、それらはDOTCLOUD_MY_DATABASE_MYSQL_XXXというキーに格納されています。

PHPからMySQLに接続するにあたって、その設定ファイルを確認します。

詳しくはdotCloudのドキュメントにも載っているのでそちらも参照して下さい。

PHPからenvironment.jsonを確認
ローカルにてdotcloud.ymlと同じディレクトリにindex.phpを作り、下のようなソースを書いて dotcloud push します。
<?php

// environment.json ファイルから接続に必要な情報を取得
$filepath = $_SERVER['HOME'].'/environment.json';

$env = json_decode(file_get_contents($filepath), true);
foreach ($env as $key => $value) {
    print_r($key . "=" . $value . "<br />");
}

作ったページにアクセスすると、設定値一覧が見れます。

SSH接続して直接environment.jsonを確認
PHPからじゃなくても、直接dotCloudのサーバに入って確認することもできます。
下のコマンドでサーバに入ります。
dotcloud ssh helloworld.my_www
helloworld.my_wwwは <作ったサービス名>.<dotcloud.ymlに書いたキー です。

サーバに入ると、カレントディレクトリは
/home/dotcloud/
になります。
ls コマンドで見ると、environment.json がありました。
$ ls
code  current  environment.json  environment.yml  php-env  revisions  rsync-1345870675271

environment.yml というファイルもありましたが、内容は大体同じのようです。

3.PHPでMySQLに接続する
index.php を下のように書けばOKです。
<?php

// environment.json ファイルから接続に必要な情報を取得
$filepath = $_SERVER['HOME'].'/environment.json';

// 'DOTCLOUD_MY_DATABASE_MYSQL_MYSQL_XXX' というキーでMySQL関連のデータが入っている
$host = $env['DOTCLOUD_MY_DATABASE_MYSQL_HOST'];
$user = $env['DOTCLOUD_MY_DATABASE_MYSQL_LOGIN'];
$pass = $env['DOTCLOUD_MY_DATABASE_MYSQL_PASSWORD'];
$port = $env['DOTCLOUD_MY_DATABASE_MYSQL_PORT'];

//前回のエントリで作成したデータベース「nujabes」
$dbName = 'nujabes';

//mysqliオブジェクト作成
$mysqli = new mysqli($host, $user, $pass, $dbName, $port);

PDOで接続したい場合はDotCloudでのMySQL,Redis,MongoDBの使い方 | Rest Termが非常に参考になります(ただしenvironment.jsonの、MySQLに関するキーが古いようですので そこだけご注意を)。
4.PHPでMySQLを操作する
もうあとは通常のMySQL操作と同様です。
//前回のエントリで作成した「songs」というテーブルから全行取得するSQLを発行
$result = $mysqli->query('SELECT * FROM songs;');

//結果を取得していく
$rows = array();
while ($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row;
}

//実行結果を表示
print_r($rows);
これで作ったページにアクセスすると、
Array ( [0] => Array ( [id] => 0 [title] => Luv (Sic) Pt. 2 ) )
と表示されます。

やったね!

5.参考にさせて頂いたサイト
  1. DotCloud で PHP アプリを設置してみたときの色々 | 肉とご飯は甘いもの @ sotarok
  2. DotCloudでのMySQL,Redis,MongoDBの使い方 | Rest Term

5.さいごに
あとはnginx、cronの使い方を覚えれば、超基本的なバックエンドサービスは実現できそうです。
PHP のフレームワークはどうするかと悩んでいるところですが…。

あと、少し日付が古いですが、dotcloudのpostgres(たぶんmysqlも)はデフォルトで全接続を許可するので気をつけよう | uuu という不穏な記事も見つけたので、こちらも確認していきます。

それでは。

2012年8月24日金曜日

Ubuntu 12.04 にて dotCloud の MySQL を試してみる (コマンドライン編)


久しぶりのdotCloud
超久しぶりです。

ちょっとやりたい事ができて、バックエンドをdotCloudで実装しようと思ったので触ってみました。

このエントリの目次
  1. dotCloudの導入
  2. MySQLつきのサービスをデプロイする
  3. MySQLをコマンドラインから触ってみる
  4. さいごに
1.dotCloudの導入
dotCloud の導入については、当ブログの DotCloud + PHPで「Hello World」をUbuntu 11.04で試してみた に書いてるので、そちらをご参照下さい。

2.MySQLつきのサービスをデプロイする
まずは適当にhelloworldディレクトリを作ってその中に移動します。
$ mkdir helloworld
$ pwd
~/work/dotcloud/helloworld

そこでdotcloud.ymlという名前で下記のような設定ファイルを作ります。
my_database:
    type: mysql

「my_database」は好きな文字列を指定できます。

あとはサービスを作成して、dotCloudに同期させるだけでOKです。

まずサービスの作成。
helloworld という名前で作成します。
$ dotcloud create helloworld
Created application "helloworld" using the flavor "sandbox" (Use for development, free and unlimited apps. DO NOT use for production.).
This flavor cannot be changed.

** YOU HAVE CREATED A SANDBOX APPLICATION **
SANDBOX applications may not be scaled, may not use custom domains,
and do not have the same performance guarantees as "live" applications.
SANDBOX applications cannot be upgraded.

Information about the different flavors offered can be found here:
http://docs.dotcloud.com/guides/flavors/

そしてdotCloudに同期。
$ dotcloud push helloworld
# upload ~/work/dotcloud/helloworld ssh://dotcloud@uploader.dotcloud.com:443/helloworld
# rsync
building file list ... done
./
dotcloud.yml

sent 148 bytes  received 34 bytes  28.00 bytes/sec
total size is 29  speedup is 0.16
16:31:09 ---> Deploy of "helloworld" scheduled for revision rsync-1345739468475 at 2012-08-23 16:31:09
16:31:09 ---> Building the application...
16:31:09 ---> Nothing to build
16:31:09 ---> Initializing new services... (This may take a few minutes)
16:31:09 ---> Using default scaling for service my_database (1 instance(s)).
16:31:09 [my_database.0] Initializing...
16:31:24 [my_database.0] Service initialized
16:31:25 ---> Deploy finished

Deployment finished. Your application is available at the following URLs
No URL found. That's ok, it means that your application does not include a webservice.

3.MySQLをコマンドラインから触ってみる
下記のコマンドでMySQLの対話モードに入ります。
$ dotcloud run helloworld.my_database -- mysql
# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.1.41-3ubuntu12.10-log (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
コマンド中のhelloworld.my_databaseは、<createしたサービス名>.<dotcloud.ymlに記述したMySQLのキー>に相当します。

で、まずはデータベースを作って。
mysql> CREATE DATABASE nujabes;
Query OK, 1 row affected (0.00 sec)

作ったデータベースを使います。
mysql> use nujabes;
Database changed

そのデータベース中にテーブルを作って。
mysql> CREATE TABLE songs(id INT(10), title VARCHAR(64));
Query OK, 0 rows affected (0.04 sec)

値を入れてみます。
mysql> INSERT INTO songs(id, title) VALUES(0, 'Luv (Sic) Pt. 2');
Query OK, 1 row affected (0.01 sec)

SELECT文で確認します。
mysql> SELECT * FROM songs;
+------+-----------------+
| id   | title           |
+------+-----------------+
|    0 | Luv (Sic) Pt. 2 |
+------+-----------------+
1 row in set (0.00 sec)

簡単でした。

4.さいごに
慣れたら3分で構築できそうです。

次のエントリではPHPからMySQLを操作してみます。

2011年10月23日日曜日

phpMyAdminで他のサーバのDBを制御する

仕事で標記の件が必要になりそうだったので
イメージだけでも掴んでおこうと自宅で試してみました。

どういう風に試すかですが、簡単に言うと
1. まず2台のPC(Ubuntu 11.10 と Mac 10.6.8)にAMP環境を構築する
2. 更にUbuntuにphpMyAdmin を入れる
3. Ubuntu内のphpMyAdminから、LAN経由でMacのDBを制御してみる
って感じです。

このエントリーの目次
1.MAMP環境を構築する
2.LAMP環境を構築する
3.UbuntuのphpMyAdminの設定をする
4.MacのMySQLの設定をする
5. Ubuntu内のphpMyAdminから、LAN経由でMacのDBを見てみる
6.できた!

1. MAMP環境を構築する
下記を参考に(手抜き)
Mac に MacPorts を使って MySQL と PHPMyAdmin をインストールする方法 | WEBLE

バージョン5.1.45が入りました。

MacのMySQL系のコマンドは全く慣れないので、引用させて頂きます。

・MySQLサーバの起動コマンド
sudo /opt/local/share/mysql5/mysql/mysql.server start
・rootユーザにパスワードを設定する
/opt/local/lib/mysql5/bin/mysqladmin -u root password 'password'
・MySQLにログイン
/opt/local/lib/mysql5/bin/mysql -u root -p

2.LAMP環境を構築する
下記を参考に(手抜き)
Ubuntu に MySQL と phpMyAdmin をインストールする | hiratake55 の開発メモ

・apacheのリスタートコマンド
sudo /etc/init.d/apache2 restart

バージョン5.1.58が入りました。

3.UbuntuのphpMyAdminの設定をする
phpMyAdminの設定ファイルを編集します。Ubuntu に MySQL と phpMyAdmin をインストールする | hiratake55 の開発メモの通りに作業したので、下記のファイルを編集することになります。

/var/www/phpmyadmin/config.inc.php

30行目からのあたりを下記のように編集します。
$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['host'] = '192.168.x.x'; //MacのプライベートIPアドレス
$cfg['Servers'][$i]['port'] = '3306';

4.MacのMySQLの設定をする
ここでは4.7.5. アクセス制御の段階 1: 接続確認 | MySQL5.1 リファレンスマニュアルを参考にしました。
で、まず、コマンドでMySQLにrootにログイン。
/opt/local/lib/mysql5/bin/mysql -u root -p


以下のように、このDBにアクセスを許可するアカウントを作成します。
grant all privileges on *.* to アカウント名@'192.168.x.x/255.255.255.0' identified by 'パスワード';

ちなみに、「all privileges」文で新アカウントに全ての権限を与えてます。

5. Ubuntu内のphpMyAdminから、LAN経由でMacのDBを見てみる

「http://UbuntuのプライベートIPアドレス/phpmyadmin/」にアクセスすると、以下のような画面が出ます。

そして4.MacのMySQLの設定をするで設定したアカウント名とパスワードを入力すれば、MacのDBにログインできます。
DBの内容を見て、Mac内のDBが取得できているコトを確認します。

6.できた!
MacでMySQLをいじるのは初めてなので色々と戸惑いました。ログインできないとか、そもそも起動の仕方が分からないとか。。

長々と書きましたが、間違いなどありましたらご指摘いただきたいです。

Related Posts Plugin for WordPress, Blogger...