Хосту 'xxx.xx.xxx.xxx' не разрешено подключаться к этому серверу MySQL

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

соединение как

mysql -u root -h localhost -p  

работает нормально, но пытается

mysql -u root -h 'any ip address here' -p

с ошибкой

ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

В таблице mysql.user имеется точно такая же запись для пользователя root с хостом localhost, как с хостом '%'.

Я нахожусь в своем уме и понятия не имею, как действовать дальше. Любые идеи приветствуются.

Ответ 1

Возможно, это предосторожность. Вы можете попробовать добавить новую учетную запись администратора:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

Хотя Pascal и другие отметили, что это не отличная идея, чтобы пользователь с таким доступом открывался для любого IP-адреса. Если вам нужен административный пользователь, используйте root и оставьте его на localhost. Для любого другого действия укажите точно необходимые вам права и ограничьте доступность пользователя, как предлагает Паскаль ниже.

Edit:

Из MySQL FAQ:

Если вы не можете понять, почему вы получаете Доступ запрещен, удаляется у пользователя таблица всех записей, содержащих Host значения, содержащие подстановочные знаки (записи которые содержат символы "%" или "_" ). Очень распространенная ошибка заключается в том, чтобы вставить новую запись с Host = '%' и User = 'some_user', думая, что это позволяет указать localhost для подключитесь к одной машине. причина в том, что это не работает. привилегии по умолчанию включают запись с Host = 'localhost' и Пользователь = ''. Поскольку эта запись имеет Host Значение "localhost" больше чем "%", он используется в предпочтение от новой записи, когда соединение с localhost! Правильный процедура заключается в том, чтобы вставить вторую запись с Host = 'localhost' и Пользователь = 'some_user' или удалить запись с Host = 'localhost' и Пользователь = ''. После удаления записи, не забудьте выпустить ПРИВИЛЕГИИ FLUSH для перезагрузки таблиц грантов. См. Также раздел 5.4.4 "Доступ Контроль, этап 1: подключение Проверка".

Ответ 2

Нужно создать new MySQL User и назначить привилегии, как показано ниже, в Query prompt через phpMyAdmin или в командной строке:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

После выполнения всех четырех запросов он должен подключиться к username / password

Ответ 3

Мое сообщение об ошибке было схожим: "Хосту XXX не разрешено подключаться к этому серверу MySQL", хотя я использовал root. Вот как убедиться, что root имеет правильные разрешения.

Моя настройка:

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

Решение

  1. Откройте файл в "etc/mysql/my.cnf"
  2. Проверить:

    • порт (по умолчанию это "порт = 3306")
    • bind-address (по умолчанию это "bind-address = 127.0.0.1"; если вы хотите открыть для всех, просто закомментируйте эту строку. В моем примере я скажу, что реальный сервер находится на 10.1.1.7)
  3. Теперь получите доступ к базе данных MySQL на вашем фактическом сервере (скажем, ваш удаленный адрес 123.123.123.123 на порту 3306 как пользователь 'root', и я хочу изменить разрешения для базы данных 'dataentry'. Не забудьте изменить IP-адрес, порт и имя базы данных в твои настройки)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to [email protected]'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
    
  4. sudo service mysqld restart

  5. Теперь вы должны иметь возможность удаленного подключения к вашей базе данных. Например, я использую MySQL Workbench и добавляю "Имя хоста: 10.1.1.7", "Порт: 3306", "Имя пользователя: root"

Ответ 4

Вам необходимо предоставить доступ пользователю от любого имени хоста.

Вот как вы добавляете новую привилегию из phpmyadmin

Goto Privileges > Добавить пользователя

enter image description here

Выберите Любой хост для нужного имени пользователя

enter image description here

Ответ 5

Выполните следующие действия:

1) Подключиться к mysql

mysql -uroot -p

2) Создайте пользователя

CREATE USER 'user'@'%' IDENTIFIED BY 'password';

3) Разрешения на грант

 GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION;

4) Флеш-привилегии

FLUSH PRIVILEGES;

Ответ 6

Сообщение *Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server - это ответ сервера MySQL на клиента MySQL. Обратите внимание, как он возвращает IP-адрес, а не имя хоста.

Если вы пытаетесь подключиться к mysql -h<hostname> -u<somebody> -p и он возвращает это сообщение с IP-адресом, тогда сервер MySQL не сможет выполнить обратный поиск на клиенте. Это важно, потому что это то, как он сопоставляет клиент MySQL с грантами.

Убедитесь, что вы можете сделать nslookup <mysqlclient> FROM сервера MySQL. Если это не работает, то на DNS-сервере нет записи. Кроме того, вы можете поместить запись в файл HOSTS сервера MySQL (<ipaddress> <fullyqualifiedhostname> <hostname> < - здесь может иметь значение порядок.)

Запись в файле хоста сервера, позволяющая обратный поиск клиента MySQL, решила эту проблему.

Ответ 7

Если вы вручную измените таблицы разрешений (используя INSERT, UPDATE и т.д.), вы должны выполнить a FLUSH PRIVILEGES, чтобы сообщить серверу перезагрузить таблицы предоставления.

PS: Я бы не рекомендовал, чтобы хост любого подключался к любому пользователю (особенно не к root). Если вы используете mysql для приложения клиент/сервер, предпочитаете адрес подсети. Если вы используете mysql с веб-сервером или сервером приложений, используйте определенные IP-адреса.

Ответ 8

Простой способ:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

затем

FLUSH PRIVILEGES;

сделанный!

Ответ 9

Просто используйте интерфейс, предоставляемый MySql GUI Tool (SQLyog):

