it-roy-ru.com

Хосту "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', как и у другого с узлом '%'.

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

556
concept47

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

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;

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

Правка:

Из MySQL FAQ:

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

675
Yannick Motton

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

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

224
Aditya P Bhatt

Мое сообщение об ошибке было похожим и гласило: «Host 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 mysqld

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

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

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

Перейти к привилегиям> Добавить нового пользователя

enter image description here

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

enter image description here

66
HimalayanCoder

Просто выполните следующие шаги:

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;
53
minhas23

Сообщение *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> ИЗ сервера MySQL. Если это не сработает, значит, на DNS-сервере нет записи. Кроме того, вы можете поместить запись в файл HOSTS сервера MySQL (<ipaddress> <fullyqualifiedhostname> <hostname> <- порядок здесь может иметь значение).

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

23
Dennis McLaughlin

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

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

14
Pascal Thivent

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

Нажмите на Диспетчер пользователей:  enter image description here

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

 enter image description here

4
BabaNew

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

 FLUSH PRIVILEGES;
3
user889030

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

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

затем

FLUSH PRIVILEGES;

сделанный!

3
user5510975

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

flush privileges;

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

2
Alex R

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

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

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

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

2
Erica Kane

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

1
Jan

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

bind-address = 127.0.0.1

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

Посмотрите, что вы можете иметь идею от этого.

это настоящий сол

1
Krishna

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

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

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

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

1
Eran Levi

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

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

0
user3437729

Проблема: 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 также могла работать.

0
Alex D

CPANEL решение

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

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

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

0
user2060451

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

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

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

0
اسماعیل زارع

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

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

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

0
Srini

На случай, если кто-то столкнулся с этой проблемой из-за SQLyog, это произошло:

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

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

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

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

0
Abd Abughazaleh