[macOS General] Mac に MySQL 5.7 を brew install して自動起動させる

utf8mb4 の設定から brew services まで。

[markdown]
やること。

– MySQL を brew install する。
– my.cnf に utf8mb4 を設定する。
– brew services で自動起動させる。

MySQL徹底入門 第3版 ~5.5新機能対応~
翔泳社 (2014-03-25)
売り上げランキング: 7,397

## インストール

“`html
% brew install mysql
Updating Homebrew…
==> Downloading https://homebrew.bintray.com/bottles/mysql-5.7.17.sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring mysql-5.7.17.sierra.bottle.1.tar.gz
==> Using the sandbox
==> /usr/local/Cellar/mysql/5.7.17/bin/mysqld –initialize-insecure –user=**** –basedir=/usr/local/Cellar/mysql/5.7.17 –datadi
==> Caveats
We’ve installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don’t want/need a background service you can just run:
mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql/5.7.17: 321 files, 234.4M
% mysql –version
mysql Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using EditLine wrapper
“`

## my.cnf に utf8mb4 を設定する

`~/.my.cnf` に絵文字やサロゲートペアが扱えるように日本語の設定をする。

> [MySQL :: MySQL 5.7 Reference Manual :: 5.2.6 Using Option Files](https://dev.mysql.com/doc/refman/5.7/en/option-files.html)

### .my.cnf の作成

my.cnf が読み込まれる場所を調べる。

“`html
% mysql –help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
“`

> [Hemebrewで入れたMySQLのmy.cnfを設定 – ほげほげ(仮)](http://starzero.hatenablog.com/entry/2012/11/10/103047)

my.cnf のひな型が必要な場合、下記で入手する。

“`html
% find /usr/local/Cellar/mysql -name “my*.cnf”
/usr/local/Cellar/mysql/5.7.17/support-files/my-default.cnf
% cp /usr/local/Cellar/mysql/5.7.17/support-files/my-default.cnf ~/.my.cnf
“`

### utf8mb4 の設定

`~/.my.cnf` に設定を加える。

> * [MySQL :: MySQL 5.7 Reference Manual :: 11.1.5 Configuring Application Character Set and Collation](https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html)
> * [MySQL :: MySQL 5.7 Reference Manual :: 6.1.4 Server Command Options](https://dev.mysql.com/doc/refman/5.7/en/server-options.html)

“`html:~/.my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
log_timestamps=SYSTEM
“`

> [How to support full Unicode in MySQL databases · Mathias Bynens](https://mathiasbynens.be/notes/mysql-utf8mb4)

collation については以下も参考。

> [ActiveRecordでデフォルトの照合順序を変更する – Qiita](http://qiita.com/kamipo/items/d7863f0df24916005657)

`default-character-set` を利用すると強制的に特定の文字セットを使用させることができる。

> * [MySQL :: MySQL 5.7 Reference Manual :: 11.5 Character Set Configuration](https://dev.mysql.com/doc/refman/5.7/en/charset-configuration.html)

### その他 v5.7 の情報

`log_timestamps=SYSTEM` など、その他 v5.7 の情報はこちらを参考にする。

MySQL 5.7にやられないためにおぼえておいてほしいこと from yoku0825

> [MacにMySQL5.7をインストール。開発用my.cnfも公開 | karakaram-blog](http://www.karakaram.com/mac-mysql57-install)

## 起動と設定の確認

### 初期化

Homebrew で MySQL をインストールした場合、データベース等の関連ファイルは `/usr/local/var/mysql` にまとめられる。

> [Mac OS X El CapitanでMySQLをクリーンインストールする | Crack the Game, Win a Jackpot](https://yukiyamashina.com/blog/2016/01/18/clean-install-mysql-on-mac-os-x-el-capitan/)

初期化が必要であれば `mysql_install_db` から `mysqld –initialize` に変わったそうなので、これを実行する。

> [MySQL :: MySQL 5.7 Reference Manual :: 2.10.1.1 Initializing the Data Directory Manually Using mysqld](https://dev.mysql.com/doc/refman/5.7/en/data-directory-initialization-mysqld.html)

“`html
% mysqld –initialize
“`

### 起動と mysql_secure_installation

“`html
% mysql.server start
Starting MySQL
. SUCCESS!
“`

セキュリティ設定。
すべて y でパスワードは strong とする。

“`html
% mysql_secure_installation
“`

### 接続文字セットおよび照合順序の確認

MySQL にログインして確認する。

> [MySQL :: MySQL 5.7 Reference Manual :: 11.1.4 Connection Character Sets and Collations](https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html)

“`html
% mysql.server restart
Shutting down MySQL
. SUCCESS!
Starting MySQL
. SUCCESS!
% mysql -u root -p
mysql> SHOW VARIABLES WHERE Variable_name LIKE ‘character\_set\_%’ OR Variable_name LIKE ‘collation%’ OR Variable_name LIKE ‘log\_timestamps%’;
+————————–+——————–+
| Variable_name | Value |
+————————–+——————–+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_general_ci |
| log_timestamps | SYSTEM |
+————————–+——————–+
11 rows in set (0.00 sec)
“`

意図したとおりに設定できたようなので、一度停止する。

“`html
% mysql.server stop
Shutting down MySQL
.. SUCCESS!
“`

## 自動起動の設定

macOS では伝統的に launchd と言うデーモンにログイン時に起動させるサービスを登録する。

> [Mac OS XでMySQLを自動起動させる方法 – NissyBlog](http://nissy0409.hatenablog.com/entry/2016/02/09/012246)

しかし `brew install` すると `brew services` が利用できるので、こちらで設定する。

> * [Homebrew/homebrew-services: Starts Homebrew formulae’s plists with launchctl](https://github.com/Homebrew/homebrew-services)
> * [mac MySQL ターミナル 自動起動 – Qiita](http://qiita.com/rinkun/items/c1649bcbe9a79bf2b07e)

“`html
% brew services list
Name Status User Plist
mysql stopped
php71 stopped
% brew services start mysql
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)
% brew services list
Name Status User Plist
mysql started **** /Users/****/Library/LaunchAgents/homebrew.mxcl.mysql.plist
php71 stopped
“`

らくちんですね。

## 補遺

> * [MySQL: コマンドをプロンプトなしでセキュアに利用するには | deadwood](https://www.d-wood.com/blog/2013/09/16_4641.html)
[/markdown]