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

utf8mb4 の設定から brew services まで。

やること。

  • MySQL を brew install する。
  • my.cnf に utf8mb4 を設定する。
  • brew services で自動起動させる。
MySQL徹底入門 第3版 ~5.5新機能対応~
翔泳社 (2014-03-25)
売り上げランキング: 7,397

インストール

% 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

.my.cnf の作成

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

% 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を設定 – ほげほげ(仮)

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

% 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 に設定を加える。

~/.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

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

ActiveRecordでデフォルトの照合順序を変更する – Qiita

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

その他 v5.7 の情報

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

MacにMySQL5.7をインストール。開発用my.cnfも公開 | karakaram-blog

起動と設定の確認

初期化

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

Mac OS X El CapitanでMySQLをクリーンインストールする | Crack the Game, Win a Jackpot

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

MySQL :: MySQL 5.7 Reference Manual :: 2.10.1.1 Initializing the Data Directory Manually Using mysqld

% mysqld --initialize

起動と mysql_secure_installation

% mysql.server start
Starting MySQL
. SUCCESS!

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

% mysql_secure_installation

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

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

MySQL :: MySQL 5.7 Reference Manual :: 11.1.4 Connection Character Sets and Collations

% 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)

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

% mysql.server stop
Shutting down MySQL
.. SUCCESS!

自動起動の設定

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

Mac OS XでMySQLを自動起動させる方法 – NissyBlog

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

% 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

らくちんですね。

補遺