Linux下配置Mysql远程访问

前言

最近突然闲下来,打算重新开通自己的博客,找了好多服务器提供商,最终还是决定用一下阿里云,毕竟新用户免费赠送半年啊,良心商家啊。

花了两天时间,用wordpress搭建了一个简单的博客,突然想到要操作数据库,做各种备份什么的(ps:被wordpress坑怕了),用mysql_cli还是诸多不便,于是便想通过远程访问,可以用navicat等工具。

好了,废话少说,进入正题吧~

问题描述

总所周知,mysql之所以不能远程访问,主要在于以下两点:

1、服务器上mysql没有授权
2、3306端口被禁用

解决办法

因此,只要我们打开服务器的3306端口,并且对mysql授权用户,就可以远程访问啦。。

首先,我们来检测服务器是否开放了3306端口,可以通过以下命令进行检测:
[cc lang="bash"]telnet IP 3306[/cc]
一般情况下都是没有开放的,会出现以下提示:
[cc lang="bash"]Trying IP...
telnet: connect to address IP: Connection refused
telnet: Unable to connect to remote host[/cc]

这时候有两个原因:

1、mysql配置里绑定了监听地址,且不是你的IP地址;
2、被防火墙屏蔽了

对于原因1,我们需要登录到服务器上,修改/etc/mysql/my.cnf文件(注:每个人的文件地址可能有些许不同),将 bind-address = 127.0.0.1注释掉或者直接改成0.0.0.0,然后执行:

[cc lang="bash"]netstat -an |grep 3306[/cc]

如果出现:
[cc lang="bash"]tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN[/cc]

则原因1已解决,再次执行telnet命令还是失败的话,应该就是防火墙的原因了,这时候通过
[cc lang="bash"]sudo ufw status[/cc]

查看防火墙状态,如果显示Status: inactive则不用理会,否则执行:
[cc lang="bash"]sudo ufw disable[/cc]

来关闭防火墙,还有一些服务器商是需要到控制台去配置的,阿里云就需要到控制台去配置安全组。

至此,再执行telnet应该就可以了,这时候一般还是不能远程访问,还需要登录mysql进行授权操作
[cc lang="bash"]mysql -uroot -p[/cc]

进入mysql终端后,分别执行命令:

[cc lang="mysql"]> grant all privileges on *.* to root@"%" identified by "xxxx" with grant option;
> flush privileges;[/cc]

第一句大概意思就是说允许任何地址通过root 账号、密码访问所有数据库的所有表并具有所有的操作权限,第二句是让命令立即生效;

好了,做到这儿,再试着打开navicat等工具进行连接,ok,成功实现mysql的远程访问。

  1. Unknown Unknown

    Hi, this is a comment.
    To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
    Commenter avatars come from Gravatar.

Leave a Reply

Your email address will not be published. Required fields are marked *