要将 MySQL 暴露给 localhost 以外的任何内容,您必须具有以下行
对于 mysql 5.6 及以下版本
取消注释/etc/mysql/my.cnf
并分配给您的计算机 IP 地址,而不是环回
对于 mysql 5.7 及以上版本
取消注释/etc/mysql/mysql.conf.d/mysqld.cnf
并分配给您的计算机 IP 地址,而不是环回
#Replace xxx with your IP Address
bind-address = xxx.xxx.xxx.xxx
或者
bind-address = 0.0.0.0
如果您不想指定 IP,请添加
然后使用新的 my.cnf 条目停止并重新启动 MySQL。运行后转到终端并输入以下命令。
lsof -i -P | grep :3306
这应该会在您的 xxx 中返回类似这样的实际 IP
mysqld 1046 mysql 10u IPv4 5203 0t0 TCP xxx.xxx.xxx.xxx:3306 (LISTEN)
如果上述语句正确返回,您将能够接受远程用户。但是,要让远程用户以正确的权限连接,您需要在 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 语句语法。
注意:如果 lsof 没有返回或找不到,您可以根据您的 Linux 发行版在此处安装它。您不需要 lsof 来使事情正常工作,但是当事情没有按预期工作时,它非常方便。
更新:如果即使在添加/更改bind-address
inmy.cnf
之后也不起作用,请在最初声明的位置进行更改:
/etc/mysql/mariadb.conf.d/50-server.cnf