Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?
@nnmr

MySQL5.6が起動しない時

More than 3 years have passed since last update.

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 ~]# 
13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
nnmr

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
13
Help us understand the problem. What is going on with this article?