Error 2002 (hy000): не удается подключиться к локальному серверу mysql через ночную ошибку на homebrew после mysql 8.0 [duplicate]

Что делать?

Во-первых, нужно убедиться, что вы используете правильные имя пользователя и пароль. Для этого нужно подключиться к MySQL с правами администратора (если ошибка 1045 не дает такой возможности, то нужно перезапустить сервер MySQL в режиме —skip-grant-tables), посмотреть содержимое таблицы user служебной базы mysql, в которой хранится информация о пользователях, и при необходимости отредактировать её.

SELECT user,host,password FROM mysql.user;
+—————+——————+——————————————-+
| user          | host            | password                                  |
+—————+——————+——————————————-+
| root          | house-f26710394 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| aa            | localhost       | *196BDEDE2AE4F84CA44C47D54D78478C7E2BD7B7 |
| test          | localhost       |                                           |
| new_user      | %               |                                           |
|               | %               | *D7D6F58029EDE62070BA204436DE23AC54D8BD8A |
| new@localhost | %               | *ADD102DFD6933E93BCAD95E311360EC45494AA6E |
| root          | localhost       | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+—————+——————+——————————————-+

Если изначально была ошибка:

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

    значит вы указывали при подключении неверный пароль, так как пользователь root@localhost существует. Сам пароль храниться в зашифрованном виде и его нельзя узнать, можно лишь задать новый

    SET PASSWORD FOR root@localhost=PASSWORD(‘новый пароль’);

  • ERROR 1045 (28000): Access denied for user ‘ODBC’@’localhost’ (using password: YES)

    в данном случае в таблице привилегий отсутствует пользователь ‘ODBC’@’localhost’. Его нужно создать, используя команды GRANT, CREATE USER и SET PASSWORD.

Экзотический пример. Устанавливаете новый пароль для root@localhost в режиме —skip-grant-tables, однако после перезагрузки сервера по прежнему возникает ошибка при подключении через консольный клиент:ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
Оказалось, что было установлено два сервера MySQL, настроенных на один порт.

Как подключиться к MySQL серверу с помощью PHP?

Для возможности обмена данными между PHP и MySQL необходимо установить соединение.

Подключение через MySQLi (объектно-ориентированный подход)

<?php
$server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;

// Открываем соединение
$mysqli_connection = new mysqli($server, $user, $password);

// Проверка результата подключения
if ($mysqli_connection->connect_error) {
die(«Подключение не удалось: » . $mysqli_connection->connect_error);
}
echo «Подключение прошло успешно!»;

// Закрываем соединение
$mysqli_connection->close();
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

 
// Открываем соединение

$mysqli_connection=newmysqli($server,$user,$password);

 
// Проверка результата подключения

if($mysqli_connection->connect_error){

die(«Подключение не удалось: «.$mysqli_connection->connect_error);

}

echo»Подключение прошло успешно!»;

 
// Закрываем соединение

$mysqli_connection->close();

?>

Подключение через MySQLi (процедурный подход)

<?php
$server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;

// Открываем соединение
$mysqli_connection = mysqli_connect($server, $user, $password);

// Проверка результата подключения
if (!$mysqli_connection) {
die(«Подключение не удалось: » . mysqli_connect_error());
}
echo «Подключение прошло успешно!»;

// Закрываем соединение
mysqli_close($mysqli_connection);
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

 
// Открываем соединение

$mysqli_connection=mysqli_connect($server,$user,$password);

 
// Проверка результата подключения

if(!$mysqli_connection){

die(«Подключение не удалось: «.mysqli_connect_error());

}

echo»Подключение прошло успешно!»;

 
// Закрываем соединение

mysqli_close($mysqli_connection);

?>

Подключение через PDO

<?php
$server = «localhost»;
$user = «root»;
$password = «MySafePass4!»;

try {
$pdo_connection = new PDO(«mysql:host=$server;dbname=test», $user, $password);
// Определяем ошибки как исключения
$pdo_connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo «Подключение прошло успешно!»;
}

