安装MysqL数据库后一般会遇到远程计算机不能连接的问题,具体问题需要我们排查。
可能一:MysqL数据库是否提供了外部访问的用户以及权限?
可能二:MysqL的配置文件是否只绑定了本机ip(ubuntu下:/etc/MysqL/MysqL.conf.d/MysqLd.cnf)?
可能三:操作系统的防火墙不允许外部访问3306端口
本文实例发生的环境是ubuntu16.04,MysqL5.7。
排查一:在安装了MysqL数据库的计算机上,
命令行进入MysqL:MysqL -u root -p
并输入用户root的密码:
执行语句:select user,host from user;
如果是上述结果,则说明没有设定外部访问的用户,接下来我们给root用户赋予外部访问的权限,执行2条语句:
grant all privileges on *.* to 'root'@'192.168.3.%' identified by 'password' with grant option;
flush privileges;
注意password是你给root设定的密码,注意拼写,一切ok后再次查看user表内的内容
红框里的那条记录就是刚才我们用grant命令添加的,它的意思是局域网内192.168.3.0-192.68.3.255的ip主机都可以通过用户root和密码password来访问。
这里解释一下grant语句格式
MysqL> grant 权限1,权限2,…权限n on 数据库名.表名 to 用户名@用户地址 identified by ‘用户密码’ with grant option;
权限1,…代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等权限。
如果是all privileges或者all,表示赋予用户全部权限。
如果数据库名.表名被*.*代替,表示赋予该用户可以操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址。
‘用户密码’必须提供。
最后的 with grant option 表示权限传递,意思是允许该用户将其权限分配给其他人。
以上所有操作也可在图形界面完成,如果你的ubuntu上安装了MysqL Workbench会很方便:
排查二:配置文件是否只绑定了本机ip,使用gedit文本编辑器打开MysqL的配置文件,把bind-address = 127.0.0.0这行注释掉(句首加上#),当然,也可以绑定你所需的主机,ubuntu终端执行:sudo gedit /etc/MysqL/MysqL.conf.d/MysqLd.cnf
保存退出,ubuntu终端执行:service MysqL restart,或者手动重启MysqL,或者重启系统。
另外,重启之后你可以使用 netstat -an|grep 3306 命令来查看端口情况:
红框内是注释掉bind-address后才有的,未注释前没有。
排查三:关于操作系统的防火墙不允许外部访问3306端口,请根据操作系统自行排查。END.