Корневой доступ 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 любезно создал инструмент, который уже делает это...