この記事は Homebrew で MySQL5.6 をインストールしたときのメモです。
いつの間にか Homebrew の MySQL のバージョンが 5.6 に上がっていたので 5.5 からアップデートしてみました。my.cnf も全面的に見直したのでさらします。
2015年12月16日追記
MySQL5.7 版も書きました。
-
MacにMySQL5.7をインストール。開発用my.cnfも公開
Homebrew の MySQL が 5.7 になったので 5.6 からアップグレードしてみました。インストール時に実行 ...
続きを見る
動作確認環境
- MacBook Air 2012 mid
- OS X Mountain Lion
目次
- MySQL をインストール
- データベースのインストール先とデータの保存先、実行ユーザーを設定する
- MySQL を起動する
- root のパスワードを変更する
- MySQL のセキュリティ設定
- my.cnf を設置する
- my.cnf サンプル
- パスワードを変更しようとしてエラーが出た
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
対話形式で進みます。選択肢はすべてデフォルトでいいでしょう。以下が設定されます。
- root パスワードの設定
- root ユーザーのログインを localhost に制限
- anonymous ユーザーの削除
- 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
にエラーログが出力されます。