MacPortsでAMP(Apache,MySQL and PHP)環境の構築

私の愛機であるMacBook Pro 13-inch Mid 2009に,AMP(Apache,MySQL and PHP)環境を構築した時のログを記載しておく.

  • OS Snow Leopard; Mac OS X 10.6.6
  • Apache Ver. 2.2.X
  • MySQL Ver. 5.1.X
  • PHP Ver. 5.3.X

まずは,MySQLからインストールする.


「port search mysql」でパッケージを探してみると「mysql5」という名前になっている.
まずは,MySQLクライアントプログラム,続けてMySQLサーバプログラムをインストールする.

$ sudo port install mysql5
$ sudo port install mysql5-server

次に,MySQLのデフォルト(システム)データベースを設定する.
ユーザ「_mysql」で実行しなければならないようだ.

$ sudo -u _mysql mysql_install_db5

MySQLの設定ファイル「my.cnf」を,見本からコピーして作成する.

$ sudo cp /opt/local/share/mysql5/mysql/my-medium.cnf \
> /opt/local/etc/mysql5/my.cnf

デフォルトの文字コードセットをUTF-8にするために,設定を追加する.

$ sudo vi /opt/local/etc/mysql5/my.cnf

[ /opt/local/etc/mysql5/my.cnf ]

:
[client]
:
default-character-set = utf8

[mysqld]
:
character-set-server = utf8

[mysqldump]
:
default-character-set = utf8

[mysql]
:
default-character-set = utf8
:

とりあえずデーモンを走らせてみる.

$ sudo /opt/local/share/mysql5/mysql/mysql.server start

rootでMySQLサーバに接続してみる.
「mysql」コマンドではなく,「mysql5」であるというところに注意!

$ mysql5 -u root
Enter password:Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 70
Server version: 5.1.53-log Source distribution

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

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

mysql>

パスワードなしで接続できるようになっている.
とりあえず「\q」を入力して,MySQLクライアントプログラムを終了する.

rootユーザがパスワードなしというのもアレなので,適当に(hogehoge)とパスワードを設定する.
ここでも「mysqladmin」ではなく,「mysqladmin5」というところに注意!

$ mysqladmin5 -u root password 'hogehoge'

改めて,パスワード付きでMySQLに接続.

$ mysql5 -u root -p
Enter Password:hogehoge

MySQLのシステムデータベース(mysql)に切り換えて,userテーブルの数カラムを表示させてみる.

mysql> use mysql
mysql> select user, host, password from user;

+--------+-----------------+-------------------------------------------+
| user   | host            | password                                  |
+--------+-----------------+-------------------------------------------+
| root   | localhost       | *64A64B128FF64A64B128FF64A64B128FF64A64B1 |
| root   | silverfox.local |                                           |
| root   | 127.0.0.1       |                                           |
|        | localhost       |                                           |
|        | silverfox.local |                                           |
+--------+-----------------+-------------------------------------------+

すると,rootユーザ(実際は,root@localhost)にパスワードが設定されているのが分かる.パスワードはご覧の通り暗号化されている.(※ここで表示されているデータは架空のものである)

root(管理者)でアクセスするのはちょっと心配であるので,別途適当なユーザ(dbuser)を追加してみる.

mysql> grant all privileges on test.* to dbuser
-> identified by 'pass' with grant option;
mysql> grant all privileges on test.* to dbuser@localhost
-> identified by 'pass' with grant option;

それぞれ,dbuser@%とdbuser@localhostにパスワードを設定し,「test」データベースについてのみアクセス可能な権限を付けた.

再度,userテーブルの中身を確認.

mysql> select user, host, password from user;
+--------+-----------------+-------------------------------------------+
| user   | host            | password                                  |
+--------+-----------------+-------------------------------------------+
| root   | localhost       | *64A64B128FF64A64B128FF64A64B128FF64A64B1 |
| root   | silverfox.local |                                           |
| root   | 127.0.0.1       |                                           |
|        | localhost       |                                           |
|        | silverfox.local |                                           |
| dbuser | localhost       | *34FD07B148CCA9FCB2BE6C2EA20689053E748B13 |
| dbuser | %               | *34FD07B148CCA9FCB2BE6C2EA20689053E748B13 |
+--------+-----------------+-------------------------------------------+

管理者でのオペレーションを抜け,再度,dbuserで接続する.

mysql> \q
$ mysql -u dbuser -p

「test」データベースに切り換えて,「students」データベースを作成してみる.

mysql> use test;
mysql> CREATE TABLE students (
-> s_id CHAR(11) NOT NULL,
-> s_name VARCHAR(40),
-> e_mail VARCHAR(80),
-> PRIMARY KEY (s_id)
-> );

んでもって,適当にレコードを挿入しておく.

mysql> INSERT INTO students VALUES ('1234567891', '鹿児島太郎', 'taro@kago.jp');
mysql> INSERT INTO students VALUES ('1234567892', '薩摩花子', 'hana@kago.jp');
mysql> INSERT INTO students VALUES ('1234567893', '西郷隆盛', 'taka@satsuma.jp');

