Ошибка "Too many open files" в Percona XtraBackup
Исправляем ошибку нехватки файловых дескрипторов при выполнении резервного копирования с помощью Percona XtraBackup
При использовании Percona Xtrabackup 2.4.5 и младше необходимо иметь достаточную возможность по количеству открытых файлов в системе, чтобы открыть каждое табличное пространство InnoDB в инстансе для резервного копирования. Если вы используете innodb_file_per_table = 1
и имеете большое количество таблиц, то скорее всего получите ошибку следующего вида:
1 | InnoDB: Operating system error number 24 in a file operation. |
Уточним какое количество файлов нам необходимо.
1 | # find /var/lib/mysql/ -name "*.ibd" | wc -l |
Проверим текущее максимальное значение открытых файлов
1 | # cat /proc/sys/fs/file-max |
Как видно из вывода, то текущих значений недостаточно для открытия всего табличного пространства, поэтому необходимо увеличить данный параметр.
Для того, чтобы временно изменить количество одновременно открытых файлов (до перезагрузки), выполняем команду:
1 | # sysctl -w fs.file-max=5000000 |
Для установки значения на постоянную основу добавим параметр в конфигурационный файл ядра /etc/sysctl.conf
и применим изменения “на лету”.
1 | # echo "fs.file-max=5000000" >> /etc/sysctl.conf |
Проверим текущее количество открытых файлов:
1 | # cat /proc/sys/fs/nr_open |
Увеличим ограничение ресурсов для сервиса MySQL, для этого добавим в конец файла /etc/security/limits.conf
следующие строки:
1 | mysql hard nofile 2000000 |
Одновременно с этим добавим параметр в конфигурационный файл ядра /etc/sysctl.conf
и применим изменения “на лету”:
1 | # echo "fs.nr_open=2000000" >> /etc/sysctl.conf |
Альтернативные способы
Можно увеличить параметр в конфигурационном файле MySQL, но потребуется перезагрузка сервиса:
1 | [xtrabackup] |
Перед выполнением резервной копии выполнять команду ulimit -n 2000000
или добавить в сценарий запуска:
1 | # echo "ulimit -n 2000000" >> ~/.bashrc |