天天看點

fs.aio max nr mysql_InnoDB: Error: io_setup() failed with EAGAIN

最近安裝好了MySQL之後,在啟動MySQL服務時無法正常啟動MySQL。提示沒有更新/var/lib/mfailedZDB.pid并退出。該MySQL與Oracle位于同一主機。有些核心參數進行過調整應該也是使用與MySQL。下面是該問題的具體描述。

1、故障現象SZDB:/usr/src/mysql_src # /etc/init.d/mysql start

Starting MySQL...The server quit without updating PID file (/var/lib/mfailedZDB.pid).

SZDB:~ # cat /etc/issue     #故障環境

Welcome to SUSE Linux Enterprise Server 10 SP3 (x86_64) - Kernel \r (\l).

2、故障分析#檢視err日志資訊

SZDB:/var/lib/mysql # more SZDB.err

140505 16:05:59 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

140505 16:05:59 [Note] Plugin 'FEDERATED' is disabled.

140505 16:05:59 InnoDB: The InnoDB memory heap is disabled

140505 16:05:59 InnoDB: Mutexes and rw_locks use GCC atomic builtins

140505 16:05:59 InnoDB: Compressed tables use zlib 1.2.3

140505 16:05:59 InnoDB: Using Linux native AIO

140505 16:05:59  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.

140505 16:06:02  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

140505 16:06:02 InnoDB: Fatal error: cannot initialize AIO sub-system

140505 16:06:02 [ERROR] Plugin 'InnoDB' init function returned error.

140505 16:06:02 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

140505 16:06:02 [ERROR] Unknown/unsupported storage engine: InnoDB

140505 16:06:02 [ERROR] Aborting

140505 16:06:02 [Note] /usr/sbin/mysqld: Shutdown complete

140505 16:06:02 mysqld_safe mysqld from pid file /var/lib/mysql/SZDB.pid ended

#從上面的錯誤日志中可以看到,關鍵的一個資訊io_setup() failed with EAGAIN

#io_setup()鎖定失敗

3、故障解決錯誤代碼EAGAIN表明超出了可用event限制的最大值(見第4點中的描述)

SZDB:~ # cat /proc/sys/fs/aio-max-nr

65536                        #64k個

SZDB:~ # vi /etc/sysctl.conf

fs.aio-max-nr=262144         #調整為256k個

SZDB:~ # sysctl -p

#  Author : Leshami

#  Blog   :http://blog.csdn.net/leshami

SZDB:~ # /etc/init.d/mysql start    #調整後啟動成功

Starting MySQL...                                                     done

4、關于fs.aio-max-nr該參數指同時可以擁有的的異步IO請求數目

aio-nr & aio-max-nr:

aio-nr is the running total of the number of events specified on the

io_setup system call for all currently active aio contexts.  If aio-nr

reaches aio-max-nr then io_setup will fail with EAGAIN.  Note that

raising aio-max-nr does not result in the pre-allocation or re-sizing

of any kernel data structures.

NAME

io_setup - Create an asynchronous I/O context

SYNOPSIS

#include

Tag           Description

-----------   ------------------------------------

int io_setup (int maxevents, io_context_t *ctxp);

DESCRIPTION:

io_setup() creates an asynchronous I/O context capable of receiving at least maxevents.#建立一個接收異步i/o的上下文環境

ctxp must not point to an AIO context that already exists, and must be initialized to 0 prior to the call.

On successful creation of the AIO context, *ctxp is filled in with the resulting handle.

RETURN VALUE:

io_setup() returns 0 on success; otherwise, one of the errors listed in the "Errors" section is returned.

ERRORS:

Tag     Description

------  ----------------------------------------------

EINVAL  ctxp is not initialized,or the specified maxevents exceeds internal limits. maxevents should be greater than 0.

EFAULT  An invalid pointer is passed for ctxp.

ENOMEM  Insufficient kernel resources are available.

EAGAIN  The specified maxevents exceeds the user’s limit of available events.#此案例中傳回的時超出了可用event限制的最大值

ENOSYS  io_setup() is not implemented on this architecture.

fs.aio max nr mysql_InnoDB: Error: io_setup() failed with EAGAIN

更多參考