昨天,在服务器上下载了一个MySQL,新建了允许远程登录的用户和允许其操作的一个数据库,库里也建立了和后端Mapper对应的数据结构,但是结果发现实际上访问不到。最后找了1个多小时的错,发现是服务器的IP写错了ᵕ᷄≀ ̠ᵕ᷅ 。
下面记录一下如何在Ubuntu服务器上下载MySQL
一、在服务器/#:根目录下
执行sudo apt-get update
这个命令是为了更新一下apt,我看有些地方用的命令是sudo apt update,反正能更新即可。
二、下载
然后就是直接下载。同样在根目录下执行
sudo apt-get install mysql-server
这里多说一下,为什么要在根目录下呢?因为我就在根目录下执行的没问题。那别的目录行不行呢?我也不清楚,反正根目录下是可以的。
这一个命令就是下载MySQL。
至于会下载到哪里,就是默认的几个路径,其实也不用管,之后需要用到相关文件,网上一查就知道在哪里了。
下载完成之后,我的MySQL就自动开了。可以运行下面命令查看MySQL是否开了。
sudo apt-get install mysql-server
如果看到active(running),就说明打开了。如果没打开,可以运行下面的命令
sudo service mysql start
三、新建用户
首先需要说一下,当我们第二步下载完成MySQL之后,运行(这步就是为了看一下而已,不运行也行)
sudo mysql
是可以直接打开mysql控制台的,无需密码,默认直接进入root用户(而且这个root用户默认也是只能从本地进入,也就是只能从当前这个服务器登录进去)。
下面的命令可以查看当前有哪些用户(当然你不看也行)
SELECT user,authentication_string,plugin,host FROM mysql.user;
但是我们不能让别人直接远程登录root用户,随意操作整个数据库。
所以,我们一般会新建一个用户,来赋给这个用户一些权限。
下面命令会新建一个用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
注意这个命令千万不要直接复制过去用,这只是个模板。
username是用户名字,password是密码,localhost代表这个只能只能本地登录,如果把loaclhost写成%就代表可以远程用这个用户登录。
比如,我想要新建一个用户名字叫user1,密码是123,只能从本地登录,那么就用
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123';
再举个例子,新建一个用户名字叫user2,密码是4456,允许远程登陆。
CREATE USER 'user2'@'%' IDENTIFIED BY '4456‘;
注意单引号不要丢。
最后,可以使用这个命令查看新建的用户
SELECT user,authentication_string,plugin,host FROM mysql.user;
四、授权
我们新建了一个用户,但是这个用户目前没有任何的权限。
我们需要给他授权,在此仅是简单的授权,说白了就是只允许这个用户操作某一个数据库,给他操作这个数据库的所有权限,不再细分只允许读不允许写这种的。
假设你已经有了数据库,叫做DB1(这里就不赘述如何建数据库,如何建表等)
GRANT ALL PRIVILEGES ON DB1.* TO 'user1'@'%';
这个命令的意思是授权DB1数据库的所有操作给用户user1,这个用户是允许远程登录的。(用的是%)
五、修改MySQL配置文件
我们只是新建并授权了一个用户,但是MySQL这个整体的大的一个服务还没有进行配置。说白了就是你现在可能都找不到这个服务,也就是这个进程,或者这个进程不允许你访问。
也就是说,这一步的操作是进程服务层面的,是能不能找到MySQL服务的问题。之前的是找到数据库之后内部授权的问题。
我的配置文件路径如下,运行下面命令
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
用vim(类似Windows的记事本)打开这个文件。
如果你的文件不在这个路径可以去网上搜一下在哪。或者查找文件名mysqld.cnf。
进入这个文件之后,把
bind-address = 127.0.0.1
修改为
bind-address = 0.0.0.0
有些地方说注释掉就行,应该也行。但是这样更保险一点。这样设置的意思是监听所有的IP来源。
然后同样实在这个文件中,建议把port也打开。
添加,或者去掉注释
port = 3306
总之就是这个配置文件里面要有这么一行,意思就是这个服务运行在3306端口。当然如果不配置理论上默认也是3306,配置了还是更保险吧。如果你想修改MySQL服务的运行端口,就可以在这里改。
这里多说一下,一定要记得把你的服务器安全组也就是防火墙的3306端口(就是上面的port)打开,要不然在服务器层面就不允许访问这个端口。
六、重启MySQL服务
同样是在服务器的根目录下,运行下面的命令重启MySQL
sudo service mysql restart
这样服务器的部分就配置完成了。
七、本地远程连接
其实这部分要看你的后端的框架了,我用的是Spring Cloud中的MyBatis。
直接在当前项目的application.properties文件下,添加
spring.datasource.url=jdbc:mysql://服务器IP:3306/你的数据库?allowPublicKeyRetrieval=true&useSSL=false spring.datasource.username=你在服务器新建的用户名 spring.datasource.password=密码 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5
当然pom中的依赖就不多说了,可以自行上网去搜(这块就看个人的后端代码了)
最后多说一点吧,上面的allowPublicKeyRetrieval=true&useSSL=false是因为我本地的密码认证方式和服务器上的不太一样所以加的设置,可以根据个人的情况看需不需要加。
八、最后
最后,在上述步骤之后,我的仍未连接成功数据库,找了1个多小时的bug,结果发现spring.datasource.url=jdbc:mysql://服务器IP:3306/你的数据库?allowPublicKeyRetrieval=true&useSSL=false
就是这一行的服务器IP写错了。。。。。。。