Как отладить WordPress «Ошибка при установлении соединения с базой данных»

Вступление

WordPress является одной из самых популярных систем управления контентом с открытым исходным кодом в мире. Хотя изначально он был сосредоточен на ведении блогов, с годами он превратился в более гибкую платформу для веб-сайтов в целом. После почти пятнадцатилетнего периода разработки он довольно отточен и надежен, но проблемы все еще могут возникать.

Если вы недавно пытались загрузить свой веб-сайт на платформе WordPress и вместо этого увидели сообщение «Ошибка при установлении соединения с базой данных», причиной чаще всего является одна из следующих:

  • Сбой базы данных, часто из-за нехватки памяти на сервере

  • Учетные данные для входа в базу данных неверны в вашей конфигурации WordPress

  • Таблицы базы данных WordPress были повреждены

Давайте рассмотрим эти проблемы по одному, чтобы определить, влияют ли они на вас и как их исправить.

Предпосылки

Этот учебник предполагает следующее:

  • Вы запускаете WordPress на компьютере, на котором у вас есть командная строка и + sudo + доступ к

  • Ваша база данных работает на том же сервере, что и WordPress (типично для самостоятельной установки WordPress, менее типично для среды общего хостинга WordPress)

  • Вы знаете свое имя пользователя базы данных, пароль и имя базы данных, созданной для WordPress. Эта информация должна была быть создана во время начальной установки вашей установки WordPress.

Шаг 1 - Проверьте ресурсы памяти сервера

Хорошим первым шагом для устранения этой проблемы является попытка войти на сервер, чтобы проверить работоспособность системы и работает ли MySQL.

Войдите на свой сервер через SSH, не забывая заменить выделенные части ниже данными своего пользователя и сервера:

ssh @

Если вам нужна помощь при входе на сервер, ознакомьтесь с нашей статьей Wow, чтобы подключиться к капле с помощью SSH.

Теперь, когда мы успешно вошли в систему, давайте проверим, что ваш сервер MySQL работает:

sudo netstat -plt

Команда + netstat + выводит информацию о сетевой системе нашего сервера. В этом случае нам нужны имена программ (+ -p +), которые прослушивают соединения (+ -l +) на сокете tcp (+ -t +). Проверьте вывод строки со списком + mysqld +, выделенной ниже:

OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 *:ssh                   *:*                     LISTEN      2205/sshd
tcp        0      0 localhost:smtp          *:*                     LISTEN      2361/master
tcp6       0      0 [::]:http               [::]:*                  LISTEN      16091/apache2
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      2205/sshd
tcp6       0      0 ip6-localhost:smtp      [::]:*                  LISTEN      2361/master

Если ваш вывод похож, мы знаем, что MySQL работает и ожидает подключения. Если вы не видите MySQL в списке, попробуйте запустить MySQL вручную. На большинстве систем это будет выглядеть так:

sudo systemctl start

Некоторые дистрибутивы Linux (особенно CentOS) используют + mysql + вместо простого + mysql + в качестве имени службы. Заменить при необходимости.

MySQL должен запуститься. Чтобы проверить, перезапустите команду + netstat +, которую мы использовали выше, и проверьте вывод для процесса + mysqld +.

Для работы MySQL и WordPress требуется достаточное количество памяти. Если MySQL завершил работу из-за нехватки памяти, мы должны увидеть это в журналах ошибок. Давайте смотреть:

zgrep -a "allocate memory" error.log*

+ zgrep + будет искать файлы журналов, включая старые файлы журналов, которые были заархивированы как сжатые файлы + .tar.gz +. Мы ищем строки, содержащие + allocate memory +, в любом файле + error.log * + в каталоге ++.

Output2017-04-11T17:38:22.604644Z 0 [ERROR] InnoDB: Cannot allocate memory for the buffer pool

Если вы видите одну или несколько строк, подобных приведенным выше, на вашем сервере MySQL не хватило памяти и завершил работу. Если это только одна линия, возможно, вы временно испытываете необычный трафик. Если есть много строк ошибок, ваш сервер регулярно становится ограниченным объемом памяти. В любом случае, решение состоит в том, чтобы перейти на сервер с большей доступной памятью. Для большинства облачных провайдеров очень просто обновить существующий сервер с минимальным временем простоя.

Если вы не видите вывода после выполнения команды + zgrep +, на вашем сервере не хватает памяти. Если ваш сайт все еще обслуживает ошибки, перейдите к следующему шагу, где мы рассмотрим нашу конфигурацию WordPress и убедитесь, что данные для входа в MySQL верны.

Шаг 2 - Проверьте учетные данные для входа в базу данных

Если вы только что перенесли установку WordPress между серверами или хостинг-провайдерами, вам может потребоваться обновить сведения о подключении к базе данных. Они хранятся на сервере в файле PHP под названием + wp-config.php.

Во-первых, давайте найдем наш файл + wp-config.php +:

sudo find / -name "wp-config.php"

