MySQL 5.7が何も言わずに起動できなかったのでメモ

MySQL 5.6と同じ方法でMySQL 5.7を起動しようとしたら何も言わずに黙って終了してしまって少しだけハマったのでメモ。

MySQL 5.6では次のようにして起動してました。

# /usr/local/mysql-5.6/bin/mysqld --no-defaults --user=mysql
  --basedir=/usr/local/mysql-5.6 --skip-networking --socket=/tmp/mysql56.sock
  --log-error=/tmp/my56.err > /tmp/my56.err 2>&1

log-error をつけていても、最初の数行が標準エラー出力に出ちゃうので、log-error と同じファイルにリダイレクトするようにしていました。

同じようにしてMySQL 5.7を起動してみたら、すぐに終了してしまって、しかもエラーを何も出力しません。

# /usr/local/mysql-5.7/bin/mysqld --no-defaults --user=mysql
  --basedir=/usr/local/mysql-5.7 --skip-networking --socket=/tmp/mysql57.sock
  --log-error=/tmp/my57.err > /tmp/my57.err 2>&1

結論からいうと、エラー出力のリダイレクトが不要でした。5.6 と異なり、リダイレクトしなくても余計な出力がされることはありませんでした。

log-error と同じファイルにリダイレクトすることで、ファイルの所有者が root になり、mysql ユーザー権限でエラーファイルに書き込みできず、エラーを出力することもできなくて終了していたのでした。

5.6の時は log-error のファイルオープン時のユーザーはまだ mysql になる前の root だからオープンできたけど、5.7ではファイルオープン時に既に mysql ユーザーになっているからファイルのオープンに失敗しているってことだと思います。ソースを見て確認したわけではないですけど、たぶん。