環境
- CentOS7
- MySQL は 5.x で起きたことなどがほとんどなので最近バージョンでは未確認
MySQL が動いていない
ログインしてみる
$ mysql -u root -p
Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
が出たら単純に起動してみると動くかもしれない。
起動してみる
$ systemctl start mysqld.service
MySQL が起動しない or MySQL が起動しているのにエラーが出る
明らかにヤバそうな雰囲気がした時はログを見るのが一番良い。
エラーログを見る
起動しない原因は多々あるのでこの記事では全て対応できないです。
エラーログを見てネットで調べて解決してくださいごめんなさい。
ちゃんとバックアップをとっているのであれば正直 MySQL を入れ直したほうが早いです。
$ cat /var/log/mysqld.log
- InnoDB: Cannot allocate memory for the buffer pool
- メモリ不足
- 暴走してるプログラムがあるかも。該当プログラムを kill してメモリを確保する。
- メモリを増やす。仕事で使っているサーバーであれば管理者に要確認
- メモリ不足
- InnoDB: Database was not shut down normally
- MySQL が正常にシャットダウンできなかった
- エラーログを注意深くみる
- MySQL が正常にシャットダウンできなかった
- InnoDB: Starting crash recovery
- InnoDB が破損した
- バックアップがあって色々めんどくさい時は MySQL を入れ直すか、ログインできるようであれば phpMyAdmin のようなツールで壊れてる DB を削除してデータを入れ直せば動いたりする。
- InnoDB が破損した
InnoDB が破損している
- MySQL が停止できない場合
- プロセスを一括終了する
mysql とかで探すといいかも
- プロセスを一括終了する
# MySQL を停止する
$ systemctl stop mysqld.service
# mysql ファイルのバックアップをとる
$ cp -ar /var/lib/mysql /var/lib/mysql_temp
# my.cnf に強制リカバリーの項目を追加
$ vi /etc/my.cnf
[mysqld]
innodb_force_recovery = 1 から 3 までの値
# 起動しない場合は下記も追加
innodb_purge_threads=0
# MySQL を起動
$ systemctl start mysqld.service
# DB のバックアップをとる
$ mysqldump -u root -p -x --all-databases > db_backup.dump
# MySQL を停止
$ systemctl stop mysqld.service
# mysql ファイルを削除する
$ rm -rf /var/lib/mysql/*
# my.cnf で追加した項目を削除
$ vi /etc/my.cnf
innodb_force_recovery を削除
# MySQL を起動
$ systemctl start mysqld.service
# DB を入れ直す
$ mysql -u root -p < db_backup.dump