LoginSignup
10
13

More than 5 years have passed since last update.

MySQL5.6が起動しない時

Posted at

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 ~]# 
10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13