由于某种原因,我无法远程连接到我的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)

现在,我试着 run

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

还是什么都没有!

EDIT:my.cnf注释掉了绑定ip.

推荐答案

要将MySQL公开给localhost之外的任何对象,您必须具备以下几行代码

For mysql version 5.6 and below

/etc/mysql/my.cnf中未注释,并分配给您的计算机IP地址,而不是环回

For mysql version 5.7 and above

/etc/mysql/mysql.conf.d/mysqld.cnf中未注释,并分配给您的计算机IP地址,而不是环回

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

或者添加一个

然后停止并用新的my重新启动MySQL.cnf入口.运行后,转到终端并输入以下命令.

lsof -i -P | grep :3306

这应该会在xxx的实际IP中返回类似的内容

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;

如果您没有像上面那样创建相同的用户,那么当您在本地登录时,您可能会继承基本本地主机权限,并出现访问问题.如果你想限制myuser的访问权限,那么你需要仔细阅读GRANT语句语法HERE,如果你完成了所有这些,并且在发布一些额外的错误输出和my语句时仍然存在问题.cnf合适的线路.

注意:如果lsof没有返回或找不到,您可以根据您的Linux发行版HERE安装它.你不需要lsof来让事情顺利进行,但当事情没有按预期进行时,它非常方便.

更新:如果在my.cnf中添加/更改bind-address后仍不起作用,则在最初声明的位置进行更改:

/etc/mysql/mariadb.conf.d/50-server.cnf

Mysql相关问答推荐

根据当前表列的值,从SQL中的另一个表中获取数据

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

查找表中的唯一记录

发生的原因及解决方法

使用mysql查询获取不关注user1的user3

Select 构成每天聚合 MAX 的各个行

将 AVG 与 HAVING 结合使用

关联同一个表中的两列

使用sql查找源和最终目的地

Next-key lock explication - 范围的主键

在 SQL 中 for each 组返回具有最大值的行,包括具有相同值的行

提取 MySQL 5.7 连续值的差异

MYSQL除以零警告,奇怪的行为

在分组结果 MySQL 5.7 版中获取最多的重复值

如何使用 Raw SQl / Laravel 进行累积计数 - Eloquent ORM

进行 MySQL COUNT 查询

如果我创建一个没有主键的表然后添加一个主键,主键是聚集索引吗?

无法在两个 mysql 表上执行内部联接

MySQL时区更改?

MySQL - 错误 1045 - 访问被拒绝