xtrabackup percona error number 24

Последнее обновление 26.12.2018

Ошибка error number 24 вызвана типичной проблемой, когда на процесс пользователя  наложено ограничение по лимиту открытых файлов. Для её решения нужно глубокое понимание, почему такое происходит. Я же опишу решение с небольшими комментариями, по теории предоставлю ссылки.

Итак, хотим настроить репликацию (или сделать бэкап) базы MySQL на движке InnoDB (это важно) через утилиту xtrabackup, и на самом первом шаге получаем выхлоп ошибок:

InnoDB: Operating system error number 24 in a file operation.
InnoDB: Error number 24 means 'Too many open files' 
InnoDB: Some operating system error numbers are described at http://dev.mysql.com/doc/refman/5.7/en/operating-system-error-codes.html 
InnoDB: File ./sbtest/sbtest132841.ibd: 'open' returned OS error 124. Cannot continue operation 
InnoDB: Cannot continue operation.

Проверим, сколько же у нас файлов в базе:

find /var/lib/mysql/ -name "*.ibd" | wc -l
17365

Казалось бы, не так уж и много. И правда.

А теперь проверим количество открытых файлов в системе:

cat /proc/sys/fs/file-max
3262006

Число выглядит намного больше, чем количество файлов в нашей базе…

А теперь вызовем команду, которая покажет наши лимиты для пользователя:

ulimit -n
1024

Или другим способом:

cat /proc/$(pgrep mysqld)/limits

[root(0)uniform-db-p-1 ~]# cat /proc/6072/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            10485760             unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             96024                96024                processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       96024                96024                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us

Вот где собака зарыта! Нужно всего лишь изменить значение, я сделал это налету:

ulimit -n 30000

Но это на один сеанс до ребута, для постоянных значений нужно править файл:

/etc/security/limits.conf:

username hard nofile 2000000
username soft nofile 1900000

Обратите внимание, софт лимит должен быть меньше.

Полезные ссылки для детального изучения причин такой ошибки:

  1. https://www.percona.com/blog/2016/12/28/using-percona-xtrabackup-mysql-instance-large-number-tables/
  2. https://www.percona.com/blog/2017/10/12/open_files_limit-mystery/

Ваш комментарий будет первым

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *