Сегодня на Debian 9 столкнулся с проблемой что я не могу подключиться к 127.0.0.1, используя MySQL (MariaDB), хотя подключение через localhost работает.
Сначала я создал пользователя 'root'@'127.0.0.1':
mysql > CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '<redacted>'; mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
Хэши паролей идентичны:
MariaDB [(none)]> select user,host,password from mysql.user; +-----------+-----------+-------------------------------------------+ | user | host | password | +-----------+-----------+-------------------------------------------+ | root | localhost | *B68A25C6C6C902646A985996A0716AD431CFA799 | | root | 127.0.0.1 | *B68A25C6C6C902646A985996A0716AD431CFA799 | +-----------+-----------+-------------------------------------------+ 2 rows in set (0.00 sec)
При подключении к localhost все хорошо:
~# mysql -uroot -p`cat /root/.mysql` -h localhost Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 29 Server version: 10.1.47-MariaDB-0+deb9u1 Debian 9.13 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
А вот при подключении к 127.0.0.1 уже есть проблемы:
~# mysql -uroot -p`cat /root/.mysql` -h 127.0.0.1 ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Решение, как всегда, оказалось рядом: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_skip_name_resolve
Нужно было включить skip-name-resolve в конфиге MySQL и перезагрузить MySQL:
skip-name-resolve = 1
Из документации: "Если это OFF, MySQL разрешает имена хостов при проверке клиентских подключений. Если это ON, MySQL использует только номера IP; в этом случае все значения столбцов Host в таблицах грантов должны быть адресами IP или localhost."