Выдаёт ошибку: mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE ...'

Аватар пользователя admin

При попытке сделать дамп базы данных с помощью команды mysqldump, получаем ошибку вида:

mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE ...'


далее могут самые разнообразные сообщения и коды ошибок, объясняющие первую часть, но все они как правило имеют одну причину. Причина заключается в недостаточном количестве файлов, которые может открыть сервер MySQL или MariaDB. Проверить это очень просто. Запустите командно-строчную утилиту mysql и выполните команду:

mysql> show variables like '%open_files%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)


Как видите, всего 1024 файла, чего совершенно недостаточно при большом количестве таблиц и/или баз данных. Это значение нужно увеличить, но теперь встаёт интересный вопрос как же это сделать?

Первым делом, необходимо указать нужное значение в конфигурационном файле. Для MySQL это /etc/my.cnf. Для MariaDB это /etc/my.cnf.d/server.cnf. Необходимо добавить нужную директиву:

[mysqld]
...
open_files_limit = 32000

 

Но этого ещё недостаточно! Ведь ограничение на количество одновременно открытых файлов накладывается операционной системой.

В CentOS 5 и CentOS 6 всё просто. Создаёте (если его конечно нет) файл /etc/sysconfig/mysqld и помещаете туда строчку:

ulimit -n 32000


После чего выполните команду на перезапуск MySQL:

# service mysqld restart


или

# service mariadb restart

 

А вот в CentOS 7 с MariaDB и в дистрибутивах, основанных на systemd нас ждёт весёлое развлечение:

  1. Создайте каталог /etc/systemd/system/mariadb.service.d/
  2. Разместите в нём файл limits.conf следующего содержимого:
    [Service]
    LimitNOFILE=32000
    
  3. Выпоните команду для перечитывания конфигурации службы systemd:
    # systemctl --system daemon-reload
    
  4. И наконец перезапустите MariaDB командой:
    # systemctl restart mariadb
    

Вот собственно и всё. Вы можете убедиться, что всё сработало как надо выполнив в утилите mysql команду:

mysql> show variables like '%open_files%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 32000 |
+------------------+-------+
1 row in set (0.00 sec)
0
Ваш рейтинг: Нет