По какой-то причине я не смог удаленно подключиться к моему серверу 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.
Чтобы открыть 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, чтобы все работало, но это очень удобно, когда все работает не так, как ожидалось.
lsof -i -P | grep :3306
, это не сработало, но удаленное соединение все еще работает без этого подтверждения, не обращайте внимания, если вы не видите правильный вывод.
Добавить несколько точек на вершине превосходной должности 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
sudo ufw status
!!
netstat -nlt | grep 3306
возвращается пустым
MySQL только слушает localhost, если мы хотим включить удаленный доступ к нему, тогда нам нужно внести некоторые изменения в файл my.cnf:
sudo nano /etc/mysql/my.cnf
Нам нужно прокомментировать строки привязки и пропустить-внешние блокировки:
#bind-address = 127.0.0.1
# skip-external-locking
После внесения этих изменений нам нужно перезапустить службу mysql:
sudo service mysql restart
skip-external-locking
При тестировании в Windows не забудьте открыть порт 3306.