Я установил сервер 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 .xxx '(10061)
Я не могу сказать, если это ошибка аутентификации или ошибка сети. На брандмауэре сервера я включил порт 3306 / TCP для 0.0.0.0/0 , и это нормально для меня ...
источник
bind-address
в my.cnfОтветы:
В этом процессе есть два шага:
а) Предоставить привилегии. От имени пользователя root выполните эту замену
'password'
с вашим текущим паролем root:б) привязать ко всем адресам:
Самый простой способ - закомментировать строку в вашем
my.cnf
файле:и перезапустите MySQL
По умолчанию он привязывается только к localhost, но если вы прокомментируете строку, он связывает все найденные интерфейсы. Комментирование строки эквивалентно
bind-address=*
.Чтобы проверить, где служба mysql имеет привязку, выполните команду root:
Обновление для Ubuntu 16:
Файл конфигурации есть (сейчас)
(по крайней мере на стандартной Ubuntu 16)
источник
USE mysql; UPDATE user SET Grant_priv='Y' WHERE user='root';
Запустите следующий запрос:
use mysql;
update user set host='%' where host='localhost'
ПРИМЕЧАНИЕ: не рекомендуется для производственного использования.
источник
update mysql.user set host='%' where user='root'
Иногда
должно быть
источник
MYSQL 8.0 - открыть клиент командной строки mysql,
ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА *. * TO 'root' @ 'localhost';
используйте mysql
ОБНОВЛЕНИЕ mysql.user SET host = '%' WHERE user = 'root';
Перезапустите службу MySQL
источник
MariaDB работает на Raspbian - файл, содержащий bind-адрес, трудно определить. MariaDB имеет немного не очень полезной информации по этому вопросу.
я использовал
чтобы найти, где эта чертова вещь.
Я также должен был установить привилегии и хосты в mysql, как все выше указали.
А также весело провел время, открывая порт 3306 для удаленных подключений к моему Raspberry Pi - наконец, использовал iptables-persistent .
Теперь все прекрасно работает.
источник
если у вас много сетей, подключенных к вашей ОС, вы должны указать одну из этих сетей в bind-addres из файла my.conf. пример:
этот ip из конфигурации ethX.
источник
В моем случае проблема была связана с настройкой «bind-address». Комментируя эту установку в
my.cnf
действительно не поможет, потому что в моем случае MySQL установить по умолчанию 127.0.0.1 по какой - то причине.Чтобы проверить, какой параметр использует MySql, откройте командную строку в вашем локальном окне:
Считайте текущую настройку:
Вы должны увидеть 0.0.0.0 здесь, если вы хотите разрешить доступ со всех хостов. Если это не так, отредактируйте ваш
/etc/mysql/my.cnf
и установите bind-адрес в разделе [mysqld]:Наконец, перезапустите сервер MySql, чтобы выбрать новый параметр:
Попробуйте еще раз и проверьте, были ли выбраны новые настройки.
источник
mysql_update
это то, что вам нужно.Я не знаю, почему кто-то пошел бы по более сложным способам решения этой проблемы, когда MySql любезно создал инструмент, который уже делает это ...
источник