Ошибка MySQL/MariaDB «Ошибка установления соединения с базой данных»

Узнайте об ошибке MySQL/MariaDB «Error establishing a database connection» или «Unable to connect to database server» и о том, как исправить эту ошибку.

Убедитесь, что MySQL работает

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

ps -aux | grep mysql

В результате будет получен список запущенных процессов, в названии которых есть «mysql». В списке будет и команда, которую вы только что выполнили. Если MySQL запущен, то в списке также будет указан процесс MySQL.

Если MySQL/MariaDB не запущен, вы увидите в списке только команду grep.

Запустите MySQL/MariaDB с помощью команды:

  • CentOS 7 (MariaDB): systemctl start mariadb
  • Ubuntu и Debian (MySQL): service mysql start или /etc/init.d/mysqld start

Обязательно используйте правильное имя пользователя и пароль для вашего пользователя MySQL. Они отличаются от ваших учетных данных для входа в систему IONOS. Необходимые имя пользователя и пароль задаются при создании базы данных MySQL.

Также необходимо задать правильное имя хоста.

Проверка соединения с базой данных из командной строки

Как только вы убедились, что MySQL/MariaDB запущена, следующим шагом будет подключение из командной строки с помощью команды:

mysql -u root -p

Вам будет предложено ввести пароль пользователя root MySQL. По умолчанию пароль для пользователя root MySQL совпадает с оригинальным паролем root вашего сервера.

Примечание

Если вы измените пароль для корневого пользователя сервера, это не приведет к изменению пароля для корневого пользователя MySQL.

После ввода пароля вы должны оказаться в клиенте MySQL/MariaDB, который должен выглядеть примерно так:

Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 4172
Server version: 5.5.44-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]

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

Если вместо входа в клиент вы получите ошибку, подобную этой:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Вы вводите неправильный пароль для имени пользователя. Проверьте правильность написания имени пользователя и пароля. Обратите внимание, что имя пользователя чувствительно к регистру — Root не то же самое, что root.

Проверка имени пользователя MySQL

Стоит убедиться, что вы используете правильное написание и заглавную букву для имени пользователя. Чтобы перечислить всех пользователей MySQL/MariaDB, войдите в клиент командной строки от имени root с помощью команды:

mysql -u root -p

Затем перечислите всех пользователей MySQL и их хосты с помощью команды:

select host, user from mysql.user;

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

Сбросьте пароль пользователя MySQL

Примечание

Будьте осторожны при использовании этой команды, особенно при сбросе пароля пользователя root MySQL.

Чтобы сбросить пароль пользователя MySQL/MariaDB, войдите в клиент командной строки от имени root с помощью команды :

mysql -u root -p

Затем сбросьте пароль пользователя с помощью команды:

update mysql.user set password = MD5('(new_password)') where user = "jdoe";

Замените new_password на новый пароль, а jdoe на имя пользователя.

Убедитесь, что пользователь имеет правильные привилегии

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

Чтобы проверить привилегии (гранты) пользователя, войдите в клиент командной строки от имени root с помощью команды:

mysql -u root -p

Затем покажите гранты пользователя с помощью команды:

show grants for 'jdoe'@'localhost';

Замените jdoe на имя пользователя. Если применимо, замените localhost на имя хоста.

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

+-----------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jdoe'@'localhost' IDENTIFIED BY PASSWORD '*CD2BAEA88178935C438649F12126752DB1B24D7B' |
| GRANT ALL PRIVILEGES ON `example_database`.* TO 'jdoe'@'localhost'                                            |
+-----------------------------------------------------------------------------------------------------------------------+

Обратите внимание, что этот пользователь имеет все привилегии для базы данных с именем example_database.

Если пользователю не были предоставлены привилегии ни для одной базы данных, вы увидите что-то вроде этого:

+-------------------------------------------------------------------------------------------------------------+
| Grants for jdoe@localhost                                                                                   |
+-------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jdoe'@'localhost' IDENTIFIED BY PASSWORD '*00E247AC5F9AF26AE0194B41E1E769DEE1429A29' |
+-------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Обратите внимание, что этот пользователь имеет привилегии USAGE только на «.», и не имеет привилегий на какие-либо базы данных.

Проверка подключения к базе данных из Интернета

Используйте простой сценарий, чтобы проверить, примет ли ваша база данных соединение. Создайте файл database-connection-test.php со следующим содержимым:

<?php
$test_connect = mysql_connect('localhost', 'root', 'password');
if (!$test_connect) {
die('Could not connect: ' . mysql_error());
}
echo 'Successful database connection.';
mysql_close($test_connect);
?>

Замените слово password на пароль вашего корневого пользователя MySQL.

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

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

Примечание

Обязательно удалите этот файл после завершения тестов.

Проверьте имя хоста MySQL

Если скрипт размещен на том же сервере, что и база данных MySQL (например, на вашем Linux Cloud Server), то по умолчанию имя хоста будет localhost.

Чтобы перепроверить имя хоста MySQL, войдите в клиент командной строки от имени root с помощью команды:

mysql -u root -p

Затем покажите имя хоста с помощью команды:

SHOW VARIABLES WHERE Variable_name = 'hostname';

Если ваш скрипт обращается к удаленной базе данных, имя хоста будет URL этой базы данных.

Оцените статью
cdelat.ru
Добавить комментарий