SELECT文で,studentsテーブルの全てのレコードを抽出してみる.

mysql> select * from students;
+------------+-----------------+--------------+
| s_id       | s_name          | e_mail       |
+------------+-----------------+--------------+
| 1234567891 | 鹿児島太郎        | taro@kago.jp |
| 1234567892 | 薩摩花子          | hana@kago.jp |
| 1234567893 | 西郷隆盛          | taka@kago.jp |
+------------+-----------------+--------------+

mysql> \q

とりあえず,MySQLは動作した.
次に,ApacheとPHPである.これは一緒にPortsでインストールする.

$ sudo port install php5 +apache2 +pear

ApacheとPHPを連携させるために,PHPのモジュール(libphp5.so)をapxsで連携というかインストールする.

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

PHPの設定ファイル「php.ini」を見本からコピーして生成する.

$ sudo cp /opt/local/etc/php5/php.ini-development /opt/local/etc/php5/php.ini

Apacheの設定ファイル「httpd.conf」を一部修正.

$ sudo vi /opt/local/apache2/conf/httpd.conf

[ /opt/local/apache2/conf/httpd.conf ]

### PHP

Include conf/extra/mod_php.conf
:
# User home directories
Include conf/extra/httpd-userdir.conf

PHPが動作するか,次のようなPHPスクリプトファイル「test.php」を /opt/local/apache2/htdocs/ の中に作成する.

$ sudo vi /opt/local/apache2/htdocs/test.php


[ /opt/local/apache2/htdocs/test.php ]

<?php
phpinfo();
?>

そして,Apacheのデーモンを動かして...

$ sudo /opt/local/apache2/bin/apachectl start

ブラウザから,アドレス(URL)「http://localhost/test.php」にアクセスしてみると,次のようなページが表示されるはずである.

次に,PHPからMySQLを制御できるよう,PHPのモジュールを別途インストールする.
他にも色々とインストールしておく.

$ sudo port install php5-mbstring php5-mcrypt php5-iconv php5-gd php5-gettext
$ sudo port install php5-mysql

PHPの設定ファイル「php.ini」のMySQLとの連携で必要なソケットのパスとか記載しておく.MySQLが使用しているソケットファイルの場所は,psコマンドをたたけば分かります.

$ ps ax | grep mysqld
$ sudo vi /opt/local/etc/php5/php.ini

[ /opt/local/etc/php5/php.ini ]

:
;;;pdo_mysql.default_socket=

pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock
;;;mysql.default_socket =
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
;;;mysqli.default_socket =
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
:

Apacheのデーモンを再起動する.

$ sudo /opt/local/apache2/bin/apachectl stop
$ sudo /opt/local/apache2/bin/apachectl start

先ほど,MySQLにて作成したデータベース「test」にPHPよりアクセスして,結果セットをWebページで表示させてみる.

$ sudo vi /opt/local/apache2/htdocs/testdb.php

[ /opt/local/apache2/htdocs/testdb.php ]

<html><head>
<meta http-equiv="Content-Type" context="text/html; charset=utf-8">
<title>testdb</title>
</head>
<body>
<?php
$con = mysql_connect("localhost:3306", "dbuser", "pass");
mysql_select_db("test", $con);
$res = mysql_query("SELECT * FROM students", $con);
while ($row = mysql_fetch_assoc($res)) {
    printf("%s %s %s<br>\n", $row['s_id'], $row['s_name'], $row['e_mail']);
}
mysql_free_result($res);
mysql_close($con);
?>
</body>
</html>

ブラウザから,アドレス(URL)「http://localhost/testdb.php」にアクセスしてみる.
すると,次のようなページが表示されるはずである.

これで,ApacheとMySQLがPHPにより連携されたことが確認できた.

それでは,このMySQLとApacheそれぞれのデーモンが,システム起動時に常に実行されるように設定しておく.

まずは,両デーモンを停止しておいて...

$ sudo /opt/local/apache2/bin/apachectl stop
$ sudo /opt/local/share/mysql5/mysql/mysql.server stop

システム起動時に起動されるサービスの一覧は,「launchctl」コマンドにて得られる.そのリストの中の「org」で始まるサービスだけを表示させてみる.

$ sudo launchctl list | grep org
-         0        org.x.privileged_startx
-         0        org.postfix.master
16        -        org.ntp.ntpd
-         0        org.cups.cupsd

ここには,「mysql」や「apache」の文字がない.
それでは,サービスをロードさせ,自動起動のリストに登録させてみる.

$ sudo port load apache2
$ sudo port load mysql5

再度,launchctlで確認.

$ sudo launchctl list | grep org
4209       -         org.macports.mysql5
4197       -         org.macports.apache2
-          0         org.x.privileged_startx
-          0         org.postfix.master
16         -         org.ntp.ntpd
-          0         org.cups.cupsd

これにて,MacにAMPの環境構築完了である.

広告
Posted in Mac

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中