Ошибка "Too many open files" в Percona XtraBackup

Ошибка "Too many open files" в Percona XtraBackup

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Исправляем ошибку нехватки файловых дескрипторов при выполнении резервного копирования с помощью Percona XtraBackup

При использовании Percona Xtrabackup 2.4.5 и младше необходимо иметь достаточную возможность по количеству открытых файлов в системе, чтобы открыть каждое табличное пространство InnoDB в инстансе для резервного копирования. Если вы используете innodb_file_per_table = 1 и имеете большое количество таблиц, то скорее всего получите ошибку следующего вида:

1
2
3
4
5
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 ./perconatst/perconatst154734.ibd: 'open' returned OS error 124. Cannot continue operation
InnoDB: Cannot continue operation.

Уточним какое количество файлов нам необходимо.

1
2
# find /var/lib/mysql/ -name "*.ibd" | wc -l
4753866

Проверим текущее максимальное значение открытых файлов

1
2
# cat /proc/sys/fs/file-max
791540

Как видно из вывода, то текущих значений недостаточно для открытия всего табличного пространства, поэтому необходимо увеличить данный параметр.

Для того, чтобы временно изменить количество одновременно открытых файлов (до перезагрузки), выполняем команду:

1
# sysctl -w fs.file-max=5000000

Для установки значения на постоянную основу добавим параметр в конфигурационный файл ядра /etc/sysctl.conf и применим изменения “на лету”.

1
2
# echo "fs.file-max=5000000" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

Проверим текущее количество открытых файлов:

1
2
# cat /proc/sys/fs/nr_open
1048576

Увеличим ограничение ресурсов для сервиса MySQL, для этого добавим в конец файла /etc/security/limits.conf следующие строки:

1
2
mysql hard nofile 2000000
mysql soft nofile 2000000

Одновременно с этим добавим параметр в конфигурационный файл ядра /etc/sysctl.conf и применим изменения “на лету”:

1
# echo "fs.nr_open=2000000" >> /etc/sysctl.conf

Альтернативные способы

Можно увеличить параметр в конфигурационном файле MySQL, но потребуется перезагрузка сервиса:

1
2
[xtrabackup]
open-files-limit=2000000

Перед выполнением резервной копии выполнять команду ulimit -n 2000000 или добавить в сценарий запуска:

1
# echo "ulimit -n 2000000" >> ~/.bashrc
On this page