PS:今天在学习Ubuntu环境下如何配置java环境,就想在linux环境下跑一下我的java project.看看跟在windows下有什么不一样。顺便熟悉一下linux的操作。谁知道在mysql的配置中就出现了一个拦路虎。。还耗费我挺长的时间。
首先我说一下遇到的是什么问题。
本地环境是windows 10 专业版,服务器环境是阿里云Ubuntu16.04.
当我在ubuntu通过apt-get 安装好mysql之后,并且确认mysql服务和3360端口开启的情况下。本地通过mysql-front 和mysql workbrench 都无法远程连接数据库。都是can not connect to mysql server on {远程服务器ip} (10061)
很无解啊,所以我只能先找一下百度爸爸啦。看上去很有效果。参考如下:
远程连接Ubuntu14.04上的Mysql数据库--程序员小熊
Ubuntu安装mysql及设置远程访问方法--若风之殇
LINUX(UBUNTU) 搭建JAVA程序运行环境--喝着啤酒写着bug
每个博客的内容都大致相似,也有些不同,所以我在这里总结一下大致的步骤,将不同的地方修正一下,方便理解
Summary:
1、首先我们要确保mysql安装成功,并且确认服务端的mysql服务和3306端口开启。所以我们可以服务器终端输入命令行netstat -tap|grep mysql;netstat -an|grep 3306 去查看服务和端口是否开启监听,如果是Listen则表示成功监听。
2、因为我是使用apt-get来安装mysql的,所以Mysql一般就是默认安装在/etc/mysql的路径下。在/(根路径)下我们输入vi /etc/mysql/mysql.conf.d/mysqld.cnf,找到address=127.0.0.1这一段文本,将它注释掉或则将它改成address =0.0.0.0。这些方法目的是允许其他的主机可以访问服务,而不仅仅是127.0.0.1(localhost).
因为多个博客的要修改的文件有些不同,所以如果你不清楚的话,可以通过输入命令行cd /etc/mysql;grep -R address * 来到mysql路径下寻找含有address字符串的文件的路径。这样我们就知道改修改那个文件了
修改完后,我们保存,重启服务。输入命令行/etc/init.d/mysql restart 等待重启ok
3、重启成功之后,我们就进入mysql。输入命令行 mysql -u root -p,再输入密码(root是你的mysql用户名),回车,进入Mysql。
然后我们执行以下的语句:
GRANT ALL PRIVILEGES ON *.* TO 'yourUsername'@'%'IDENTIFIED BY 'yourPassword' WITH GRANT OPTION;
或者
GRANT ALL PRIVILEGES ON *.* TO 'yourUsername'@'192.168.20.3'IDENTIFIED BY 'yourPassword' WITH GRANT OPTION;
第一句命令是允许所有主机可以通过你的mysql这个红色字体账户和密码登录,%代表所有的主机,等于随意的意思
第二句命令是只允许ip为192.168.20.3的主机登录,你可以看情况使用。但千万要更改红色字体对于的你的部分。
我的账号和密码都是root,所以我的语句就是:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;
执行之后,再输入一个刷新PRIVILEGES的命令 (记得mysql都是需要用;来分隔语句的,别忘记了)
FLUSH PRIVILEGES;
我们可以使用以下命令,use mysql,首先进入mysql的mysql数据库,输入select user,host from user where user='root'; (红色字体是你的用户名)。然后根据提示show grants for 'root'@'%'; 就可以看到授权了
然后我们这个步骤就完成了。正常来说就可以在本地远程连接ubuntu上的MySQL啦。
End of Summary
前面都说的是正常的情况,所以我的就是不正常情况啦。。因为开始我也不知道是什么问题,我就一遍遍的测试,Mysql没安装好?服务没开启?使用的不是3306端口?账号密码错了?授权没成功?权限没刷新?这些问题我都一个个去验证了。但是问题还是没有解决。
就在我准备放弃的时候,我突然在一个博客下面看到这么一句话
当然这里说的是aws服务器,我的是阿里云服务器,但这一语就点醒梦中人,才想起来阿里云服务器有一个安全策略配置,估计是那里没有配置开放3306这个端口。于是我就登录阿里后台管理。
因为我的是轻量级服务器,看到服务器安全设置(如果是云服务ECS的话,应该是在安全组配置里设置)。点击里面的防火墙的‘’4‘’
果然,只开放了80,443,22三个端口,这里我们就添加一条规则,自定义->TCP->3306,如下图
保存。重启服务器
"duang"的一下,神奇的效果~
连接上了!!!
连接上了!!!!!!
连接上了!!!!!!!!!
重要的事情说三遍....
事后其实..我发现我曾经在同样的坑栽过一次,就是当时是我在同样是阿里云的服务器(windows)上配置了tomcat,搭上了我的java程序。但是无论如何在我的本地无法连接上阿里云的公网ip。当时也是这么的谷歌,百度啊,很无奈。最后发现是阿里云服务器没有配置开放80还是8080端口来着。。当时忘记写个博客记录一下,所以现在....这篇博客就出现了,希望能给同样遇到这个问题所困扰的同学带来解决的方法。
嗯..好吧,大概就这样了..
Thank all
欢迎关注我的博客~~~~~~