Ошибки MySql/MariaDB
Deadlock found when trying to get lock
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction The SQL being executed was: UPDATE tbl_point SET location = POINTFROMTEXT(CONCAT('POINT(55.683452 37.526923)'))
Для выяснения причины ошибки, необходимо запустить SHOW ENGINE INNODB STATUS;
No such file or directory
SQLSTATE[HY000] [2002] No such file or directory
Ошибка появляется при неверном указании сокета для драйвера PDO pdo_mysql.default_socket
Got error 28 from storage engin
Got error 28 from storage engine
- Got error 28 from storage engine - Закончилось место на диске
- MySQL Error: Out of resources when opening file './db_name/table_name.MYD' (Errcode: 24)
Checking for corrupt, not cleanly closed and upgrade needing tables
Checking for corrupt, not cleanly closed and upgrade needing tables
- mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
- mysql_upgrade --force -u root -p
Too many open files
Too many open files
Превышение одновременно открытых дескрипторов
Анализ состояния
- Сколько разрешено открывать файловых дескрипторов пользователю mysql (системные ограничения)
# cat /etc/security/limits.conf | grep -vP '^#'
- Сколько разрешено открывать файловых дескрипторов (конфигурация)
cat /etc/mysql/my.cnf|grep open_files_limit
- Сколько занято дескрипторов
lsof -u mysql | wc -l
- Cколько дескрипторов разрешено в MySQL
# mysql -se "show variables like 'open_files_limit'" -uroot -p Variable_name Value open_files_limit 1024
Исправление
- nano /etc/security/limits.conf
- Воставляем число файловых дескрипторов (для пользователя mysql)
mysql hard nofile 102400 mysql soft nofile 102400
- Временно увеличиваем число открытых дескрипторов файлов
(настройки сохраняются до перезагрузки машины)$ ulimit-n102400
- Проверить настройки можно
$ ulimit-a
- nano /etc/mysql/my.cnf
- Выставляем число одновременно открытых файлов в конфигурации
open_files_limit 8192
или
- Выставляем число дескрипторов в разрешенных
echo 'mysql - nofile 8192' > /etc/security/limits.d/mysql.conf
- Перезапускаем сервер
# service mysql restart
PAM (Аунтификация)
Если после перезапуска mysql не применил новые ограничения, значит PAM это запретил. Тогда добавляем разрешение в PAM.
- Проверяем ограничения PAM
grep -r limits /etc/pam.*
- Снимаем ограничение (Debian)
$ echo 'session required pam_limits.so' >> /etc/pam.d/common-session
$ echo 'session required pam_limits.so' >> /etc/pam.d/common-session-noninteractive
systemd (Менеджер загрузки)
- Сбрасываем ограничения в systemd
echo " [Service] LimitNOFILE=infinity LimitMEMLOCK=infinity" > /etc/systemd/system/mysqld.service
- Перезагружаем настройки демона systemd
systemctl reload mariadb.service