// Отлавливаем исключение
catch(PDOException $e) {
echo «Подключение не удалось: » . $e->getMessage();
}
// Закрываем соединение
$pdo_connection = null;
?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

<?php

$server=»localhost»;

$user=»root»;

$password=»MySafePass4!»;

try{

$pdo_connection=newPDO(«mysql:host=$server;dbname=test»,$user,$password);

// Определяем ошибки как исключения

$pdo_connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

echo»Подключение прошло успешно!»;

}
 
// Отлавливаем исключение

catch(PDOException$e){

echo»Подключение не удалось: «.$e->getMessage();

}
// Закрываем соединение

$pdo_connection=null;

?>

Недостаточно памяти

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

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

  • если клиент MySQL используется напрямую, запустите его с ключом , чтобы отключить кешированные результаты;
  • если вы используете драйвер MyODBC, пользовательский интерфейс (UI) имеет расширенную вкладку с опциями. Отметьте галочкой «Do not cache result» (не кешировать результат).

Также может помочь MySQL Tuner. Это полезный скрипт, который подключается к работающему серверу MySQL и даёт рекомендации по настройке для более высокой производительности.

Настройка MySQL Server

Первый шаг – настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на компьютере.

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

Для этого вам нужно отредактировать файл конфигурации MySQL и добавить или изменить значение опции bind-address. Вы можете установить один IP-адрес и IP-диапазоны. Если адрес есть 0.0.0.0, сервер MySQL принимает соединения на всех интерфейсах IPv4 хоста. Если в вашей системе настроен IPv6 0.0.0.0, используйте вместо ::.

Расположение файла конфигурации MySQL зависит от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf, в то время как в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf.

Откройте файл в текстовом редакторе :

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

Найдите строку, которая начинается с bind-address и установите в качестве значения IP-адрес, который должен прослушивать сервер MySQL.

По умолчанию установлено значение 127.0.0.1 (прослушивается только на локальном хосте).

В этом примере мы настроим сервер MySQL на прослушивание всех интерфейсов IPv4, изменив значение на 0.0.0.0
mysqld.cnf

bind-address           = 0.0.0.0
# skip-networking

Если есть строка, содержащая skip-networking, удалите ее или закомментируйте, добавив # в начале строки.

В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте ее в разделе .

После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать сервисы.

Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:

sudo systemctl restart mysql

В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:

sudo systemctl restart mysqld

MacOS появляется ошибка 2002 (Hy000): не может подключиться к локальному серверу MySQL через сокет ‘/tmp/mysql.sock’ (2)

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги:  база данных  mysql

Описание проблемы:

После установки MySQL 5,7 под MacOS терминал входит в «MySQL -U Root -P» Local MySQL база данных, сообщает

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

Исключение. Это ключ для установки установочного пакета в установочный пакет, и я хочу удалить ключ к ключу.

решение:

Откройте настройку системных предпочтений MAC, вы можете увидеть значок MySQL внизу.

Щелчок

Установлено, что служба MySQL выключается.

После открытия попробуйте, решить проблему.

Кроме того: вы можете открыть службу MySQL через терминал.

Начните MySQL Service:

Остановите MySQL Service:

Перезапустите службу MySQL:

Интеллектуальная рекомендация

 …

Предисловие: Форма записи латекса в соответствии с некоторыми из босса, некоторые формы действительно не находятся напрямую, обычно я хочу сделать форму, а затем открыть оригинальную пользовательскую …

Резюме изучения Javaweb (11) — использование файлов cookie для управления сеансами 1. Понятие разговора Сессия может быть просто понята как: пользователь открывает браузер, нажимает несколько гиперссы…

BaoBao has just found a positive integer sequence  of length  from his left pocket and another positive integer  from his right pocket. As number 7 is BaoBao’s favorite n…

{Экстремальный исходный код атаки escape} VAR1:=(HHV(HIGH,9)-CLOSE)/(HHV(HIGH,9)-LLV(LOW,9))*100-70; VAR2:=SMA(VAR1,9,1)+100; VAR3:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; VAR4:=SMA(VAR3,3,1)…

