HomebrewでMySQL 5.6をインストール。開発用my.cnfもさらす

2013年3月9日

MySQL

この記事は Homebrew で MySQL5.6 をインストールしたときのメモです。

いつの間にか Homebrew の MySQL のバージョンが 5.6 に上がっていたので 5.5 からアップデートしてみました。my.cnf も全面的に見直したのでさらします。

2015年12月16日追記
MySQL5.7 版も書きました。

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

Homebrew の MySQL が 5.7 になったので 5.6 からアップグレードしてみました。インストール時に実行 ...

続きを見る

動作確認環境

  • MacBook Air 2012 mid
  • OS X Mountain Lion

目次

  1. MySQL をインストール
  2. データベースのインストール先とデータの保存先、実行ユーザーを設定する
  3. MySQL を起動する
  4. root のパスワードを変更する
  5. MySQL のセキュリティ設定
  6. my.cnf を設置する
  7. my.cnf サンプル
  8. パスワードを変更しようとしてエラーが出た

MySQL をインストール

Homebrew を最新版に更新

brew update して Homebrew を最新版に更新しておきます。

$ brew update

インストールオプションを確認する

brew options コマンドでインストールオプションを確認します。必要なオプションがあれば、インストール時に指定します。

$ brew options mysql

MySQL をインストールする

brew install コマンドで MySQL をインストールします。brew update して最新版になっていれば 5.6 がインストールされます。

$ brew install mysql

インストール後に表示されるメッセージを確認する

インストール後に表示されるメッセージです。この後、必要に応じて対応します。

Set up databases to run AS YOUR USER ACCOUNT with:
    unset TMPDIR
    mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
To set up base tables in another folder, or use a different user to run
mysqld, view the help for mysqld_install_db:
    mysql_install_db --help
and view the MySQL documentation:
  * http://dev.mysql.com/doc/refman/5.5/en/mysql-install-db.html
  * http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html
To run as, for instance, user "mysql", you may need to `sudo`:
    sudo mysql_install_db ...options...
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.
To connect:
    mysql -uroot
To have launchd start mysql at login:
    ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don't want/need launchctl, you can just run:
    mysql.server start

インストール後のメッセージを後から確認する

上記のメッセージは brew info コマンドでいつでも確認できます。

$ brew info mysql

データベースのインストール先とデータの保存先、実行ユーザーを設定する

インストール後に表示されたメッセージに従い、コマンドを実行します。/usr/local/bin に PATH が通っているものとします。

データベースのインストールとオプションの設定

mysql-install-db コマンドを実行してデータベースをインストールします。

$ unset TMPDIR
$ mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp

mysql_install_db コマンド実行後のメッセージ

コマンドの実行後に表示されるメッセージです。この後、必要に応じて対応します。

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
  /usr/local/opt/mysql/bin/mysqladmin -u root password 'new-password'
  /usr/local/opt/mysql/bin/mysqladmin -u root -h karakaramac12.local password 'new-password'
Alternatively you can run:
  /usr/local/opt/mysql/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
  cd . ; /usr/local/opt/mysql/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
  cd mysql-test ; perl mysql-test-run.pl
Please report any problems with the ./bin/mysqlbug script!
The latest information about MySQL is available on the web at
  http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
New default config file was created as /usr/local/opt/mysql/my.cnf and
will be used by default by the server when you start it.
You may edit this file to change server settings

MySQL を起動する

起動コマンド

mysql.server start コマンドで MySQL を起動します。私は、MySQL を OS の起動と同時に起動せず、必要な時だけ手動で起動しています。

$ mysql.server start

停止コマンド

停止するときは以下のコマンドで。

$ mysql.server stop

root のパスワードを変更する

MySQL が起動したら、mysqladmin コマンドで root のパスワードを変更します。new-password のところに新しい root パスワードを入力します。

$ mysqladmin -u root password 'new-password'

MySQL のセキュリティ設定

mysql_secure_installation コマンドで MySQL のセキュリティを高めます。

$ mysql_secure_installation

対話形式で進みます。選択肢はすべてデフォルトでいいでしょう。以下が設定されます。

  1. root パスワードの設定
  2. root ユーザーのログインを localhost に制限
  3. anonymous ユーザーの削除
  4. test データベースの削除

my.cnf を設置する

my.cnf の読み込み順番を調べる

my.cnf の読み込み順を以下のコマンドで調べます。

$ mysql --help | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf

my.cnf を /usr/local/etc/my.cnf に設置

MySQL は Homebrew で入れてるので、/usr/local/etc/my.cnf に設置します。

$ touch /usr/local/etc/my.cnf

my.cnf サンプル

my.cnf のサンプルです。細かく設定していますが、Mac は開発マシンなのでそれほど気にしなくても大丈夫だと思います。一応この設定で、メモリ使用量は 100MB 付近で安定しています。

  • マシンは MacBook Air 2012 mid。CPU 2 コア、メモリ 8GB
  • MySQL に接続するのは私一人
  • InnoDB メイン
  • テーブル数は50程度
  • 開発マシンなのでデータ量は少ない
  • MySQL に割り当てるメモリは400MBくらいに抑えたい。メモリは他のアプリに回したい。
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
show-warnings
#safe-updates
prompt = '[\d] mysql> '
[mysqld]
# basic
datadir = /usr/local/var/mysql
tmpdir = /tmp
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8
default-storage-engine = InnoDB
explicit_defaults_for_timestamp = 1
lower-case-table-names = 2
# max connections
max_connections = 64
# table_open_cache = max_connections * tables used in one transaction + alpha
table_open_cache = 800
# table_definition_cache = all tables in mysql + max_connections + alpha
table_definition_cache = 400
# open_files_limit = table_open_cache * 1.4
open_files_limit = 1120
# global buffer
key_buffer_size = 16M
query_cache_type = 0
# innodb_buffer_pool_size = available memory for Mysql * 0.7
innodb_buffer_pool_size = 256M
# thread buffer
read_buffer_size = 256K
read_rnd_buffer_size = 512K
join_buffer_size = 256K
sort_buffer_size = 512K
# InnoDB
innodb_file_per_table
innodb_autoextend_increment = 64
innodb_log_files_in_group = 2
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 1
innodb_flush_neighbors=0
#innodb_flush_method=O_DIRECT
innodb_thread_concurrency = 2
innodb_commit_concurrency = 2
# log
general_log = 0
slow_query_log = 0
[mysqldump]
max_allowed_packet = 16M
quick
set-charset
single-transaction

パスワードを変更しようとしてエラーが出た

2013年6月18日追記
運用して三ヶ月が経過したところで root のパスワードを変更しようとして以下のコマンドを実行したらエラーが。

$ mysqladmin -u root password 'new_password' -p
Enter password:
mysqladmin: unable to change password; error: 'Lost connection to MySQL server during query'

mysql_upgrade コマンドを実行したところエラーが出なくなりました。

$ mysql_upgrade -u root -p

おわりに

Homebrew で MySQL5.6 をインストールする方法と、my.cnf のサンプルを紹介しました。my.cnf を設定したら、しばらくはエラーログを見ましょう。上記の設定の場合 /usr/local/var/mysql/マシン名.local.err にエラーログが出力されます。

参考サイト
MySQL 5.6 Reference Manual :: Server System Variables

-技術ブログ
-,