Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
mysql:errors [2015/10/19 08:52] – [Решение] mirocowmysql:errors [2017/12/03 09:19] (текущий) – [Исправление] mirocow
Строка 1: Строка 1:
-{{tag>mysql mariadb}}+{{tag>mysql mariadb percona errors}}
  
-====== MySql/MariaDB Исправление ошибок ======+====== Ошибки MySql/MariaDB ====== 
 + 
 +===== Deadlock found when trying to get lock ===== 
 + 
 +<code> 
 +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)')) 
 +</code> 
 + 
 +Для выяснения причины ошибки, необходимо запустить **SHOW ENGINE INNODB STATUS;** 
 + 
 +===== No such file or directory ===== 
 + 
 +<code> 
 +SQLSTATE[HY000] [2002] No such file or directory 
 +</code> 
 + 
 +Ошибка появляется при неверном указании сокета для драйвера PDO **pdo_mysql.default_socket** 
 + 
 +===== Got error 28 from storage engin ===== 
 + 
 +<code>Got error 28 from storage engine</code> 
 + 
 +  * 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 =====
 +
 +<code>Checking for corrupt, not cleanly closed and upgrade needing tables</code>
  
   * mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p   * mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p
Строка 10: Строка 37:
 ===== Too many open files ===== ===== Too many open files =====
  
-  * mysqladmin -uroot -p variables | grep open_files_limit+<code>Can't read dir of '.' (Errcode: 24 "Too many open files")</code>
  
-==== Решение ====+Превышение одновременно открытых дескрипторов
  
-=== Анализ состояния ===+==== Анализ состояния ====
  
 +  * Сколько разрешено открывать файловых дескрипторов пользователю mysql (системные ограничения)
 +  * <code sh># cat /etc/security/limits.conf | grep -vP '^#'</code>
 +  * Сколько разрешено открывать файловых дескрипторов (конфигурация)
 +  * <code sh>cat /etc/mysql/my.cnf|grep open_files_limit</code>
   * Сколько занято дескрипторов   * Сколько занято дескрипторов
   * <code>lsof -u mysql | wc -l</code>   * <code>lsof -u mysql | wc -l</code>
-  * Сколько разрешено открывать файловых дескрипторов пользователю mysql 
-  * <code># mysql -c 'ulimit -n'</code> 
   * Cколько дескрипторов разрешено в MySQL   * Cколько дескрипторов разрешено в MySQL
-  * <code># mysql -se "show variables like 'open_files_limit'"+  * <code># mysql -se "show variables like 'open_files_limit'" -uroot -p
 Variable_name       Value Variable_name       Value
 open_files_limit    1024</code> open_files_limit    1024</code>
  
-=== Исправление ===+==== Исправление ====
  
   * nano /etc/security/limits.conf   * nano /etc/security/limits.conf
 +  * Воставляем число файловых дескрипторов (для пользователя mysql)
   * <code sh>   * <code sh>
 mysql           hard    nofile          102400 mysql           hard    nofile          102400
 mysql           soft    nofile          102400</code> mysql           soft    nofile          102400</code>
-  * Выставляем число дескрипторов в 8192 +  * Временно увеличиваем число открытых дескрипторов файлов\\ (настройки сохраняются до перезагрузки машины)<code bash>$ ulimit -n 102400</code> 
-  * <code>echo 'mysql   nofile  8192' > /etc/security/limits.d/mysql.conf</code>+  * Проверить настройки можно <code bash>$ ulimit -a</code>
   * nano /etc/mysql/my.cnf   * nano /etc/mysql/my.cnf
-  * <code>open_files_limit 8192</code>+  * Выставляем число одновременно открытых файлов в конфигурации 
 +  * <code> 
 +[mysqld] 
 +open_files_limit 8192 
 +</code> 
 +или 
 +  * Выставляем число дескрипторов в разрешенных 
 +  * <code>echo 'mysql  -  nofile  8192' > /etc/security/limits.d/mysql.conf</code>
   * Перезапускаем сервер   * Перезапускаем сервер
   * <code sh># service mysql restart</code>   * <code sh># service mysql restart</code>
-  * Если не удается перезапустить сервер, то подключаемся к MySQL под [[:mysql|привилегированным пользователем]] и выполняем 
-  * <code sh>mysql> SET GLOBAL open_files_limit=8192;</code> 
  
 +=== PAM (Аунтификация) ===
 +
 +Если после перезапуска mysql не применил новые ограничения, значит PAM это запретил. Тогда добавляем разрешение в PAM.
 +
 +  * Проверяем ограничения PAM
 +  * <code sh>grep -r limits /etc/pam.*</code>
 +  * Снимаем ограничение (Debian)
 +  * <code sh>$ echo 'session required pam_limits.so' >> /etc/pam.d/common-session</code>
 +  * <code sh>$ echo 'session required pam_limits.so' >> /etc/pam.d/common-session-noninteractive</code>
 +
 +=== systemd (Менеджер загрузки) ===
 +
 +  * Сбрасываем ограничения в systemd
 +  * <code sh>echo "
 +[Service]
 +LimitNOFILE=infinity
 +LimitMEMLOCK=infinity" > /etc/systemd/system/mysqld.service
 +</code>
 +  * Перезагружаем настройки демона systemd
 +  * <code sh>systemctl reload mariadb.service</code>