Вам также может понравиться

Принимая обход уровня и в качестве примера поиска двойного вилкого дерева странного слоя и даже слоя  …

Добро пожаловать в серию статей о LWIP-приложении STM32,Нажмите, чтобы прыгать 1. Структура пакета данных-pbuf 1.1, структура pbuf LWIP — это конкретная реализация стека протоколов TCP / IP. Суть закл…

axvline Попробуй сам:http://kakazai.cn/index.php/Kaka/Python/query/name/axvline Принадлежащий модуль: matplotlib Функция: рисовать вертикальную линию Пример 1: Типичный пример Описание функции Описани…

Введение в язык C: Язык C — это процедурный язык, в котором всего 37 ключевых слов и 34 оператора. Он не проверяет подписчики массива за пределами границ, он может напрямую обращаться к физическому ад…

Заглавие: Подобно Тетрису, но можно добавить только квадраты 1 × 2 или 2 × 1. Если в строке или столбце есть квадраты, их можно удалить. Вы должны заполнить все квадраты, введенные в вопро…

Установка новой версии

Устанавливаете новую версию MySQL, но в конце при завершении конфигурации выпадает ошибка:

ERROR Nr. 1045
Access denied for user ‘root’@’localhost’ (using password: NO)

Это происходит потому, что ранее у вас стоял MySQL, который вы удалили без сноса самих баз. Если вы не помните старый пароль и вам нужны эти данные, то выполните установку новой версии без смены пароля, а потом смените пароль вручную через режим —skip-grant-tables.

P.S. Статья написана по материалам форума SQLinfo, т.е. в ней описаны не все потенциально возможные случаи возникновения ошибки mysql №1045, а только те, что обсуждались на форуме. Если ваш случай не рассмотрен в статье, то задавайте вопрос на форуме SQLinfo
Вам ответят, а статья будет расширена.

Все права на данную статью принадлежат порталу SQLInfo.ru. Перепечатка в интернет-изданиях разрешается только с указанием автора и прямой ссылки на оригинальную статью. Перепечатка в бумажных изданиях допускается только с разрешения редакции.

Служба mysqld не может запуститься так как порт 3306 используется другой программой

По умолчанию служба mysqld использует порт 3306 если этот порт использует другой процесс, то это является препятствием для запуска MySQL и в конечном счёте появляется рассматриваемая ошибка.

Для решения проблемы выясните, какая служба прослушивает порт 3306. Например, это можно сделать командой:

sudo lsof -Pn -iTCP:3306

А затем остановите эту служу и удалите её из автозагрузки.

Либо можно использовать альтернативный вариант — настроить службу mysqld прослушивать другой, отличный от дефолтного порта. Но это может повлечь необходимость явно указывать порт в любых приложениях, которые подключаются к СУБД MySQL.

9 ответов

измените localhost на 127.0.0.1 в config.inc.php

Причина этого в том, что pma пытается подключиться к mysql.socket, если вы используете localhost. Если вы используете 127.0.0.1, PMA создает TCP-соединение, которое должно работать.

Я пытаюсь это сделать раньше

затем

найди это,

если есть , измените его на

Я снова проверил

mysqli сказал:

я снова открываюсь
  и я нашел

Заполните пароль своим паролем

Это сработало для меня. Это может сработать и для вас.

Справочная информация:

Я просто хотел запустить несколько тестов PHPUnit на моем Mac, используя Terminal.
Некоторым из классов, которые я хотел протестировать, было подключение MySQL DB, которое было создано и управляется PHPMyAdmin, и веб-приложение, с которым я работал, работало нормально на localhost. Поэтому, когда я запустил эти тестовые сценарии, я получил следующую ошибку на своем терминале:

Решение:

Так что с зудом мне пришлось решить его и запустить тест, я искал в нескольких SO Q & A потоках и пробовал. И сочетание изменений сработало для меня.

  1. Найдите файл , который относится к PHPMyAdmin.
  2. Найдите строку , по большей части эта строка могла быть закомментирована по умолчанию, если это так, пожалуйста, раскомментируйте ее.
  3. И замените эту строку следующим:
  1. Сохраните его и перезапустите базу данных MySQL с панели управления XAMPP (manager-osx).
  2. Измените значение параметра в следующий метод:

Примечание. . Этот — это номер порта MySQL, который используется по умолчанию. Вам лучше проверить, какой у вас номер порта MySQL, прежде чем выполнять следующие действия.

И это все. Для меня работал только этот набор шагов и ничего больше. Я выполнил свои модульные тесты, и они работают нормально, и данные БД также были обновлены в соответствии с тестами.

Почему это работает:

Самая близкая причина, которую я мог бы найти, заключается в том, что это работает, потому что иногда для метода требуется рабочий сокет (IP-адрес БД Хост вместе с номером порта) базы данных. Поэтому, если вы закомментировали строку или в качестве значения в ней указали «localhost», он игнорирует номер порта. Но если вы хотите использовать сокет, то вы должны использовать «127.0.0.1» или реальное имя хоста. (для меня это, кажется, независимо от того, какой номер порта по умолчанию у нас есть на самом деле, мы должны выполнить вышеуказанные шаги.) Прочитайте следующее ссылка PHPMyAdmin для получения дополнительной информации.

Надеюсь, это может быть полезно кому-то еще.

Ура!

Возможно, ваш SQL-сервер остановлен

Найдите

Изменить

в

Сохранить.

Затем переименуйте файл и удалите sample из названия.

Сегодня я исправил проблему, выполнив следующие действия:

  1. Если config.inc.php не существует в каталоге phpMyadmin Скопируйте config.sample.inc.php в config.inc.php.

  2. Добавить сокет в

  3. Сохраните файл и получите доступ к phpmyadmin через URL.

Если вы используете mysql 8.0.12, вы должны использовать устаревшее шифрование пароля, так как надежное шифрование не поддерживается клиентом php.

Прежде всего убедитесь, что служба mysql запущена:

вы увидите такой вывод, если он работает:

затем измените localhost на 127.0.0.1 в config.inc.php

Пароль по умолчанию для пользователя «root» пуст «» ничего не вводите для пароля

Если он не позволяет использовать пустой пароль, вам нужно снова отредактировать файл config.inc.php и изменить его.

Проблема в том, что комбинация настроек конфигурации и mysql не запущена. Именно это помогло мне исправить эту ошибку.

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

Вам просто нужно переименовать ib_logfile0 и ib_logfile1 в ib_logfile_0 и ib_logfile_1. Тогда ваша проблема будет решена.

Неправильные права на файл /run/mysqld/mysqld.sock

У MySQL/MariaDB должно быть достаточно прав для создания и записи в файл /run/mysqld/mysqld.sock (или /var/run/mysqld/mysqld.sock). Можно попробовать решить проблему следующим образом, если файл /run/mysqld/mysqld.sock (или /var/run/mysqld/mysqld.sock — указывайте файл в соответствии с вашими настройками в my.cnf) не существует, то создайте его:

touch /run/mysqld/mysqld.sock

Затем сделайте пользователя mysql владельцем этого файла:

chown mysql /run/mysqld/mysqld.sock

Установите правильные права на этот файл:

sudo chmod 755 /run/mysqld/mysqld.sock

Вновь попробуйте запустить сервис:

sudo systemctl start mysqld.service

Проблемы запуска службы из-за несовместимой настройки apparmor

Если при запуске службы вы получаете ошибку и вы используете профили apparmor, проверьте, чтобы профиль apparmor позволял процессу mysqld иметь доступ в необходимую для него директорию.

Несовместимость может быть вызвана, к примеру, файл сокета для MySQL настроен на сохранение по пути /run/mysqld/mysqld.sock, но в профиле apparmor дано разрешение на /var/run/mysqld/mysqld.sock

Чтобы убедиться, что дело именно в apparmor, попробуйте отключить его:

sudo aa-complain /etc/apparmor.d/*

Если проблема исчезла и служба mysqld запустилась, значит нужно поверить разрешения для mysqld и добавить необходимые пути.

К примеру для показанного примера решением проблемы является добавление в /etc/apparmor.d/usr.sbin.mysqld строк:

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,

Тестирование локального подключения

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

В этой процедуре используется среда SQL Server Management Studio в качестве локального клиента. Если среда Management Studio не установлена, см. раздел Скачивание SQL Server Management Studio (SSMS). Если вы не можете установить Management Studio, проверьте подключение с использованием служебной программы . устанавливается вместе с ядром СУБД. Дополнительные сведения о см. в разделе Программа sqlcmd.)

  1. Войдите на компьютер, на котором установлен SQL Server, с помощью имени входа с разрешением на доступ к SQL Server.

    Во время установки для SQL Server требуется задать по меньшей мере одно имя входа в качестве администратора SQL Server. Если администратор неизвестен, см. сведения в статье Подключение к SQL Server в случае, если доступ системных администраторов заблокирован.

  2. На начальной странице введите SQL Server Management Studio. В более старых версиях Windows в меню «Пуск» выберите Все программы, Microsoft SQL Server, а затем щелкните SQL Server Management Studio.

  3. В разделе Подключение к серверу > Сервер выберите Ядро СУБД. В поле Проверка подлинности выберите Проверка подлинности Windows. В поле Имя сервера задайте один из следующих типов подключения:

    Подключение к Тип Пример
    Экземпляр по умолчанию
    Именованный экземпляр \

    Примечание

    При подключении к SQL Server из клиентского приложения на том же компьютере используется протокол общей памяти. Общая память — это тип локального именованного канала, поэтому иногда возникают ошибки, связанные с каналами.

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

    Примечание

    В некоторых сообщениях об ошибках, передаваемых клиенту, намеренно не приведены достаточные сведения для устранения неполадок. Это функция безопасности, которая не позволяет предоставлять злоумышленнику информацию. Чтобы просмотреть полные сведения об ошибке, обратитесь к журналу ошибок SQL Server. Там вы найдете все подробности.

  4. При получении сообщения об ошибке см. MSSQLSERVER_18456.

    Другие состояния сбоя журнала можно просмотреть в этой записи блога.

    Журнал ошибок можно просмотреть помощью среды SSMS (при наличии соединения) в разделе «Управление» обозревателя объектов. В противном случае журнал можно просмотреть с помощью программы Блокнот Windows. Расположение по умолчанию зависит от версии и может быть изменено во время установки. Расположением по умолчанию для SQL Server 2019 (15.x) является .

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

    Подключение к Тип: Пример
    Экземпляр по умолчанию
    Именованный экземпляр \
  6. Если соединение устанавливается с помощью общей памяти, но не TCP, необходимо устранить проблему с TCP. Скорее всего, проблема в том, что TCP-протокол отключен. Сведения о включении TCP см. в разделе выше.

  7. Если вы хотите установить соединение с использованием учетной записи, отличной от учетной записи администратора, после соединения с правами администратора повторите попытку, используя имя входа для проверки подлинности Windows или имя входа для проверки подлинности SQL Server, которое использует клиентское приложение.

Не удаётся подключиться к локальному серверу

Одной из распространённых ошибок подключения клиента к серверу является «ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)».

Эта ошибка означает, что на хосте не запущен сервер MySQL () или вы указали неправильное имя файла сокета Unix или порт TCP/IP при попытке подключения.

Убедитесь, что сервер работает. Проверьте процесс с именем на хосте сервера, используя команды ps или grep, как показано ниже.

Если эти команды не показывают выходных данных, то сервер БД не работает. Поэтому клиент не может подключиться к нему. Чтобы запустить сервер, выполните команду .

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

Если в результате выполнения команды произошла ошибка службы MySQL, вы можете попробовать перезапустить службу и ещё раз проверить её состояние.

Если сервер работает (как показано) и вы по-прежнему видите эту ошибку, вам следует проверить, не заблокирован ли порт TCP/IP брандмауэром или любой другой службой блокировки портов.

Инженер Linux

КРОК, Москва, можно удалённо, По итогам собеседования

tproger.ru

Вакансии на tproger.ru

Для поиска порта, который прослушивается сервером, используйте команду .

Неверно указан хост для подключения

Для указания удалённого хоста используется опция -h. Из-за привычки указывать хост после имени пользователя через знак @ (как это делается, например, для SSH), либо указывать удалённый хост без опции -h, команда может оказаться неверной в том плане, что вместо подключения к удалённому хосту, вы пытаетесь подключиться, например, к своей собственной системе, на которой служба MySQL не установлена.

Следовательно, отредактируйте команду, используйте опцию -h или более длинный вариант —host=имя_хоста для указания хоста, к которому вы хотите подключиться.

Кстати, для указания имени пользователя используется опция -u. Если пароль отличается от стандартного, то используется опция -P (заглавная буква). Опция -p (прописная буква) используется для указания базы данных, которая выбирается для использования.

Пример команды:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Служба mysqld по умолчанию не добавляется в автозагрузку на некоторых дистрибутивах

Помните, что на некоторых дистрибутивах (например, производных Arch Linux, на Kali Linux) даже после установки MySQL или MariaDB они не добавляются в автозагрузку и не запускаются по умолчанию.

Для запуска службы и её авто старта при последующих включениях компьютера выполните команды:

sudo systemctl start mysqld.service
sudo systemctl enable mysqld.service

Убедитесь, что служба MySQL/MariaDB настроена правильно

Если причина проблемы оказалась в том, что служба не запущена и после попытки запуска служба вновь оказалась неактивной, значит проблема может быть в неправильной настройке сервера MySQL/MariaDB.

Файлы конфигурации (настроек) MySQL и MariaDB могут размещаться в разных директориях, например:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /var/lib/mysql/my.cnf

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

На что стоит обратить внимание в конфигурационных файлах

Если вы хотите сохранить оба конфигурационных файла, то проверьте, чтобы значение socket было одинаковым. Также для bind-address должен быть установлен правильный IP адрес. Если к этому серверу подключаются только приложения, которые запущены на этом же сервере, то в качестве значения bind-address нужно прописать localhost или 127.0.0.1

Предоставление доступа пользователю с удаленного компьютера

Следующим шагом является предоставление доступа к базе данных удаленному пользователю.

Войдите на сервер MySQL от имени пользователя root, введя:

sudo mysql

Если вы используете старый плагин аутентификации MySQL для входа в систему от имени пользователя root, введите команду ниже и введите пароль при появлении запроса:

mysql -uroot -p

Внутри оболочки MySQL используйте GRANTоператор для предоставления доступа удаленному пользователю.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Где:

  • database_name – Имя базы данных, к которой будет подключаться пользователь.
  • user_name – это имя пользователя MySQL.
  • ip_address – это IP – адрес , с которого пользователь будет подключаться. Используйте, %чтобы позволить пользователю подключаться с любого IP-адреса.
  • user_password – это пароль пользователя.

Например, чтобы предоставить доступ к базе данных dbname пользователю с именем andreyex с паролем my_passwd с клиентского компьютера с IP 10.8.0.5, вы должны выполнить:

GRANT ALL ON dbname.* TO andreyex@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Настройка брандмауэра

Последний шаг – настройка брандмауэра для разрешения трафика через порт 3306( порт MySQL по умолчанию) с удаленных компьютеров.

Iptables

Если вы используете iptables в качестве брандмауэра, команда ниже разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Разрешить доступ с определенного IP-адреса:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW – это инструмент брандмауэра по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), выполните:

sudo ufw allow 3306/tcp

Разрешить доступ с определенного IP-адреса:

sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD является инструментом управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --reload

Чтобы разрешить доступ с определенного IP-адреса на конкретном порту, вы можете создать новую зону FirewallD или использовать расширенное правило. Хорошо создайте новую зону с именем mysqlzone:

sudo firewall-cmd --new-zone=mysqlzone --permanentsudo firewall-cmd --reload
sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32
sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp
sudo firewall-cmd --reload

Проверка изменений

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

mysql -u user_name -h mysql_server_ip -p

Где user_name имя пользователя, которому вы предоставили доступ и mysql_server_ip, IP-адрес хоста, на котором работает сервер MySQL.

Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.

Если вы получаете сообщение об ошибке, как показано ниже, либо порт 3306 не открыт, либо сервер MySQL не прослушивает IP-адрес.

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

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

"ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server"

Заключение

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

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

  1. Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
  2. Предоставьте доступ удаленному пользователю.
  3. Откройте порт MySQL в вашем брандмауэре.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Ошибки запрета доступа в MySQL

В MySQL учётная запись (УЗ) определяется именем пользователя и клиентским хостом, с которого пользователь может подключиться. УЗ может также иметь данные для аутентификации (например, пароль).

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

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

Увидеть разрешённые привилегии учётной записи можно, выполнив в консоли команду
Входим в консоль (пример для Unix, для Windows консоль можно найти в стартовом меню):

В консоли вводим команду:

Дать привилегии конкретному пользователю в БД по IP-адресу можно, используя следующие команды:

Ошибки запрещённого доступа могут также возникнуть из-за проблем с подключением к MySQL (см. выше).

Получение данных о номере TCP-порта для экземпляра SQL Server

В большинстве случаев соединение с ядром СУБД SQL Server с другого компьютера устанавливается по протоколу TCP.

  1. Используя SQL Server Management Studio на компьютере с SQL Server, подключитесь к экземпляру SQL Server. В обозревателе объектов разверните Управление>Журналы SQL Server, а затем дважды щелкните текущий журнал.
  2. В средстве просмотра журнала нажмите кнопку Фильтр на панели инструментов. В поле Сообщение содержит текст введите , щелкните Применить фильтр, а затем — ОК.
  3. Должно отобразится сообщение, подобное этому: .

Сообщение означает, что этот экземпляр SQL Server прослушивает все IP-адреса на этом компьютере (для IP-протокола версии 4) и TCP-порт 1433. (TCP-порт 1433 — это порт, обычно используемый ядром СУБД или экземпляром SQL Server по умолчанию. Использовать определенный порт может только один экземпляр SQL Server. Поэтому, если установлено несколько экземпляров SQL Server, некоторые из них должны работать с другими номерами портов.) Запишите номер порта для того экземпляра SQL Server, к которому вы пытаетесь подключиться.

Примечание

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

phpmyadmin

При открытии в браузере phpmyadmin получаете сообщение:

ErrorMySQL said: #1045 — Access denied for user ‘root’@’localhost’ (using password: NO)
Connection for controluser as defined in your configuration failed.
phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.

Ни логина, ни пароля вы не вводили, да и пхпадмин их нигде требовал, сразу выдавая сообщение об ошибке. Причина в том, что данные для авторизации берутся из конфигурационного файла config.inc.php Необходимо заменить в нем строчки

$cfg’Servers’$i’user’ = ‘root’;      // MySQL user$cfg’Servers’$i’password’ = »;      // MySQL password (only needed

$cfg’Servers’$i’user’ = ‘ЛОГИН’;      $cfg’Servers’$i’password’ = ‘ПАРОЛЬ’

Заключение

Самое важное при диагностике — понять, что именно вызвало ошибку. Следующие шаги помогут вам в этом:

Первый и самый важный шаг — просмотреть журналы MySQL, которые хранятся в каталоге . Вы можете использовать утилиты командной строки вроде для чтения файлов журнала.
Если служба MySQL не запускается, проверьте её состояние с помощью . Или используйте команду (с флагом ) в systemd.
Вы также можете проверить файл системного журнала (например, ) на предмет обнаружения ошибок.
Попробуйте использовать такие инструменты, как Mytop, glances, top, ps или htop, чтобы проверить, какая программа использует весь ресурс процессора или блокирует машину

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

Перевод статьи «Useful Tips to Troubleshoot Common Errors in MySQL»

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Басы в технике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: