まず落ち着いて、my.cnfを見る。
vi /etc/my.cnf
[mysqld_safe]
log-error=/var/log/mysqld.log
log-error=/var/log/mysqld.log
その中のerror_logのパスをみて、エラーが書き出されているか確認する。
tail -F /var/log/mysqld.log
ところがMySQLのエラーログが書き出されてない。(※実は書き出されていたが気づいてないだけ)
ログ出力先を変更してもう一度mysqldを再起動してエラーログを確認
Unable to lock ./ibdata1, error: 11
Check that you do not already have another mysqld process
Check that you do not already have another mysqld process
この場合はmysqldが別のプロセスで立ち上がっているようだから
ps -ef | grep mysql
でプロセスを探して、そのプロセスをkill -9で強制終了させる。
しかしまだmysqldが立ち上がらない。
InnoDB: Database was not shut down normally!
とも出ていたのでInnoDBをリカバリーモードで起動してみる。
my.cnfにて
[mysqld]
innodb_force_recovery=3
innodb_force_recovery=3
しかしまだmysqldが立ち上がらないので、my.cnfのこの記述を削除。
/usr/libexec/mysqld: Disk is full writing './mysqld-bin.000029' (Errcode: 28).
Waiting for someone to free space... Retry in 60 secs
Waiting for someone to free space... Retry in 60 secs
このエラーログがあることを発見。青ざめる。なんだよDisk is fullって。
調べると、バイナリログが肥大化しててDiskを圧迫していた模様。
これはmaster-slave構成している場合に起こるようだ。
slaveサーバのDBにログインしてバイナリログの読み込み状況を確認する。
(※slaveにて)
show slave status\G
--
Master_Log_File: mysqld-bin.000039
--
--
Master_Log_File: mysqld-bin.000039
--
mysqld-bin.000039までのバイナリログを読み終えているということらしいので、
masterのDBへ行き、mysqld-bin.000039以前のバイナリログを削除する。
(※masterにて)
show master logs;
+-------------------+------------+
| Log_name | File_size |
+-------------------+------------+
| mysqld-bin.000038 | 1073741993 |
| mysqld-bin.000039 | 22154537 |
+-------------------+------------+
+-------------------+------------+
| Log_name | File_size |
+-------------------+------------+
| mysqld-bin.000038 | 1073741993 |
| mysqld-bin.000039 | 22154537 |
+-------------------+------------+
ここで mysqld-bin.000038 はいらないので削除する。
PURGE MASTER LOGS TO 'mysqld-bin.000038'
これでmysqldが起動するようになったが、バイナリログは定期的に削除できるようにしておく。
my.cnfにて
[mysqld]
set-variable=expire_logs_days=14
set-variable=expire_logs_days=14
この場合は2週間になるが
/var/lib/mysqlのmysqld-bin.0000XXXの生成時刻をみて適宜指定する。
またslaveのバイナリログの位置を再設定しておく。
(※slaveにて)
change master to
master_log_file='mysqld-bin.000039',
master_log_POS=98
master_log_file='mysqld-bin.000039',
master_log_POS=98
以降slaveの設定したブログを参照しつつサービスを復帰。
レプリケーションの設定