MySQL root доступ со всех хостов



Я установил сервер MySQL на удаленной машине Ubuntu. Пользователь root определяется в таблице mysql.user следующим образом:



mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| localhost | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+


Я могу получить доступ с помощью пользователя root из того же интерфейса командной строки удаленной машины, используя стандартный клиент mysql. Теперь я хочу разрешить корневой доступ с каждого хоста в Интернете , поэтому я попытался добавить следующую строку (это точная копия первой строки из предыдущего дампа, за исключением столбца host):



mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host | user | password |
+------------------+------+-------------------------------------------+
| % | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+


Но мой клиент на моей персональный компьютер продолжает говорить мне (я заслонил IP сервера):




Ошибка SQL (2003): не удается подключиться к серверу MySQL на '46.x. x. x' (10061)




Я не могу сказать, является ли это ошибкой аутентификации или ошибкой сети. На брандмауэре сервера я включил порт 3306 / TCP для 0.0.0.0/0, и это нормально для меня...
682   7  

7 ответов:

В этом процессе есть два шага:

A) предоставлять привилегии. В качестве пользователя root выполните команду:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

B) привязка ко всем адресам:

Самый простой способ-это закомментировать строку в вашем файле my.cnf:

#bind-address = 127.0.0.1 

И перезапустить mysql

service mysql restart

По умолчанию он привязывается только к localhost, но если вы закомментируете строку, он привязывается ко всем интерфейсам, которые он находит. Комментирование строки эквивалентно bind-address=*.

Чтобы проверить, где служба mysql привязала execute as корень:

netstat -tupan | grep mysql

Обновление Для Ubuntu 16:

Config file is (now)

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

(по крайней мере, на стандартном Ubuntu 16)

Выполните следующий запрос:

use mysql;

update user set host='%' where host='localhost'

Примечание: не рекомендуется для производственного использования.

Иногда

Bind-address = 127.0.0.1

Должно быть

Bind-address = *

MariaDB работает на Raspbian-файл, содержащий bind-адрес, трудно определить. У MariaDB есть некоторая не очень полезная информация по этому вопросу.

Я использовал

# sudo grep -R bind-address /etc 

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

Я также должен был установить привилегии и хосты в mysql, как все выше указывали.

А также повеселился, открыв порт 3306 для удаленного подключения к моей Raspberry Pi-наконец-то использовал iptables-persistent.

Все сейчас работает отлично.

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

[mysqld]
bind-address = 127.100.10.234

Этот ip-адрес из конфигурации ethX.

mysql_update это то, что вам нужно.

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

В моем случае проблема заключалась в настройке "bind-address". Комментирование этого параметра в my.cnf не помогло , потому что в моем случае mysql по какой-то причине установил значение по умолчанию 127.0.0.1.

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

mysql -h localhost -u myname -pmypass mydb

Считайте текущую настройку:

Show variables where variable_name like "bind%"

Вы должны увидеть 0.0.0.0 здесь, Если вы хотите разрешить доступ со всех хостов. Если это не так, отредактируйте свой /etc/mysql/my.cnf и установите bind-адрес в поле раздел [mysqld]:

bind-address=0.0.0.0

Наконец, перезагрузите сервер MySql, чтобы получить новую настройку:

sudo service mysql restart

Повторите попытку и проверьте, была ли выбрана новая настройка.

Comments

    Ничего не найдено.