前两天刚买了个新的腾讯云服务器,上一台阿里云服务器是很久以前配置的了,当初配置mysql远程登录就有一些问题,这次果然也碰到了,还是写个blog记录下来,避免以后再踩坑吧。
首先当然是在linux服务器上安装mysql,这个方法有很多种了,可以下载下来上传上去安装等等,我是使用命令行操作的
首先,输入命令wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm,就会下载下来这个文件,然后输入rpm -ivh mysql-community-release-el7-5.noarch.rpm,最后执行yum install mysql mysql-server mysql-devel -y就可以安装完毕了,当当然目前只是完成了安装并没有启动,如果要启动的话Centos7是使用了systemctl命令了,systemctl start(stop/restart) mysql.service,Centos6及以下版本的应该是service命令(没记错的话...),这样安装的mysql配置文件是/etc目录下的my.cnf文件,当然一般是不需要去改动的,但是出了bug或者以后做什么主从复制之类的就要对这个文件进行操作了,和其他服务一样,对配置文件进行了修改要生效都要先重启服务。
启动服务完毕之后,可以使用netstat -anp|grep 3306命令来查看mysql服务是否启动,因为mysql服务是默认3306端口的,也可以使用systemctl status mysql.service查看mysql状态,启动成功之后可以尝试输入命令mysql,这时就会进入到mysql命令行操作,那么这时就说明启动成功了。下一步就是修改密码,默认是没有密码,root用户,那么设置密码就是先退出mysql命令行,然后输入mysql -u root password "你的密码",这时会跳出一行warning,无关紧要,接下来输入mysql你就会发现无法登陆了,必须要mysql -u root -p才能使用密码登录。这就算一个数据库配置完成了。
但是很多时候,部署在服务器上的数据库,我们是要通过本地进行远程连接进行操作的,比如在windows系统上装一个navicat进行操作,但是单纯的和windows上mysql一样去连接,只修改了localhost为远程服务器ip,发现是失败的,这有很多原因,需要一步步修改,下面详细说一下。
1、首先,你要去你的云服务器管理站,阿里云腾讯云等等,去找安全组设置,开放一个3306端口的安全组,至于怎么设置安全组实在是很简单就不提了。如果你不开放一个入方向的3306端口,那么无论在服务器如何配置,你都是没用的,因为他直接拦截了针对这个端口的所有请求。
2、其次,登录进入mysql,然后输入命令use mysql;进入mysql数据库,里面有一个表,存储了主要有host,user,password三个元素,就和名字一样,host表示允许哪些host连接,user表示用户名,password表示密码,你可以使用select语句查看这些,就会发现目前root用户的host只有127.0.0.1和localhost,我们都知道这两个都是本机,所以这就是远程无法连接,出现1045等错误的原因,那么,是不是和网上说的一样,把这个host修改为%,表示通配所有ip的主机,就能让所有主机都能访问呢?
3、像上面那样设置,是可以的,远程就能访问了,但是那样我们会发现。。。回到服务器上,服务器上无法登录到mysql了,这是为什么呢?我查了资料说的原因是设置为%之后它允许所有主机登录,但是就是会排除掉localhost,所以还得重新修改,然后就会发现网上方法很复杂了,就要先去修改my.inf输入skip_grant_tables,关闭认证,然后再去修改user表等等,很复杂。。。。。但是我们发现,其实这些所谓的操作最后都是让mysql的user表里面有两个关键元祖,一个是host是%,一个host是localhost而已,而我们最开始修改完密码之后就有了host是localhost这个元祖了,后面的操作反而会把这里面的localhost修改成了%,导致出现了错误,所以我采用的方法就是给它插入一个元祖,user和password不变,就是host为%,然后flush privileges,最后重启服务,然后远程就能连接到数据库了。
这就是一次服务器安装mysql配置远程访问的经历,希望能够让大家避免踩坑,能够起一些微小的帮助。
参考:https://blog.csdn.net/skywalker_only/article/details/37872833