数据库连接:

springboot连接远程服务器的步骤,首先要进行配置:
1、在pom文件中添加依赖

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

2、配置application.propertites

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://your_ip:your_port/your_db_name?useUnicode=true&useSSL=false&serverTimezone=GMT&characterEncoding=UTF-8
spring.datasource.username=你的用户名
spring.datasource.password=这里是你的密码
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

服务端数据库权限:

1、登陆数据库:
首先要进入到mysql>:

mysql -u root -p

若提示Access Denied:…(use PASSWORD:YES/NO)这样的错误,要么就是第一次登录可以不需要输入密码,直接enter即可,然后可以去修改密码。要么就是需要密码登录,但是密码错误或者没有输入。

还有一种情况,可能就是修改user表导致的bug,如遇到这个bug可以这样解决:
步骤如下:注意针对版本不同,密码列为authentication_string或者password

首先,停止服务

systemctl stop mysql

然后进入安全模式

 mysqld_safe --skip-grant-tables --skip-networking&

最后mysql进入到mysql即可进行修改密码,别忘记刷新权限表

update user set authentication_string=PASSWORD('你的密码') where user='root';
flush privileges;

2、允许其他ip访问数据库:
输入如下语句:

GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' IDENTIFIED BY '访问的密码';

可以通过查表得方式查看是否已有权限:
先进入到mysql数据库

use mysql;

查询user表

select host,user from user where user = 'root'

若其中包含host为%,且user为root,则权限修改成功,同时别忘了刷新权限表哦。

服务端端口:

1、保证服务器开启了3306端口:
以腾讯云为例,在防火墙中添加规则,并允许所有人访问即可,添加后应该如下图所示:
在这里插入图片描述
正常来说,此时运行springboot项目应该就可以连接到数据库了。但是我就遇到了这样一个问题,项目运行报错,日志如下:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
//后面报错省略...

2、出现这个问题我也是百思不得其解,后来我尝试在服务器上运行我的项目,发现数据库连接并没有报错。这说明问题一定是出在了防火墙、端口上面。
尝试关闭防火墙:

systemctl  stop   firewalld.service

发现连接成功…额。明明是开放了3306端口,为啥还是拦截了我的访问呢。
出于安全考虑,先打开防火墙:

systemctl  start   firewalld.service

查看防火墙状态:

firewall -cmd   --state

在这里插入图片描述
然后我就发现,确实没有添加上去,端口号并不包含3306。

3、问题解决:
去宝塔页面将端口加在了系统防火墙中,也可以通过其他方式,只要添加进入就行。
原因大概就是这个样子,其实安全组的防火墙和系统防火墙并不等价。但是大多数情况下,安全组里面开放的端口,系统防火墙会一同添加上。若出现这种坑的情况,可以自行添加。
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