Нажмите "Менеджер пользователя": введите описание изображения здесь

Теперь, если вы хотите предоставить доступ ЗА ЛЮБОЙ ДРУГОЙ УДАЛЕННЫЙ ПК, просто убедитесь, что, как и в нижнем изображении, значение поля Host равно% (который является подстановочным знаком)

введите описание изображения здесь

Ответ 10

Большинство ответов здесь показывают, что вы создаете пользователей с двумя значениями хоста: один для localhost и один для %.

Обратите внимание, что, за исключением встроенного пользователя localhost, такого как root, вам не нужно это делать. Если вы просто хотите создать нового пользователя, который может войти в систему из любого места, вы можете использовать

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

и все будет хорошо. (Как отмечали другие, ужасная идея предоставить административные привилегии пользователю из любого домена.)

Ответ 11

простой способ - войти в phpmyadmin с учетной записью root, получить базу данных mysql и выбрать пользовательскую таблицу, редактировать учетную запись root и в поле хоста добавить% wild card. а затем с помощью привилегий ssh ​​flush

 FLUSH PRIVILEGES;

Ответ 12

Если это последняя установка mysql, то перед тем, как изменить что-либо еще, попробуйте просто выполнить эту команду, а затем повторите попытку:

flush privileges;

Это само по себе исправляет проблему для меня на Ubuntu 16.04, mysql 5.7.20. YMMV.

Ответ 13

Просто найдите лучший способ сделать это из панели управления хостингом (я использую DirectAdmin здесь)

просто перейдите к целевой БД сервера в панели управления, в моем случае: Управление MySQL → выберите вашу БД → вы найдете: "Хосты доступа", просто добавьте сюда свой удаленный хост и он работает сейчас! enter image description here

Я думаю, что есть аналогичная опция на других C.panels, таких как plesk и т.д.

Я надеюсь, что это было полезно и для вас.

Ответ 14

Хорошо, что вы можете сделать, это просто открыть файл mysql.cfg, и вы должны изменить Bind-address на этот

bind-address = 127.0.0.1

а затем перезагрузите mysql, и вы сможете подключить этот сервер к этому.

Посмотрите, что у вас может быть идея.

это реальный зол

Ответ 15

Если вы работаете в Windows; Простым решением является запуск мастера настройки экземпляра сервера MySQL. Он находится в вашей группе MYSQL в меню "Пуск". На втором из последнего экрана щелкните поле, в котором говорится: "Разрешить доступ root с удаленных компьютеров".

Ответ 16

Решение CPANEL

Зайдите в Cpanel, поищите Remote MySQL. Добавьте IP в поле ввода:

Хост (подстановочный знак% разрешен)

Комментарий, чтобы запомнить, что это за IP. Это было для меня.

Ответ 17

Я тоже столкнулся с той же проблемой. Я разрешил это за 2 минуты для меня, я просто белый список ip через cpanel

Предположим, вы пытаетесь подключить базу данных сервера B от сервера A. Перейдите на Сервер B Cpanel- > Удаленный MySQL- > введите IP-адрес сервера и что он.

Ответ 18

В ситуации, когда кто-то сталкивается с этой проблемой, это происходит из SQLyog, это произошло:

Я подключился к удаленной базе данных (из SQLyog) и работал несколько часов. Впоследствии я покинул систему в течение нескольких минут, а затем вернулся, чтобы продолжить свою работу - ОШИБКА 1130! Ничего, с которым я пытался работать; Перезапуск SQLyog не исправил его. Затем я перезапустил систему - она ​​все еще не работала.

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

Ответ 19

Этот ответ может помочь кому-то...

Все эти ответы не помогли, тогда я понял, что забыл проверить одну важную вещь.. Порт :)

У меня MySQL работает в док-контейнере на другом порту. Я указывал на мою хост-машину через порт 3306, на котором запущен сервер mysql. Мой контейнер выставляет сервер на порт 33060. Так что все это время я смотрел не на тот сервер! DOH!

Ответ 20

Это работает для DirectAdmin;

  1. Зайдите в свой DirectAdmin.
  2. Перейти к MySQL Management.
  3. Выберите вашу database.
  4. Под вашей Accesse Host есть поле. Вы должны заполнить это поле к xxx.xx.xxx.xx
  5. Нажмите на Add Host.

Законченный. Теперь вы можете получить доступ к этой БД с помощью вашего your_database_username & your_database_password.
Так просто!

Ответ 21

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

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

Ответ 22

если вы пытаетесь выполнить mysql-запрос с помощью определения строки соединения, вы получите эту ошибку.

Вероятно, вы просите определить строку подключения перед выполнением. вы проверяете это? (извините за плохой английский)

Ответ 23

Проблема: root @localhost не может подключиться к новой установке mysql-community-server на openSUSE 42.2-1.150.x86_64. Mysql отказывается от подключений - точка.

Решение:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

Файл user.MYD имеет размер 0 (правда?!). Я скопировал все 3 файла из другой рабочей системы.

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp [email protected]:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

Я смог войти в систему. Тогда это было просто вопросом повторного применения всех привилегий схемы. Также, если вы отключили IPv6, повторно включите его временно, чтобы учетная запись root @:: 1 также могла работать.

Ответ 24

Все ответы здесь не работали в моем случае, поэтому я гость это может помочь другим пользователям в будущем. Это также может быть проблемой в нашем коде, а не только в MySQL.

Если вы используете VB.NET

Вместо этого кода:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

Вам нужно переместить MysqlConn = New MySqlConnection() в первую строку. Так было бы так:

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database