MAMP で MySQL が起動しない?

concrete5 を手っ取り早く使うのに MAMP を入れることに。ダウンロードした dmg を実行してさくっとできるだろーと思ったら、MySQL が起動しない。:-(

MAMP/logs/mysql_error_log.err を見たらこんなエラーが出てる。

You have forced lower_case_table_names to 0 through a command-line option, even though your file system '/Applications/MAMP/db/mysql/' is case insensitive. This means that you can corrupt a MyISAM table by accessing it with different cases. You should consider changing lower_case_table_names to 1 or 2


エラーメッセージを見ると「ファイルシステムは大文字/小文字を判別しないのに、コマンドラインオプションが判別する」ってのが原因っぽい。あらら :-(

lower_case_table_names で調べると、こんな感じ。

MySQLでのテーブルとデータベース名の保存方法はlower_case_table_namesシステム変数に影響されます。これはmysqld起動時に設定できます。 lower_case_table_namesは以下のテーブルに示された値をとり得ます。Unixでは、lower_case_table_namesのデフォルト値は 0で、Windowsでは1、Mac OS Xでは2となります。
(中略)
データベースやテーブル名上の大文字/小文字に由来する移行問題を避けるには、2つのオプションがあります:
・lower_case_table_names=1を全システムで使用してください。これの欠点は、SHOW TABLES またはSHOW DATABASESを使用した場合、元の大文字/小文字で区別された名前が見られないことです。
Unix上ではlower_case_table_names=0を、Windows上ではlower_case_table_names=2を使用してください。これでデータベースとテーブル名の大文字/小文字の区別が保存されます。

MySQL 8.2.2. 識別子の大文字/小文字区別

要は lower_case_table_names の値を変更すれば良いらしい。startMySql.sh setting lower_case_table_names=0 で直接スクリプトを修正する方法が書いてある。

Applications/Mamp/bin/startMySql.sh
This script contained this directive: lower_case_table_names=0
Yah! I changed that from 0 to 1 and now everything's fine.

startMySql.sh setting lower_case_table_names=0

MAMP/bin/startMysql.sh をみると確かに lower_case_table_names=0 がベタ書きされてる。lower_case_table_names=0 → 1 にして実行してみたら、このエラーは出なくなった。:-)

# /bin/sh
/Applications/MAMP/Library/bin/mysqld_safe --port=8889 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --lower_case_table_names=0 --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log &


あ、、、でも、続きのエラーが ... ^^;)>

環境
  • Mac OSX10.6.7
  • MAMP 1.9.5