2017年12月18日月曜日

InnoDB: Fatal : Cannot initialize AIO sub-system でmysqldが起動しない…だと…

1サーバーにゴツゴツmysqldを詰め込んでいる環境で、ふとこんなエラーでmysqldが起動しなかった。
2017-12-18 17:50:38 12256 [Note] InnoDB: Using Linux native AIO
2017-12-18 17:50:38 12256 [Note] InnoDB: Using CPU crc32 instructions
2017-12-18 17:50:38 7f2b86333740 InnoDB: Warning: io_setup() failed with EAGAIN. Will make 5 attempts before giving up.
InnoDB: Warning: io_setup() attempt 1 failed.
InnoDB: Warning: io_setup() attempt 2 failed.
InnoDB: Warning: io_setup() attempt 3 failed.
InnoDB: Warning: io_setup() attempt 4 failed.
InnoDB: Warning: io_setup() attempt 5 failed.
2017-12-18 17:50:40 7f2b86333740 InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts.
InnoDB: You can disable Linux Native AIO by setting innodb_use_native_aio = 0 in my.cnf
2017-12-18 17:50:40 12256 [ERROR] InnoDB: Fatal : Cannot initialize AIO sub-system
2017-12-18 17:50:40 12256 [ERROR] Plugin 'InnoDB' init function returned error.
2017-12-18 17:50:40 12256 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2017-12-18 17:50:40 12256 [ERROR] Unknown/unsupported storage engine: InnoDB
2017-12-18 17:50:40 12256 [ERROR] Aborting

2017-12-18 17:50:40 12256 [Note] Binlog end
2017-12-18 17:50:40 12256 [Note] /usr/local/mysql5626/bin/mysqld: Shutdown complete
珍しい。
AIO関連のエラーなんてMySQL 5.5がGAになってしばらくの時代に、 変なファイルシステム(なんだか忘れた)の上にtmpdirを作ろうとして「そのファイルシステムはAIOに対応していない!」と怒られて以来な気がする。
そういえば最近見ないなアレ。CentOS 5.xがいかんかったのか。
取り敢えずファイルシステムを見てみるに、
# grep vg_00-lv_root /proc/mounts
/dev/mapper/vg_00-lv_root / xfs rw,relatime,attr2,inode64,logbsize=256k,sunit=512,swidth=3584,noquota 0 0
xfsであってAIO非対応な変なファイルシステムではない。 というか他のmysqldは元気でゴリゴリ動いているので、この1プロセスだけAIOがどうこう言われるのがそもそもおかしい。
ググると innodb_use_native_aio = 0 にすればいいよ! とか結構出てくる(というかエラーログもそういってる)けれど、Linux AIOが使えないはずはないんだからそれじゃ気持ちが悪い。
結局、ぐるぐる回って @yoheiaさん のところにたどり着いた。
libaio の aio コンテキスト数を調べる - ablog
# cat /proc/sys/fs/aio-max-nr
65536

# cat /proc/sys/fs/aio-nr
63056
うわーい、ぴっちぴち。
というわけで aio-max-nr を増やしたら無事起動するようになりました。
# echo 131072 > /proc/sys/fs/aio-max-nr
# cat /proc/sys/fs/aio-max-nr
131072
ibdファイルかなりオープンされてるのね…。ちょっと意外。
# lsof | grep mysqld | grep -c ibd
75451

0 件のコメント :

コメントを投稿