一、問題現狀描述
報錯結果如下:
[08S01] 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.
java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
使用Navicat等工具可以連接成功
1. 使用命令窗口可以連接成功
2. 服務端已設置用戶可以遠程訪問
二、問題排查
MySQL 5.7除了配置服務端配置,還要配置my.cnf文件。
1)/etc//my.conf
2)E:\PATS\Tools\mysql-5.7.34-winx64\my.ini
即一般linux 上都放在 /etc/my.cnf ,window 上安裝都是默認可能按照上面的路徑還是沒找到,Windows上可以登錄到mysql中 使用 show variables like '%data%' 先找到data存放路徑,一般my.ini 在 data文件的上一級。
2.1 Linux系統配置
# my.cnf中有選項bind-address=127.0.0.1,是說mysql server監聽的是本地發來的請求
#如果是任意主機都可以請求,則寫為0.0.0.0,但是這樣又不太安全。
# 監聽某ip,指定此ip地址即可,但是要保證mysql的user中有允許此ip訪問,否則不能對數據庫操作
bind-address=0.0.0.0
這樣配置可實現遠程訪問,並且IDEA也可直接訪問
2.2 Window系統配置
bind-address=127.0.0.1注釋掉,默認就是bind-address=0.0.0.0
my.cnf中有選項bind-address=127.0.0.1,是說mysql server監聽的是本地發來的請求,如果是任意主機都可以請求,則寫為0.0.0.0,但是這樣又不太安全。監聽某ip,指定此ip地址即可,但是要保證mysql的user中有允許此ip訪問,否則不能對數據庫操作。那么是否可以在配置里只規定幾個ip呢?
簡單直接回答:不可能(
[mysqld]
# 設置3306端口
port=3306
# 設置mysql的安裝目錄
basedir=E:\PATS\Tools\mysql-5.7.34-winx64\mydata
# 設置mysql數據庫的數據的存放目錄
datadir=E:\PATS\Tools\mysql-5.7.34-winx64\mydata\data
## 允許最大連接數
max_connections=1000
## 允許連接失敗的次數。
max_connect_errors=100
## 服務端使用的字符集默認為utf8mb4
character-set-server=utf8mb4
## 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
## 默認使用“mysql_native_password”插件認證
##mysql_native_password
#default_authentication_plugin=mysql_native_password
##sql_mode設置
##查詢 select @@sql_mode,去除ONLY_FULL_GROUP_BY
sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#注釋掉允許任意遠程連接
# 放開注釋:
# bind-address=127.0.0.1 本地連接
# bind-address=xxx.xxx.xxx.xxx 指定IP連接
bind-address=127.0.0.1
[mysql]
## 設置mysql客戶端默認字符集
default-character-set=utf8mb4
[client]
## 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8mb4
2.3 bind-address本地設置
bind-address設置為127.0.0.1本地連接后,IDEA就可以正常啟動maven項目,database插件也可正常連接MySQL