要将MySQL暴露给除本地主机以外的任何设备,您需要执行以下步骤:
对于mysql版本5.6及以下
请在/etc/mysql/my.cnf
中取消注释并将其分配给您计算机的IP地址而不是回环地址。
对于mysql版本5.7及以上
请在/etc/mysql/mysql.conf.d/mysqld.cnf
中取消注释并将其分配给您计算机的IP地址而不是回环地址。
bind-address = xxx.xxx.xxx.xxx
如果您不想指定IP地址,则可以添加bind-address = 0.0.0.0
。
然后使用新的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语句此处的语法。如果您完成了所有操作仍然有问题,请发布一些其他错误输出和适当行的 my.cnf。
注意:如果 lsof 没有返回或未找到,可以根据您的Linux发行版此处安装它。您不需要 lsof 来使事情正常工作,但是当事情不像预期那样工作时,它非常方便。
更新:如果即使在更改my.cnf中的bind-address
后仍无效,则请去原始声明位置进行更改:
/etc/mysql/mariadb.conf.d/50-server.cnf