Удаленные подключения Mysql Ubuntu

79

По какой-то причине я не смог удаленно подключиться к моему серверу MySQL. Я пробовал все, и я все еще получаю ошибки.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using           password: YES)

Теперь я попытался запустить

 `GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

и еще ничего! Что я делаю неправильно?

EDIT: my.cnf прокомментировал привязку ip.

  • 0
    какую версию MySQL вы используете?
  • 0
    Версия сервера: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Показать ещё 1 комментарий
Теги:
remoting

4 ответа

288
Лучший ответ

Чтобы открыть MySQL для чего-либо, кроме локального, вам понадобится следующая строка

Для mysql версии 5.6 и ниже

без комментирования в /etc/mysql/my.cnf и присвоен вашим компьютерам IP-адрес, а не loopback

Для mysql версии 5.7 и выше

без комментирования в /etc/mysql/mysql.conf.d/mysqld.cnf и присвоен вашим компьютерам IP-адрес, а не loopback

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Или добавьте bind-address = 0.0.0.0, если вы не хотите указывать IP

Затем остановите и перезапустите MySQL с новой записью my.cnf. После запуска перейдите к терминалу и введите следующую команду.

lsof -i -P | grep :3306

Что-то вроде этого с вашим фактическим IP-адресом в xxx's

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

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

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

тогда

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

и, наконец,

FLUSH PRIVILEGES; 
EXIT;

Если у вас нет того же пользователя, который был создан, как указано выше, при локальном входе в систему вы можете наследовать базовые привилегии localhost и иметь проблемы с доступом. Если вы хотите ограничить доступ myuser, тогда вам нужно будет прочитать синтаксис инструкции GRANT ЗДЕСЬ Если вы пройдете все это и все еще имеете проблемы, добавьте дополнительную ошибку вывода и соответствующих my.cnf строк.

ПРИМЕЧАНИЕ. Если lsof не возвращается или не найден, вы можете установить его ЗДЕСЬ на основе вашего дистрибутива Linux. Вам не нужно lsof, чтобы все работало, но это очень удобно, когда все работает не так, как ожидалось.

  • 1
    Спасибо, несмотря на то, что я правильно выполнил эти шаги в первый раз, я сделал их снова, так как вы опубликовали и работали как шарм!
  • 12
    Для всех, кто борется с lsof -i -P | grep :3306 , это не сработало, но удаленное соединение все еще работает без этого подтверждения, не обращайте внимания, если вы не видите правильный вывод.
Показать ещё 13 комментариев
25

Добавить несколько точек на вершине превосходной должности apesa:

1) Вы можете использовать команду ниже, чтобы проверить ip-адрес, который прослушивает сервер mysql

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Используйте FLUSH PRIVILEGES, чтобы принудительно загружать таблицы грантов, если по какой-то причине изменения не будут эффективными немедленно

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

3) Если брандмауэр netfilter включен (sudo ufw enable) на сервере mysql, выполните следующие действия, чтобы открыть порт 3306 для удаленного доступа:

sudo ufw allow 3306

проверить статус с помощью

sudo ufw status

4) Как только удаленное соединение установлено, оно может быть проверено на клиентском или серверном компьютере с помощью команд

netstat -an | grep 3306
netstat -an | grep -i established
  • 2
    Это спасло мне весь день! Спасибо за sudo ufw status !!
  • 0
    netstat -nlt | grep 3306 возвращается пустым
Показать ещё 1 комментарий
2

MySQL только слушает localhost, если мы хотим включить удаленный доступ к нему, тогда нам нужно внести некоторые изменения в файл my.cnf:

sudo nano /etc/mysql/my.cnf

Нам нужно прокомментировать строки привязки и пропустить-внешние блокировки:

#bind-address = 127.0.0.1
# skip-external-locking

После внесения этих изменений нам нужно перезапустить службу mysql:

sudo service mysql restart
  • 1
    обязательно прокомментируйте skip-external-locking
  • 1
    Я не закомментировал skip-external-lock, и он все еще работает.
0

При тестировании в Windows не забудьте открыть порт 3306.

  • 0
    Ах, вы гений, это очень важно, если вы используете подсистему Windows для Linux, вам нужно открыть порт 3306 для входящего трафика через брандмауэр Windows, и ни одна из вышеперечисленных вещей, чтобы проверить, работает ли MySQL на прослушивании подсистема

Ещё вопросы

Сообщество Overcoder
Наверх
Меню