【2022/09/09追記】もっと簡単な方法があったみたい!
.@shibayu36
— さいくろん (@xaicron) 2022年8月18日
たまたまイニシエに書いた mysqlenv をつかおうとおもったら https://t.co/zGzCnjVWH1 こんなブログを発見
実は定義されていない引数は mysql-build にそのまま渡るので
`mysqlenv install --as 5.6.35-debug 5.6.35 --debug-with` するだけでいけるっぽいですhttps://t.co/ZwYpQ265SW
最近アルゴリズムの勉強をしていて、MySQLの挙動を追う機会があった。そこでMySQLのデバッグを出来るようにと、MySQL :: MySQL 5.6 リファレンスマニュアル :: 24.4.1.1 デバッグのための MySQL のコンパイル に書いてあるように、MySQLをデバッグオプション付きでコンパイルしてインストールしたかった。
また、自分はmysqlenvを普段使っているので、mysqlenvでデバッグオプションがついたMySQLにすぐに切り替えられるようにもしておきたい。
ただ一つ問題があった。それはmysqlenv install
コマンドにはデバッグ付きでインストールできる方法がないことだった。
そこでmysqlenvの管理配下にデバッグオプション付きのMySQLをインストールする方法が何かないか試したのでメモ。
mysqlenvが裏側で何を使っているか
以下のコマンドを実行してみたら結局は裏側はmysql-buildであるということが分かる。
$ mysqlenv install --as 5.6.35-debug 5.6.35 run: mysql-build 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug
mysql-buildのオプションを調べる
$ mysql-build --help mysql-build, Compile and Install MySQL usage: mysql-build [-v|--verbose] [--with-debug] [--sudo] definition prefix [plugin[,...]] mysql-build --definitions mysql-build --plugins -v/--verbose Verbose mode: print compilation status to stdout --with-debug Debug build --definitions List all built-in definitions --plugins List all built-in plugins --sudo Run install as superuser
正に必要な--with-debug
オプションがあった。しかしmysqlenvからこのオプションを渡す方法はコードを見る限りなさそうだった。
mysql-buildで直接mysqlenvの管理配下にインストールする
mysql-build 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug
をよく見ると、結局はmysqlenvは~/.mysqlenv/mysqls/
以下にmysql-buildでインストールしているだけである。そこで以下のコマンドを実行すればmysqlenvの管理配下にインストールできる。
$ mysql-build --with-debug 5.6.35 /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug
mysql-install-dbを実行する
mysqlenvのコードを見てみると、mysqlenv install
は自動でmysql_install_dbを発行してくれている。そこで最後にそれを実行する。
$ cd /Users/shibayu36/.mysqlenv/mysqls/5.6.35-debug $ find . | grep mysql_install_db ./man/man1/mysql_install_db.1 ./scripts/mysql_install_db $ ./scripts/mysql_install_db ...
mysqlenvで確認する
$ mysqlenv list 5.5.49 * 5.6.27 5.6.35-debug $ mysqlenv local 5.6.35-debug $ mysqlenv list 5.5.49 5.6.27 * 5.6.35-debug $ mysql --help # --debugオプションがあれば成功
ということで成功してそう。実際にdebugオプションで起動はまだしていないので、もうちょっと確認する必要はあるが...