iosetup mysql_InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts

article/2025/10/6 13:41:15

在一台服务器中以各数据库的备份文件为数据文件启动多个MySQL实例供SQL Review使用。

之前运行一直没有问题(最多的时候有23个MySQL实例同时运行),后来新配置了一台服务器,启动其对应的实例时失败。

部分错误日志如下:

……

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

……

通过错误日志了解到最早发生错误的地方为 InnoDB: Error: io_setup() failed with EAGAIN after 5 attempts。

这个io_setup() failed with EAGAIN是关键。

我们man一下io_setup

NAME

io_setup - Create an asynchronous I/O context

……

DESCRIPTION

io_setup() creates an asynchronous I/O context capable of receiving at least maxevents. 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

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.

ENOSYS io_setup() is not implemented on this architecture.

CONFORMING TO

……

看到io_setup用来创建异步I/O上下文环境用于特定目的,错误代码EAGAIN意为指定的maxevents 超出了用户可用events的限制。

该服务器上已经运行了较多的MySQL实例,创建异步I/O的资源已经达到了临界,所以新的实例启动失败。

最后通过在启动MySQL实例时加入 --innodb_use_native_aio = 0解决了问题。

也有通过更改系统设置来解决此问题的(待验证)。

cat /proc/sys/fs/aio-max-nr可以查看到当前的aio-max-nr的值一般为65536(64k个)

可通过下述步骤改变该文件中的值(上述文件不能直接编辑)

sudo vim /etc/sysctl.conf

修改或加入

fs.aio-max-nr=262144(256k个)

执行命令修改/proc/sys/fs/aio-max-nr

sysctl -p

可以看到/proc/sys/fs/aio-max-nr中的值发生了变化

cat /proc/sys/fs/aio-max-nr

重启MySQL实例

还有通过修改mysql源码来避免该问题的,但一般情况下不推荐也没有必要这么做。

0b1331709591d260c1c78e86d0c51c18.png


http://chatgpt.dhexx.cn/article/IojphVw6.shtml

相关文章

linux系统中socket错误码:EINTR和EAGAIN的处理

目录 人为重启被中断的系统调用 安装信号时设置 SA_RESTART属性 忽略信号 永远阻塞的系统调用,被信号中断,导致其不继续等待,转而去执行signal_handler 1、什么是慢系统调用? 该术语适用于那些可能永远阻塞的系统调用。永远阻…

iosetup 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.…

blocking socket 读写返回 EAGAIN

非阻塞的 socket 读写操作返回 EAGAIN,表示当前已经读完内核缓冲区或者写满内核缓冲区,需要等待下一次 select/poll/epoll 事件到来时再操作。 对于阻塞的 socket 读写操作,如果内核缓冲区是空,read 将一直阻塞;如果不…

【Linux Socket C++】为什么IO复用需要用到非阻塞IO?EAGAIN的简单介绍与应用

目录 为什么IO复用需要非阻塞的IO EAGAIN的介绍 EAGAIN的应用 为什么IO复用需要非阻塞的IO 我们可以先看一下官方的回答: 在Linux命令行输入:man 2 select 找到[BUGS],如下: 官方给予的回答是这样的: Under Lin…

avcodec_receive_frame始终返回EAGAIN

今天我们研究一个问题: avcodec_receive_frame()始终返回EAGAIN 根本的解决方案还需要深入debug,但是这个函数很太复杂,需要些时间和耐心; 目前在不考虑编解码性能的情况下,能work around的方法只有一个,那…

APK加固(梆梆助手)

前言:朋友在使用梆梆时出现Apk加固后安装失败的现象,所以自己写篇小白文 1.进入梆梆官网(注册) 2.下载梆梆助手(点击加固工具) 本人电脑是Windows系统(下载) 3.安装后&#xff0c…

使用360进行apk加固并进行2次签名整体流程

因新版360加固助手需要付费才能进行自动签名,故只能自己手动来签名了~ 1.使用Android studio进行首次签名并打包apk 首先选择build下该选项 选择apk 如果没有key,则点击新建 需要输入key存储的位置,key store密码,key别名&#…

Android-APK加固-简单版

