今日は、MySQLでトラブった一日だったので、ちょっと書いておくことにします。
とりあえずやろうとしていたのは、テーブルのcharsetとかcollationとかをutf8に揃えようとしていて、ストアドプロシジャなんか書いてlatin1に設定されているテーブルの一覧を取って、その結果にALTER TABLEを実行するというようなことをやろうとしていたわけです。で、そのストアドプロシジャは、自分のマシンではもちろんちゃんと動作していたんだけど、AWS環境である顧客のインスタンスに適用しようとしたら、エラー。
ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation ‘=’
色々と試して、接続パラメータやらなんやら全部utf8_unicode_ciに揃えても、なぜかダメ。で、結局このエラーの原因はよくわかっていないんだけど、その途中で、自分のマシンのMySQLをリスタートさせたりしていたら、MySQLがお亡くなりになってしまったという次第。
こちらは、有名なソケットが云々というやつ。
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
ググッても何やら一貫した答えがないのでも有名。前回、これに遭遇したときはMySQL再インストールのハメになったので、かなりあせりました。
で、これも色々と試して、結局は、~/.my.cnf を消して、サーバリスタートでなぜかOKになりました。
my.cnfの何が悪いのかはこれから調べますが、なにゆえに設定ファイル(ソケットの設定なんてしていないのに)がこのエラーに帰結するのか現在の私には理解不能。
それとMySQLってすごい勢いで進歩して、今は業務で使われているとは言っても、やっぱりまだまだ結構制限が多いということを認識しています。やっぱり使い方次第ということですね。