MAMPをインストールしてMacBook ProにPHPのWeb開発環境を作ろうと思ったのですが、ApacheとPHPはインストールされているようなので、MySQLだけをインストールすることにしました。
今回使用した環境は以下の通りです。
- MacBook Pro
- OS X Yosemite 10.10.5
前回のDeveloper’s blog | Material Designを簡単にWebサイトに適用できるMaterializeを使ってみたで導入したHomebrewを使ってMySQLをインストールしてみたいと思います。
※ 参考サイトはこちら
↓
OSX – Mac へ MySQL を Homebrew でインストールする手順 – Qiita
MySQLのインストール
以下のコマンドを実行してMySQLをインストールします。
==> Installing mysql dependency: openssl
==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2d_1.yosemite.b
######################################################################## 100.0%
==> Pouring openssl-1.0.2d_1.yosemite.bottle.tar.gz
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
/usr/local/etc/openssl/certs
and run
/usr/local/opt/openssl/bin/c_rehash
This formula is keg-only, which means it was not symlinked into /usr/local.
OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.
Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you’ll need to add to your
build variables:
LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
==> Summary
超簡単です!
インストールが完了しました。
続いてPHPからMySQLに接続できるように設定をしていきたいと思います。
MySQLのユーザ作成
MySQLのユーザーを作成します。
※ このあたりの手順はMySQLインストール時はいつものように行う手順で、Macにインストールした時に限ったものではありません。
Query OK, 0 rows affected (0.00 sec)
以下のSQLを実行して、ユーザーが作成されていることを確認します。
+———-+———–+——————————————-+
| user | host | password |
+———-+———–+——————————————-+
| root | localhost | |
| root | 127.0.0.1 | |
| root | ::1 | |
| admin | % | |
+———-+———–+——————————————-+
4 rows in set (0.00 sec)
正しくユーザーが作成されました。
パスワード設定
作成したユーザーのパスワードを設定します。
※ パスワードは適宜ふさわしいものを設定してください。
Query OK, 0 rows affected (0.00 sec)
再度以下のSQLを実行して確認します。
+———-+———–+——————————————-+
| user | host | password |
+———-+———–+——————————————-+
| root | localhost | |
| root | 127.0.0.1 | |
| root | ::1 | |
| admin | % | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+———-+———–+——————————————-+
4 rows in set (0.00 sec)
正しくパスワードが設定されました。
データベースの作成
次に接続テストをするためにデータベースを作成するのですが、今回は他のプログラムで既に使用していたデータベースのバックアップから復元する手順で行いました。
以下のコマンドを実行します。
こんなに簡単な書式で復元できちゃうんですね。
ユーザー名rootの間にスペースがありません。
今回、なぜだかこのような書式で実行しないとうまくいかなかったような気がします。
要注意です!
作成されたテーブルを確認して、復元がうまくいったか確認します。
+—————+
| Tables_in_reco|
+—————+
| table1 |
| table2 |
| table3 |
| table4 |
| table5 |
+—————+
5 rows in set (0.00 sec)
問題なさそうです。
権限付与
作成したユーザーにこのデータベースのテーブルに対するアクセス権を付与します。
Query OK, 0 rows affected (0.01 sec)
これでインストールしたMySQLの接続テストをする準備が整いました。
Webアプリの動作確認
それでは実際にPHPで開発したWebアプリからMySQLのデータベースにアクセスできるか確認したいと思います。
試してみたところ、以下のようなエラーメッセージが表示され接続することができませんでした。
SQLSTATE[HY000] [2002] No such file or directory
このエラーメッセージからいろいろ調べていくとまだ不足している点がいくつかあることがわかりました。
まず、php.iniが存在しなかったということです。
php.ini.defaultという名前のファイルがあるので、こちらをコピーしてphp.iniとします。
MacBook-Pro:etc mojyamojya$ ls -lv php.ini
ls: php.ini: No such file or directory
MacBook-Pro:etc mojyamojya$ ls -lv php.ini.default
-r–r–r– 1 root wheel 69266 2 26 16:32 php.ini.default
MacBook-Pro:etc mojyamojya$ emacs php.ini.default
MacBook-Pro:etc mojyamojya$ sudo chmod 644 php.ini.default
MacBook-Pro:etc mojyamojya$ sudo cp php.ini.default php.ini
MacBook-Pro:etc mojyamojya$ ls -lv php.ini
-rw-r–r– 1 root wheel 69266 7 22 00:07 php.ini
次に、MySQLへの接続にmysql.sockを使うという設定をphp.iniに記述しないといけない、という点でした。
mysql.sockがある場所を確かめます。
MacBook-Pro:tmp mojyamojya$ ls -lv
total 40
drwx—— 3 mojyamojya wheel 102 7 21 22:16 KSOutOfProcessFetcher.501.KvQVA6MpDzYxvkzUKAnRQWNnZYg=
drwx—— 3 mojyamojya wheel 102 7 20 21:57 com.apple.launchd.4QgeyQ7xbo
drwx—— 3 mojyamojya wheel 102 7 20 21:57 com.apple.launchd.E2rGccRRDd
srwxrwxrwx 1 mojyamojya wheel 0 7 20 22:52 mysql.sock
-rw——- 1 _www wheel 19049 7 21 21:44 wsdl-mojyamojya-af01282ba20e9e4b0faba165d48c3377
/tmpの下にありました。
php.iniを以下のように編集します。
●変更前
[Pdo_mysql]
; If mysqlnd is used: Number of cache slots for the internal result set cache
; http://php.net/pdo_mysql.cache_size
pdo_mysql.cache_size = 2000; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
; http://php.net/pdo_mysql.default-socket
pdo_mysql.default_socket=
の1番下の行を変更します。
↓
●変更後
pdo_mysql.default_socket=/tmp/mysql.sock
apacheを再起動して設定を読み込みます。
MacBook-Pro:apache2 mojyamojya$ sudo apachectl start
※ MacBook Proにプレインストールされているapacheを再起動するコマンドは、apachectlというコマンドなのですね。
SQLSTATE[HY000] [2002] No such file or directory
というエラーメッセージは、
mysql.sockがないよ
というエラーメッセージだったのですね。
ということで実行してみました。
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/MacBook-Pro.local.pid).
あれ?エラーになってしまいました。
今度はmysqld_safeを試してみます。
150819 22:48:57 mysqld_safe Logging to ‘/usr/local/var/mysql/MacBook-Pro.local.err’.
150819 22:48:57 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
/usr/local/bin/mysqld_safe: line 129: /usr/local/var/mysql/MacBook-Pro.local.err: Permission denied
/usr/local/bin/mysqld_safe: line 166: /usr/local/var/mysql/MacBook-Pro.local.err: Permission denied
150819 22:48:57 mysqld_safe mysqld from pid file /usr/local/var/mysql/MacBook-Pro.local.pid ended
/usr/local/bin/mysqld_safe: line 129: /usr/local/var/mysql/MacBook-Pro.local.err: Permission denied
またエラーになってしまいました。
エラーログを確認してみます。
150819 22:51:16 mysqld_safe mysqld from pid file /usr/local/var/mysql/MacBook-Pro.local.pid ended
やっぱり権限が足りないみたいです。
MySQL関連のファイルのownerを_mysqlにしないといけないみたいです。
Homebrew でインストールした MySQL で /tmp/mysql.sock が開けなかった時の対応 – KRAKENBEAL RECORDS
ownerを変更して、パーミッションも変更してみました。
MacBook-Pro:mysql mojyamojya$ ls -lv
total 221272
-rwxrwx— 1 _mysql admin 37212 8 19 22:51 MacBook-Pro.local.err
-rwxrwx— 1 _mysql admin 56 7 19 11:12 auto.cnf
drwxrwx— 13 _mysql admin 442 7 21 09:38 reco
-rwxrwx— 1 _mysql admin 50331648 8 15 10:49 ib_logfile0
-rwxrwx— 1 _mysql admin 50331648 7 19 11:07 ib_logfile1
-rwxrwx— 1 _mysql admin 12582912 8 15 10:49 ibdata1
drwxrwx— 81 _mysql admin 2754 7 19 11:07 mysql
drwxrwx— 55 _mysql admin 1870 7 19 11:07 performance_schema
もう一度試してみます。
Password:
150819 22:51:16 mysqld_safe Logging to ‘/usr/local/var/mysql/MacBook-Pro.local.err’.
150819 22:51:16 mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
150819 22:51:16 mysqld_safe mysqld from pid file /usr/local/var/mysql/MacBook-Pro.local.pid ended
今度はうまくいったみたいです。
total 40
drwx—— 3 mojyamojya wheel 102 8 19 22:32 KSOutOfProcessFetcher.501.I5ci1K_TwCwqo1sKvc0siaBbJTw=
drwx—— 3 mojyamojya wheel 102 8 17 14:37 com.apple.launchd.7CPmr5Amp0
drwx—— 3 mojyamojya wheel 102 8 17 14:37 com.apple.launchd.Sp7gFCRuwt
srwxrwxrwx 1 mojyamojya wheel 0 8 19 22:58 mysql.sock
-rw——- 1 _www wheel 19049 8 19 13:47 wsdl-mojyamojya-af01282ba20e9e4b0faba165d48c3377
/tmpの下にもちゃんとmysql.sockが作成されていました。
MySQLを起動します。
Starting MySQL
.. SUCCESS!
再度PHPのWebアプリを実行しましたが、今度はエラーも出ず、ちゃんとMySQLに接続することができました!
以上、MacにMySQLをインストールする手順と幾つかの注意点でした!