<Hazm Blog />

Homebrewでインストールしたmariadbが起動しないとき mysql.server: line 264: No such process

Cover Image for Homebrewでインストールしたmariadbが起動しないとき mysql.server: line 264: No such process
Hazm
Hazm

Homebrewでインストールしたmariadbが起動できなくなってしまいました。

hazm@Hazm ~ $ mysql.server start
Starting MariaDB
.201114 00:25:58 mysqld_safe Logging to '/usr/local/var/mysql/Hazm.err'.
201114 00:25:58 mysqld_safe Starting mariadbd daemon with databases from /usr/local/var/mysql
/usr/local/bin/mysql.server: line 264: kill: (8880) - No such process
 ERROR!

結論

ib_logfile0とib_logfile1 というInnoDB構成ファイルを削除することで、起動できるようになりました。

調査

まずログファイルを追いました。

hazm@Hazm ~ $ cat /usr/local/var/mysql/Hazm.err
2020-11-14  0:26:41 0 [Warning] The parameter innodb_file_format is deprecated and has no effect. It may be removed in future releases. See https://mariadb.com/kb/en/library/xtradbinnodb-file-format/
2020-11-14  0:26:41 0 [Warning] InnoDB: innodb_open_files 300 should not be greater than the open_files_limit 256
2020-11-14  0:26:41 0 [Note] InnoDB: Uses event mutexes
2020-11-14  0:26:41 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2020-11-14  0:26:41 0 [Note] InnoDB: Number of pools: 1
2020-11-14  0:26:41 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2020-11-14  0:26:41 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728
2020-11-14  0:26:41 0 [Note] InnoDB: Completed initialization of buffer pool
2020-11-14  0:26:41 0 [ERROR] InnoDB: Upgrade after a crash is not supported. The redo log was created with MariaDB 10.4.13.
2020-11-14  0:26:41 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
2020-11-14  0:26:41 0 [Note] InnoDB: Starting shutdown...
2020-11-14  0:26:41 0 [ERROR] Plugin 'InnoDB' init function returned error.
2020-11-14  0:26:41 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2020-11-14  0:26:41 0 [Note] Plugin 'FEEDBACK' is disabled.
2020-11-14  0:26:41 0 [ERROR] Unknown/unsupported storage engine: InnoDB
2020-11-14  0:26:41 0 [ERROR] Aborting

[ERROR] Unknown/unsupported storage engine: InnoDB が怪しいなと思ったので、検索してみたところ、こちらの記事にあたりました。

https://stackoverflow.com/questions/63421566/homebrew-mariadb-10-4-13-not-found-forced-updated-to-10-5-5-and-now-i-cannot-s

こういうときは、仕事では色々調査して安全に作業を進めますが、今回はローカルなのでダメ元で試してみます。

hazm@Hazm ~ $ ll /usr/local/var/mysql
total 387568
drwxr-xr-x  30 hazm  admin       960 11 14 00:25 .
drwxrwxr-x  10 hazm  admin       320 11 12 23:47 ..
-rw-rw----   1 hazm  admin    154221 11 14 00:25 Hazm.err
-rw-rw----   1 hazm  admin     16384 11 14 00:25 aria_log.00000001
-rw-rw----   1 hazm  admin        52 11 14 00:25 aria_log_control
-rw-r-----   1 hazm  admin      3929 10 28 20:31 ib_buffer_pool
-rw-rw----   1 hazm  admin  50331648 11  2 19:34 ib_logfile0
-rw-rw----   1 hazm  admin  50331648  6  3 23:52 ib_logfile1
-rw-rw----   1 hazm  admin  79691776 10 28 20:31 ibdata1
-rw-rw----   1 hazm  admin  12582912 11  2 19:34 ibtmp1
-rw-rw----   1 hazm  admin         0  1  5  2019 multi-master.info
drwx------  91 hazm  admin      2912  1  5  2019 mysql
drwx------   3 hazm  admin        96  1  5  2019 performance_schema
hazm@Hazm ~ $ rm /usr/local/var/mysql/ib_logfile0
remove /usr/local/var/mysql/ib_logfile0? y
hazm@Hazm ~ $ rm /usr/local/var/mysql/ib_logfile1
remove /usr/local/var/mysql/ib_logfile1? y
hazm@Hazm ~ $ mysql.server start
Starting MariaDB
.201114 00:29:47 mysqld_safe Logging to '/usr/local/var/mysql/Hazm.err'.
201114 00:29:47 mysqld_safe Starting mariadbd daemon with databases from /usr/local/var/mysql
 SUCCESS!

起動した!

ib_logfile0/1は何者?

InnoDB テーブルスペースおよびログファイルの概要 InnoDB ストレージエンジンで管理されている 2 つの重要なディスクベースのリソースは、そのテーブルスペースデータファイルとログファイルです。InnoDB 構成オプションを指定しない場合は、MySQL によって MySQL データディレクトリ内に、わずかに 12M バイトよりも大きい ibdata1 という名前の自動拡張データファイルと、ib_logfile0 および ib_logfile1 という名前の 2 つのログファイルが作成されます。

なんのことだかさっぱり。別のページを探ってみると...

Redo ログ クラッシュリカバリ中に、不完全なトランザクションによって書き込まれるデータを訂正するために使用されるディスクベースデータ構造。通常の操作中に、InnoDB テーブルデータを変更するリクエスト (SQL ステートメント、または NoSQL インタフェースからの低レベル API 呼び出しから発生) をエンコードします。予期しないシャットダウン前にデータファイルの更新を終了していない変更は、自動的に再現されます。

Redo ログはファイルセットとして物理的に表され、通常は ib_logfile0 および ib_logfile1 という名前が付けられ

なるほど、クラッシュした際のリカバリ用のログファイルらしいです。

つまり、mysqlサーバーを正常に終了しなかったことと、その後アップグレードしたことで、リカバリがうまく実行できなかった、といったところでしょうか。

今回はローカル開発環境であったため、えいやでファイルを削除してみたが、本番環境で実行する場合はバックアップなどを取得し、失敗しても最悪戻せる状態を作ってから実行しましょう。