#異なるバージョンのmysqlを同時に動かしたい
開発に携わっていると複数のバージョンのmysqlが必要になる。ほんとはdockerとか使いたいけど旧石器時代のソースなのでそんなおしゃれなことできない。
##環境
Homebrew 2.2.10
Homebrew/homebrew-core (git revision 9dfa9; last commit 2020-03-11)
##既に入っているmysqlはuninstallします
バックアップをとっておくこと
$ brew uninstall mysql@8.0
$ brew uninstall mysql@5.7
$ rm -rf /usr/local/var/mysql
##とりあえず古いバージョンのmysqlをインストールそして一旦起動
$ brew install mysql@5.7
$ /usr/local/opt/mysql@5.7/bin/mysql.server start
起動後確認後、
/usr/local/var/mysql フォルダができるのでmysqlを一度 stop
$ /usr/local/opt/mysql@5.7/bin/mysql.server stop
#datadirのコピー後でmy.cnfに使用
$ cp /usr/local/var/mysql /usr/local/var/mysql@5.7
フォルダのオーナーが/usr/local/va/mysqlと同じか確認しておく。
違うのであればchownで揃えておく。
##古いバージョン用のmy.cnfを作成
portとsocketを変更(デフォルトは3306なのでそれ以外)
# 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
$ cp /usr/local/etc/my.cnf /usr/local/etc/my@5.7.cnf
$ vi /usr/local/etc/my@5.7.cnf
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES"
# Only allow connections from localhost
bind-address = 127.0.0.1
port=3307
socket = /tmp/mysql2.sock
pid-file = /usr/local/var/mysql/mysql.local.2.pid
log-error = /usr/local/var/mysql/mysql.local.2.err
datadir = /usr/local/var/mysql@5.7
##configファイルを指定して古いバージョンのmysqlを立ち上げてみる
/usr/local/opt/mysql@5.7/bin/mysqld_safe --defaults-file=/usr/local/etc/my@5.7.cnf&
##mysqlに接続してみる
$ mysql -uroot -S /tmp/mysql2.sock -P3307 -h127.0.0.1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 57
Server version: 5.7.29 Homebrew
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
5.7起動完了!!
パスワードなどは後で適宜変える。
止めるときはプロセスをkillする。
$ ps aux | grep mysql
powari 70919 0.0 1.5 4764772 244664 s000 S 6:05PM 0:04.35 /usr/local/opt/mysql@5.7/bin/mysqld --defaults-file=/usr/local/etc/my@5.7.cnf --basedir=/usr/local/opt/mysql@5.7 --datadir=/usr/local/var/mysql@5.7 --plugin-dir=/usr/local/opt/mysql@5.7/lib/plugin --log-error=/usr/local/var/mysql/mysql.local.2.err --pid-file=/usr/local/var/mysql/mysql.local.2.pid --socket=/tmp/mysql2.sock --port=3307
powari 70765 0.0 0.0 4292424 1120 s000 S 6:05PM 0:00.04 /bin/sh /usr/local/opt/mysql@5.7/bin/mysqld_safe --defaults-file=/usr/local/etc/my@5.7.cnf
$sudo kill -9 70919
```
##次に新しいバージョンのmysqlインストール
mysql5.7のほうは一旦プロセスをkillして止めておいたほうが良いかも。
```
# データ削除
$ rm -rf /usr/local/var/mysql
# インストール
$ brew install mysql@8.0
# my.cnf編集
$ vi /usr/local/etc/my.cf
[mysqld]
bind-address = 127.0.0.1
port=3306
socket = /tmp/mysql.sock
pid-file = /usr/local/var/mysql/mysql.local.1.pid
log-error = /usr/local/var/mysql/mysql.local.1.err
datadir = /usr/local/var/mysql
# サーバー起動
$ /usr/local/opt/mysql@8.0/bin/mysql.server start
```
8.0起動完了!!
##もう一度古いバージョン起動してみる
```
/usr/local/opt/mysql@5.7/bin/mysqld_safe --defaults-file=/usr/local/etc/my@5.7.cnf&
```
これで同時に2つのバージョンのmysqlが動いていることになります。