• InnoDB: Error number 24 means ‘Too many open files’.--转载


    一.问题的描述

    备份程序 执行前滚的时候报错。(-apply-log)

    InnoDB: Errornumber 24 means 'Too many open files'.

    InnoDB: Some operatingsystem error numbers are described at

    InnoDB: 
    http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html

    InnoDB: File name/home/nice/backup/mysql/var.20121211021656/user_db_20121123/tuser_like_core.ibd

    InnoDB: File operationcall: 'open'.

    InnoDB: Cannot continueoperation.

     

    innobackup:Error: 

     

    二.问题分析

    openfiles 开的小了。

    mysql的open_file_limit受制于以下几个参数

    max_connections、 table_open_cache 、open_files_limit 以及 /etc/security/limits.conf中的配置。

    max_connections和 table_open_cache 与open_files_limit 的关系:

      max_1 = 10 + max_connections + table_cache * 2;

      max_2 = max_connections * 5;

      max_3 = max_os_open_files;//操作系统单个进程最大允许打开文件句柄(文件描述符)。

       open_files_limit= max( max_1, max_2 ) > max_3 ? max_3 : max ( max_1, max_2);

    综合分析发现,open_files_limit  | 10240

    而目前ibd表已经10800个了。

     

    三.解决问题

    1.my.cnf  配置 open_files_limit         = 20480

    重启mysql 发现没有变化,open_files_limit  | 10240。

    2.ulimit -a

    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 1024
    max locked memory       (kbytes, -l) 32
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 137216
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    3.vi /etc/security/limits.conf,添加

    mysql            soft    nofile          8192
    mysql            hard    nofile          20480

    4.经过前三步,重启mysql。

    重启mysql 发现,open_files_limit  | 20480。

    5.修改OS用户配置文件

    经过前四步,虽然在mysql中 看open_files_limit  | 20480,但ibbackup还是在前滚时报错。报,open_file不够。怀疑 还是没有生效。

    ulimit -a

    core file size          (blocks, -c) unlimited
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 1024
    max locked memory       (kbytes, -l) 32
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 137216
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited

    于是,修改OS用户配置文件

    分别查看了.bash_profile 、.bashrc 、/etc/bashrc;

    发现,.bash_profile调用 .bashrc ,.bashrc调用 /etc/bashrc

    发现,/etc/bashrc 中有  

    ulimit -S -c unlimited > /dev/null 2>&1
    在这一行之后 添加

    ulimit -n 20480 >/dev/null 2>&1

    6.重启mysql ,执行备份程序,在--apply-log,还是报错,报,open_file不够

     

    InnoDB: Errornumber 24 means 'Too many open files'.

    InnoDB: Some operatingsystem error numbers are described at

    InnoDB: http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html

    7.修改innodb_open_files 参数

    之前这个参数,设置成500.这次修改到1000.

    重启mysql 解决问题

     

    四.关于Operating_System_error_codes.html

    Linux System Error Codes

    The following tableprovides a list of some common Linux system error codes. For a more completelist, see Linux source code.

    Number

    Macro

    Description

    1

    EPERM

    Operation not permitted

    2

    ENOENT

    No such file or directory

    3

    ESRCH

    No such process

    4

    EINTR

    Interrupted system call

    5

    EIO

    I/O error

    6

    ENXIO

    No such device or address

    7

    E2BIG

    Arg list too long

    8

    ENOEXEC

    Exec format error

    9

    EBADF

    Bad file number

    10

    ECHILD

    No child processes

    11

    EAGAIN

    Try again

    12

    ENOMEM

    Out of memory

    13

    EACCES

    Permission denied

    14

    EFAULT

    Bad address

    15

    ENOTBLK

    Block device required

    16

    EBUSY

    Device or resource busy

    17

    EEXIST

    File exists

    18

    EXDEV

    Cross-device link

    19

    ENODEV

    No such device

    20

    ENOTDIR

    Not a directory

    21

    EISDIR

    Is a directory

    22

    EINVAL

    Invalid argument

    23

    ENFILE

    File table overflow

    24

    EMFILE

    Too many open files

    25

    ENOTTY

    Inappropriate ioctl for device

    26

    ETXTBSY

    Text file busy

    27

    EFBIG

    File too large

    28

    ENOSPC

    No space left on device

    29

    ESPIPE

    Illegal seek

    30

    EROFS

    Read-only file system

    31

    EMLINK

    Too many links

    声明:本文档可以随意更改,但必须署名原作者

    作者:凤凰舞者 qq:578989855

  • 相关阅读:
    [GO]使用map生成 json
    [GO]通过结构体生成json
    [GO]正则表达式
    [GO]字符串的使用
    [GO]revoer的应用
    [GO]panic的应用
    微信公众平台自定义菜单及高级接口PHP SDK
    论MySQL何时使用索引,何时不使用索引
    MYSQL explain详解
    Mysql两种存储引擎的优缺点
  • 原文地址:https://www.cnblogs.com/future2012lg/p/5718937.html
Copyright © 2020-2023  润新知