Корневой доступ MySQL от всех хостов

Я установил сервер 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. Теперь я хочу разрешить доступ root с каждого хоста в Интернете, поэтому я попытался добавить следующую строку (это точный дубликат первой строки из предыдущего дампа, за исключением столбца 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, и это нормально для меня...

Ответ 1

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

а) Предоставить привилегии. В качестве пользователя root выполните эту замену 'password' с вашим текущим паролем root:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

б) привязать ко всем адресам:

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

#bind-address = 127.0.0.1 

и перезапустите MySQL

service mysql restart

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

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

netstat -tupan | grep mysql

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

Файл конфигурации есть (сейчас)

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

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

Ответ 2

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

use mysql;

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

ПРИМЕЧАНИЕ. Не рекомендуется для использования в производстве.

Ответ 3

Иногда

bind-address = 127.0.0.1

должен быть

bind-address = *

Ответ 4

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

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

# sudo grep -R bind-address /etc 

чтобы найти, где это чертовски.

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

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

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

Ответ 5

MYSQL 8.0 - открыть клиент командной строки mysql
ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *. * TO 'root' @'localhost';
использовать MySQL
ОБНОВЛЕНИЕ mysql.user SET host = '%' WHERE user = 'root';
Перезапустите службу MySQL

Ответ 6

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

[mysqld]
bind-address = 127.100.10.234

этот ip из конфигурации eспасибо.

Ответ 7

В моем случае проблема была связана с настройкой "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 и установите адрес привязки в разделе [mysqld]:

bind-address=0.0.0.0

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

sudo service mysql restart

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

Ответ 8

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

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