Проблемы с базой данных

Updated 1 year ago by Oleg

НЕДОСТУПНА БАЗА ДАННЫХ

1. Проверьте MySQL

- подключитесь к серверу по SSH и выполните:

service mysql status

- в выводе должно присутствовать running, если нет – запустите службу:

service mysql start

- после запуска MySQL проверьте работу сайта. Если он не работает – переходите к следующему шагу.

 

2. Проверьте дисковое пространство

- проверьте наличие свободного места:

df -h

- если на диске недостаточно свободного места – Вы можете расширить диск или удалить ненужные файлы. Для подробного анализа состояния дискового пространства и удаления файлов лучше использовать специальные утилиты du, ncdu.

- если на диске есть свободное пространство, но приложения выдают ошибку о нехватке места – проверьте inodes

 

ВОССТАНОВИТЕ ТАБЛИЦ БД

Если при работе сайта выводятся ошибки Warning: Table './database/table' is marked as crashed – выполните восстановление поврежденных таблиц.

1. Если на вашем сервере установлен phpMyAdmin – зайдите в его интерфейс и выберите нужную базу данных. Выделите таблицы, о повреждении которых сообщалось в ошибках. В меню С отмеченными выберите Восстановить.

2. Также можно выполнить восстановление таблиц через консоль.

Подключитесь к серверу по SSH. Чтобы восстановить определенную таблицу table_name в базе base_name выполните:

mysqlcheck -r base_name table_name -uroot –p

Чтобы восстановить все таблицы в базе данных  base_name выполните:

mysqlcheck -r base_name -uroot -p

Чтобы проверить все таблицы в базе выполните:

mysqlcheck -r -A -uroot -p

 

MYSQL SERVER HAS GONE AWAY (ОШИБКА 2006)

Данная ошибка говорит о том, что сервер закрыл соединение. Это может быть вызвано превышением времени ожидания или получением слишком большого пакета.

Для устранения ошибки подключитесь к серверу по SSH. Файл конфигурации может располагаться в различных директориях, например:

/etc/my.cnf

/etc/mysql/mysql.conf.d/mysqld.cnf

/etc/mysql/my.cnf

Для поиска файла с нужными настройками используйте следующую команду:

grep -Rl 'name' /etc/*

Команда для поиска файла с настройками допустимого размера получаемых пакетов:

grep -Rl 'max_allowed_packet' /etc/*

Команда для поиска файла с настройками таймаута:

grep -Rl 'wait_timeout' /etc/*

 

1. Увеличение таймаута

Откройте файл конфигурации, используя редактор. Путь к файлу был найден в предыдущем пункте.

nano /etc/mysql/mysql.conf.d/mysqld.cnf

Увеличьте wait_timeout на нужную величину. Таймаут в файле конфигурации указывается в секундах. Чтобы задать таймаут 5 минут – укажите значение 300:

wait_timeout = 300

Чтобы изменения вступили в силу – перезапустите MySQL:

service mysql restart

  

2. Увеличение допустимого размера пакетов

Измените параметр max_allowed_packet. Откройте файл конфигурации, используя редактор. Обязательно указывайте правильный путь.

 nano /etc/mysql/mysql.conf.d/mysqld.cnf

Увеличьте max_allowed_packet на нужную величину. Максимально допустимый размер пакетов указывается в мегабайтах. Чтобы задать максимальный размер пакета 128 мегабайт введите:

max_allowed_packet = 128M

Чтобы изменения вступили в силу – перезапустите MySQL:

service mysql restart

 

TOO MANY CONNECTIONS (ОШИБКА 1040)

Данная ошибка говорит о том, что достигнуто предельное количество подключений к БД. Причины появления ошибки:

1. Медленные запросы, на которые уходит много времени. Решить данную проблему может только оптимизация кода базы данных.

2. Большое количество одновременных подключений.  Данную проблему можно решить путем изменения параметра максимального количества подключений в файле конфигурации MySQL.

Найдите путь к файлу, содержащему параметр max_connections:

grep -Rl 'max_connections' /etc/*

Откройте найденный файл и увеличьте в нем максимальное количество одновременных подключений (например, до 150):

max_connections = 150

Чтобы изменения вступили в силу – перезапустите MySQL:

service mysql restart

  

INCORRECT DATE VALUE (ОШИБКА 1292)

Данная ошибка может возникать при добавлении в таблицу MySQL без указания даты.

1. Для устранения ошибки откройте файл конфигурации. Например:

nano /etc/mysql/mysql.conf.d/mysqld.cnf

2. В строке sql-mode=, удалите:

NO_ZERO_IN_DATE

 

NO_ZERO_DATE

 

STRICT_ALL_TABLES

3. Если в файле конфигурации отсутствует строка sql-mode=, добавьте следующую строку:

sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

4. Чтобы изменения вступили в силу – перезапустите MySQL:

service mysql restart

 

Если у Вас остались вопросы - создайте тикет в техподдержку.


How did we do?


IS (opens in a new tab)

Powered by HelpDocs (opens in a new tab)