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

по какой-то причине мне не удалось удаленно подключиться к моему серверу 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';` 

и все равно ничего! Что я делаю не так?

изменить: мой.cnf прокомментировал IP-адрес привязки .

4 ответов


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

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

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

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

uncommented in /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-х

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

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

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, чтобы заставить вещи работать, но это очень удобно, когда все работает не так, как ожидалось.


добавьте несколько очков поверх отличного поста apesa:

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

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

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

sudo nano /etc/mysql/my.cnf

нам нужно прокомментировать строки bind-address и skip-external-locking:

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

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

sudo service mysql restart

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