MySQL8 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11の対処方法について
MySQL5.7からMySQL 8.0にアップグレードしてしばらく経過したところ、じゃあ、MySQL8でのmy.cnfをいじってみようかと思ったところからが地獄の始まり。謎のエラーで起動しなくなってしまいました
2019-03-18T05:15:40.431335Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./ibdata1 error: 11
えっーっと・・なんだろう、ibdata1のロックが取得できない・・もしかしてクラッシュした?(汗) なんでロックが取得できないんだろう。。。と色々と考えたところで・・
プロセスを確認
あら、、プロセスが残っているじゃありませんか!
# ps -efw | grep -i mysql root 672 1 0 14:10 pts/0 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql mysql 1046 672 18 14:10 pts/0 00:01:19 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
ひとまず、プロセスをKILLして再度開始!
# pkill mysqld # /etc/init.d/mysqld start
あぁ、大したエラーじゃなくてよかった(汗)・・と思いきや!
2019-03-18T05:20:17.706766Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
えっと、なにこれ?(汗) my.cnf に設定した何かというのは理解できたのですログを確認してみると・・
2019-03-18T05:20:17.706532Z 1 [ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1')
・・と出力されていました・・。 たしかにここで指定していますね。
lower_case_table_names = 1
でも、amazon linuxではこれで正常に動いていたので不思議・・ どうも色々調べているうちに、MySQL8の初期化(はじめて利用するって意味かな?)の際に、lower_case_table_namesをあらかじめ指定しておかないと、このようなエラーが出る模様・・
じゃあ、どうすればいいか・・を調べてたら、自分で書いてました(汗)
my.cnf中の、lower_case_table_names = 1が、初回設定でしか反映できないからです。(後から変更することはできない)
うん、初期化してサービスを止めるのも辛いので・・諦めよう・・というわけで、lower_case_table_namesをコメントアウトして起動したら無事起動しました・・・なんか心残りではありますが・・・しょうがない・・・
余談ですが・・
lower_case_table_names=1とは、テーブル名の大文字小文字を区別しないっていう意味です。(0)が区別する、(1)が区別しない、、そして(2)は、名前を区別した上で格納するけど、参照時は、大文字、小文字を区別しないって意味ですかね?ただし、OSのファイルシステムが大文字、小文字を区別しない場合に限って有効です。つまりLinuxは無理なんじゃないかな?