MySQL5.6が起動しない時

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

yumでMySQL5.6を入れて早速動かしてみたら早速[FAILED]という文字列に出くわす。

MySQLの起動
[XX:XX:XX][root@test-web ~]# /etc/init.d/mysqld start
MySQL Daemon failed to start.
Starting mysqld: [FAILED]
[XX:XX:XX][root@test-web ~]#

ログを見てみよう

ログが出力される場所を探す

そもそものMySQLの設定のあるファイルがどこかを探してみよう。

ログが出力される場所を探す
[XX:XX:XX][root@test-web ~]# mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 
[XX:XX:XX][root@test-web ~]# 

だいたい一番に表示されているのが設定ファイルの場所になる。
なので今回は'/etc/my.cnf'を見てみることにする。

/etc/my.cnf
log-error=/var/log/mysqld.log

なるほど/var/log/mysqld.logにログが出力されるらしいので[FAILED]になった原因のエラーを探してみる。

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

このエラーはmy.cnfに以下の設定を加えると解決できる。

my.cnf
[mysqld]
explicit_defaults_for_timestamp = 1

⚠注意

くれぐれも[mysqld]の下に記述すること。
なんとなく末尾に追記〜なんてやっていると[mysqld_safe]の下に書いてしまっていて一向に動かないなんてことがある。

MySQLの再起動

MySQLの再起動
[XX:XX:XX][root@test-web ~]# /etc/init.d/mysqld start 
Starting mysqld: [  OK  ]
[XX:XX:XX][root@test-web ~]# 

これで[OK]が表示されれば大丈夫👍
更にエラーが出ている場合は引き続きログの確認を繰り返す。

---以下発生したエラーとその対応について記載---

Error: Fetch of persistent statistics requested for table "example_db"."example_table" but the required system tables mysql.innodb_table_stats and mysql.innodb_index_stats are not present or have unexpected structure. Using transient stats instead.

このエラーは恐らく、以前にMySQLを立ち上げて、DBを作成したことがある場合に起こっている。
今回の場合、"example_db"というDBを作成したことがある、ということになる。
それで、DBを作成するとDB名のディレクトリがMySQLのディレクトリ内にできて、それが悪さをしているらしい。

該当箇所を探す

該当箇所を探す
[XX:XX:XX][root@test-web ~]# find / -name 'example_db*' 
/var/lib/mysql/mysql/example_db
[XX:XX:XX][root@test-web ~]# 

問題が無ければ消す。問題があればバックアップを取っておく。

(自分の場合は「またDB作り直せばいいやー」ということで消してしまったので、バックアップを取っておいたところでどうやってDBを復元するかは不明だったり...)
どのみちMySQLのディレクトリ内にrenameをした状態で残してもエラーが出たので、一旦別の場所に置いてから以下コマンドで削除を行う。

該当ディレクトリの削除
[XX:XX:XX][root@test-web ~]# rm -f /var/lib/mysql/mysql/example_db
[XX:XX:XX][root@test-web ~]# 

[ERROR] InnoDB: space header page consists of zero bytes in data file ./ibdataX もしくは [ERROR] InnoDB: Cannot create ./ib_logfileXXX

このエラーは既にibdataXやib_logfileXXXが存在している時に発生する。

ディレクトリの場所を探す

ibdataXの場合

ディレクトリの場所を探す
[XX:XX:XX][root@test-web ~]# find / -name 'ibdataX*'
/var/lib/mysql/ibdataX
[XX:XX:XX][root@test-web ~]# 

削除

そのまま削除で問題は無いけど、心配な場合はバックアップを取っておく。

[XX:XX:XX][root@test-web ~]# rm -f /var/lib/mysql/ibdataX -r
[XX:XX:XX][root@test-web ~]#