Android-APK加固-简单版 Proguard的使用与配置介绍开启proguard常用配置 加固大体思路 源码(浅析)思路 撸码解密工具类-AES(解密时用)工具类-Zip(压缩、解压)工具类-Utils(反射操作)…

Android Apk加固后手动签名

手动签名 : 不用任何第三方可视化工具签名 ,使用命令做签名。手动签名原因:以前加固签名都是使用第三方工具操作,最近发现工具都开始收费了,免费的羊毛没得薅了,收费价格极高 5000/年/App, (加固…

手写apk加固

手写apk加固 加壳解压原apk并加密重命名dex文件对壳文件操作打包压缩成apk文件签名 脱壳运行解压原apk, 解密原dex文件加载原dex文件 demo下载 apk加固的目的其实就是对app的核心代码做防护工作,避免被其他人反编译; 废话不多说了,直接开始! …

android apk 加固后重新签名

针对于加固平台在加固的过程中不能配置签名文件,加固后的apk需要进行重新签名才能安装,并发布到应用市场。 第一步,用AS对项目进行打包,生成签名的apk文件。 第二步,使用加固平台,对apk包进行加固&#xff…

Android Apk加固原理解析

前言 为什么要加固 对APP进行加固,可以有效防止移动应用被破解、盗版、二次打包、注入、反编译等,保障程序的安全性、稳定性。 常见的加固方案有很多,本文主要介绍如果通过对dex文件进行加密来达到apk加固的目的; APK加固整体…

apk加固后再签名

目录 前言v1签名v1v2签名 前言 apk更新之前需要做安全检测,检测之前一版会做加固处理,加固后还需要重新进行签名。本文介绍一下v1签名和v1v2签名两种方式。 有文章说需要把apk原来的签名文件,即META-INF文件夹删除,实测不删好像也…

Android apk 加固混淆的作用之解决apk报毒

现在市面上对apk的安全合规管控越来越严格了,也就要求了apk在上架之前一定要做合规检测和加固处理。对apk就是加固的好处,可以提高apk的安全性,提高apk被逆向分析破解的门槛,同时通过加固保护可以提高过安全合规的检测。由于APP加…

简书 android 加固,Android apk加固(加壳)整理

一、Dex加壳由来 最近在学习apk加密,在网上看了一篇《Android中的Apk的加固(加壳)原理解析和实现》,我发现原文把整个apk都写入到dex文件中,如果apk小还好,当原APK大于200M,客户端解壳很费劲,打开后应用就卡…

019 Android加固之APK加固的原理和实现

文章目录 前言加载Activity遇到的问题APK的启动过程替换ClassLoader流程获取ActivityThread类对象获取AppBindData类对象mBoundApplication获取LoadedApk类对象info获取info对象中的ClassLoader 设计傀儡dex文件手工加固APK代码实现APK加固实现步骤 总结 前言 动态加载dex之后…

【Android 安全】Android 应用 APK 加固总结 ( 加固原理 | 应用加固完整的实现方案 | 源码资源 )

文章目录 一、 APK 加固原理1、 Android 应用反编译2、 ProGuard 混淆3、 多 dex 加载原理4、 代理 Application 开发5、Java 工具开发6、Application 替换 二、 应用加固完整的实现方案1、 代理 Application( 1 ) ProxyApplication( 2 ) OpenSSL 解码 Kotlin 类( 3 ) 反射工具…

android资源加固,Android apk加固实现原理

apk加固是每一个app发布之前必须要做的事情;如果一个apk没有加固那么别人就很容易被别人反编译,看到这其中的原码,虽然现在有代码混淆、把业务写到native层,但是这都是治标不治本。反编译的技术在更新,那么保护Apk的技术就不能停止…

Android中Apk加固代码实现

前言:上一篇博客已经把Apk加固的思路详细的介绍过了,也开始创建了一个空的demo进行,然后在项目中添加一个代理module(解密,和系统源码交互功能)和tools工具加密Java library 的module ,这里开始…

Android APK加固原理

一、前言 Android作为开源框架,开放之余,所要面临的就是安全问题,世间之事,有正就有邪,有攻就有守,作为开发者虽然不需要进入专业安全领域,但还是需要掌握基本的安全常识和原理。 二、加壳 加…