株式会社ライブキャストロゴ 株式会社ライブキャスト

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をインストールします。

MacBook-Pro:~ mojyamojya$ brew install 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にインストールした時に限ったものではありません。

mysql> create USER admin;
Query OK, 0 rows affected (0.00 sec)

以下のSQLを実行して、ユーザーが作成されていることを確認します。

mysql> select user,host,password from mysql.user;
+———-+———–+——————————————-+
| user | host | password |
+———-+———–+——————————————-+
| root | localhost | |
| root | 127.0.0.1 | |
| root | ::1 | |
| admin | % | |
+———-+———–+——————————————-+
4 rows in set (0.00 sec)

正しくユーザーが作成されました。

パスワード設定

作成したユーザーのパスワードを設定します。
※ パスワードは適宜ふさわしいものを設定してください。

mysql> set password for admin=password(‘xxxxxxxxxx’);
Query OK, 0 rows affected (0.00 sec)

再度以下のSQLを実行して確認します。

mysql> select user,host,password from mysql.user;
+———-+———–+——————————————-+
| user | host | password |
+———-+———–+——————————————-+
| root | localhost | |
| root | 127.0.0.1 | |
| root | ::1 | |
| admin | % | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+———-+———–+——————————————-+
4 rows in set (0.00 sec)

正しくパスワードが設定されました。

データベースの作成

次に接続テストをするためにデータベースを作成するのですが、今回は他のプログラムで既に使用していたデータベースのバックアップから復元する手順で行いました。

以下のコマンドを実行します。

MacBook-Pro:bin mojyamojya$ sudo mysql -uroot -p reco < /Users/mojyamojya/Downloads/test.backup Enter password:

こんなに簡単な書式で復元できちゃうんですね。

-u オプションに注目してください。
ユーザー名rootの間にスペースがありません。
今回、なぜだかこのような書式で実行しないとうまくいかなかったような気がします。
要注意です!

作成されたテーブルを確認して、復元がうまくいったか確認します。

mysql> show tables;
+—————+
| Tables_in_reco|
+—————+
| table1 |
| table2 |
| table3 |
| table4 |
| table5 |
+—————+
5 rows in set (0.00 sec)

問題なさそうです。

権限付与

作成したユーザーにこのデータベースのテーブルに対するアクセス権を付与します。

mysql> grant all on reco.* to ‘admin’@’localhost’ identified by ‘xxxxxxxxxx’;
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:globalsign mojyamojya$ cd /etc
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:5.6.25 mojyamojya$ cd /tmp
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 stop
MacBook-Pro:apache2 mojyamojya$ sudo apachectl start

※ MacBook Proにプレインストールされているapacheを再起動するコマンドは、apachectlというコマンドなのですね。

SQLSTATE[HY000] [2002] No such file or directory

というエラーメッセージは、

mysql.sockがないよ

というエラーメッセージだったのですね。

もしmysql.sockが/tmpに存在しない場合には、mysql.server startかmysqld_safeコマンドを実行すれば良いみたいです。

ということで実行してみました。

MacBook-Pro:run mojyamojya$ mysql.server start
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/MacBook-Pro.local.pid).

あれ?エラーになってしまいました。
今度はmysqld_safeを試してみます。

MacBook-Pro:run mojyamojya$ sudo 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

またエラーになってしまいました。
エラーログを確認してみます。

MacBook-Pro:mysql mojyamojya$ tail -n 10 /usr/local/var/mysql/MacBook-Pro.local.err

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$ sudo chmod -R 770 /usr/local/var/mysql/
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

もう一度試してみます。

MacBook-Pro:mysql mojyamojya$ sudo mysqld_safe
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

今度はうまくいったみたいです。

MacBook-Pro:tmp mojyamojya$ ls -lv
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を起動します。

MacBook-Pro:mysql mojyamojya$ mysql.server start
Starting MySQL
.. SUCCESS!

再度PHPのWebアプリを実行しましたが、今度はエラーも出ず、ちゃんとMySQLに接続することができました!

以上、MacにMySQLをインストールする手順と幾つかの注意点でした!