Это ищет все из корневого каталога (+ / +) и находит любой файл с именем + wp-config.php +. Если такой файл существует, будет выведен полный путь:

Outputwp-config.php

Теперь используйте ваш любимый текстовый редактор, чтобы открыть файл конфигурации. Мы будем использовать редактор + nano здесь:

sudo nano wp-config.php

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

WP-config.php

/** The name of the database for WordPress */
define('DB_NAME', '');

/** MySQL database username */
define('DB_USER', '');

/** MySQL database password */
define('DB_PASSWORD', '');

Проверьте правильность этих трех переменных на основе ваших записей. Если они выглядят неправильно, обновите их соответствующим образом, сохраните и выйдите (+ CTRL-O +, затем + CTRL-X +, если вы используете + nano +). Даже если данные для входа выглядели правильно, стоит попытаться подключиться к базе данных из командной строки, просто чтобы убедиться. Скопируйте и вставьте данные прямо из файла конфигурации в следующую команду:

mysqlshow -u  -p

Вам будет предложено ввести пароль. Вставьте его и нажмите + ENTER. Если вы получаете * Access denied * error, ваше имя пользователя или пароль неверны. В противном случае команда + mysqlshow + покажет все базы данных, к которым у указанного пользователя есть доступ:

Output+--------------------+
|     Databases      |
+--------------------+
| information_schema |
|       |
+--------------------+

Убедитесь, что одна из баз данных точно соответствует содержимому вашего файла конфигурации WordPress. Если это так, вы убедились, что ваша конфигурация верна и что WordPress должен иметь возможность успешно войти в базу данных. Перезагрузите свой сайт, чтобы увидеть, если ошибка исчезла.

Все еще не работает? Следующее, что нужно попробовать, это восстановить базу данных.

Шаг 3 - Восстановление базы данных WordPress

Иногда из-за неудачного обновления, сбоя базы данных или неисправного плагина ваша база данных WordPress может быть повреждена. Эта проблема может проявляться как ошибка подключения к базе данных, поэтому, если ваша проблема не была сервером MySQL или файлом конфигурации, попробуйте восстановить базу данных.

WordPress предоставляет встроенную утилиту для восстановления базы данных. По умолчанию он отключен, поскольку не имеет контроля доступа и может быть проблемой безопасности. Мы включим функцию, запустим ремонт, а затем отключим ее.

Снова откройте файл + wp-config.php +:

sudo nano wp-config.php

В любую пустую строку вставьте следующее:

WP-config.php

define('WP_ALLOW_REPAIR', true);

Это определяет переменную, которую WordPress ищет при определении, должна ли она включать функцию восстановления.

Сохраните и закройте файл. Переключитесь на свой браузер и загрузите следующий адрес, обязательно заменив выделенную часть доменом или IP-адресом своего сайта:

http:///wp-admin/maint/repair.php

Страница восстановления базы данных загрузит:

изображение: https: //assets.digitalocean.com/articles/wp-database-error/wp-db-repair.png [страница восстановления базы данных WordPress]

Нажмите кнопку * Repair Database *, и вы попадете на страницу результатов, где вы можете увидеть проверки и исправления, происходящие в режиме реального времени:

изображение: https: //assets.digitalocean.com/articles/wp-database-error/wp-db-repair-results.png [страница результатов восстановления базы данных WordPress]

Когда процесс завершится, обязательно откройте файл + wp-config.php + и удалите только что вставленную строку.

Вы заметили какой-нибудь ремонт? Попробуйте снова на своем сайте и проверьте, не исчезла ли ошибка. Если обнаружены неисправимые проблемы, вам может потребоваться восстановить базу данных из резервной копии, если она у вас есть. Пожалуйста, обратитесь к нашему учебнику How для импорта и экспорта баз данных в MySQL для получения подробной информации о как это сделать

Если с базой данных проблем не обнаружено, то мы до сих пор не обнаружили проблему. Это могут быть случайные проблемы, которые мы просто упускаем, или что-то более неясное. Позвольте мне закончить с несколькими другими возможностями, чтобы попробовать.

Заключение

Большинство проблем «Ошибка при установлении соединения с базой данных» должно было быть решено с помощью трех шагов, описанных выше. Тем не менее, могут быть более неуловимые проблемы, которые продолжают так себя представлять. Вот еще несколько статей, которые могут быть полезны для отслеживания и устранения причины этой ошибки:

  • Частым источником высокого трафика (и, следовательно, низкой производительности и ошибок) является атака методом "грубой силы", типичная для установок WordPress. Вы можете нейтрализовать атаку, следуя https://www.digitalocean.com/community/tutorials/how-to-protect-wordpress-from-xml-rpc-attacks-on-ubuntu-14-04[How для защиты WordPress от Атаки XML-RPC.

  • Вы можете сэкономить некоторые ресурсы сервера, применив кеширование в вашей установке WordPress. Существует множество простых плагинов для кеширования для WordPress. Наш учебник, Как настроить Redis Cache для ускорения Up WordPress покажет вам, как настроить особо производительный кэш Redis-backed.

Related