idea 上搭建spring boot连接database mysql不能连接上java.net.ConnectException: Connection timed out: connect.

解决: 1 本地上传驱动

端口3306没有开

我的mysql 的端口没开

linux下mysql开启远程访问权限及防火墙开放3306端口

开启mysql的远程访问权限

默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。

主流的有两种方法,改表法和授权法。

相对而言,改表法比较容易一点,个人也是比较倾向于使用这种方法,因此,这里只贴出改表法

1、登陆mysql

1
mysql -u root -p

2、修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。

1
2
3
4
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select host, user from user;
mysql> flush privileges;

防火墙开放3306端口

1、打开防火墙配置文件

1
vi  /etc/sysconfig/iptables

2、增加下面一行

1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

3、重启防火墙

1
service  iptables restart

注意:增加的开放3306端口的语句一定要在icmp-host-prohibited之前

附:个人配置

复制代码

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

参考:https://www.cnblogs.com/zhoading/p/11491702.html

端口没有 开启

https://www.cnblogs.com/microtiger/p/8279709.html

mysql服务器3306端口不能远程连接的解决

1、网络检测
1)ping主机可以;
2)telnet 主机3306端口不可以;
telnet 主机22端口可以;
说明与本机网络没有关系;

2、端口检测
1)netstat -ntpl |grep 3306
tcp 0 0 :::3306 :::* LISTEN -
2)netstat -ntpl |grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
可以看出22端口监听所有地址,而3306只监听本机地址(绑定了到了本地),所以远程无法访问。修改my.cnf 中bind-address=0.0.0.0
对于端口只允许本机访问,有两个地方启用,一个是防火墙启用3306,一个就是mysql配置绑定本机地址。

3、防火墙检测
1)iptables --list查看;
2)开启防火墙3306端口
vi /etc/sysconfig/iptables
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)
/etc/init.d/iptables restart(重启防火墙使配置生效)
3)或者直接关闭防火墙; 参考:http://blog.csdn.net/fjssharpsword/article/details/50973283
centos 7 以后是修改 firewall
systemctl start firewalld # 启动,

systemctl enable firewalld # 开机启动

systemctl stop firewalld # 关闭

systemctl disable firewalld # 取消开机启动

4、mysql配置文件检查
检查my.cnf的配置,bind-address=addr可以配置绑定ip地址。
不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。
#ps -aux | grep mysql 查看进程ID是3340
#ll /proc/3340 查看进程程序情况,找配置文件
或者#which mysql 找程序路径

5、mysql用户访问权限
进入mysql数据库
$mysql -u root -p
>use mysql;
>select host,user from user;
MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost只能本机访问;
其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问。