1. 程式人生 > >mysql8.0遠端連線許可權設定和專案連線mysql時報caching_sha2_password錯誤

mysql8.0遠端連線許可權設定和專案連線mysql時報caching_sha2_password錯誤

1.登入MySQL

mysql -u root -p

輸入您的密碼

2.選擇 mysql 資料庫

use mysql;

因為 mysql 資料庫中儲存了使用者資訊的 user 表。

3.在 mysql 資料庫的 user 表中檢視當前 root 使用者的相關資訊

select host, user, authentication_string, plugin from user; 

執行完上面的命令後會顯示一個表格

查看錶格中 root 使用者的 host,預設應該顯示的 localhost,只支援本地訪問,不允許遠端訪問。

我們看host和user兩列,host和user中root對應的值為localhost,即root使用者的訪問許可權為localhost,想把該使用者的訪問許可權設定可遠端連線,我們只需要把localhost更改為通配的%就可以了。上面的許可權操作語句沒有走通,這裡就直接使用update語句來更改吧。

update user set host = "%" where user = "root";

修改之後就將root使用者的訪問許可權設定成了可遠端訪問了。

FLUSH PRIVILEGES;

systemctl start firewalld # 開啟防火牆
systemctl stop firewalld  # 關閉防火牆
systemctl status firewalld  #檢查防火牆狀態

一般需要關閉防火牆才能連線。關閉遠端伺服器防火牆後,可以連線了

如果你覺得關閉防火牆不安全,可開啟遠端伺服器的iptables(安裝或升級命令“yum install iptables”)(我用root使用者登入的),並用“vi /etc/sysconfig/iptables”檢查3306埠是否開啟,如沒有,在檔案中加入“-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT”(如下所示),儲存檔案並用“service iptables restart”命令重啟iptables

 

專案連線mysql時報caching_sha2_password錯誤

重點看caching_sha2_password這個,由於我安裝的mysql是8.0的版本,

mysql8.0和5.x其中一個改動就是加密認證方式發生改變,

caching_sha2_password是8.0
mysql_native_password是5.x

解決方案有兩個:

1,更改mysql的加密認證方式,更改方法請參考:https://blog.csdn.net/h996666/article/details/80921913

2,更改mysql的jdbc版本,直接在xx.pom修改版本號即可。

mysql jdbc的maven連結:http://mvnrepository.com/artifact/mysql/mysql-connector-java

8.0.x之後的應該都是可以的

我選擇了第2個方案,第一個方案沒試過。
 

我繼續跑專案又遇到:

Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

原因:

同一個ip在短時間內產生太多(超過mysql資料庫max_connection_errors的最大值)中斷的資料庫連線而導致的阻塞;

解決方法:

解決方法:
   1、提高允許的max_connection_errors數量:
  ① 進入Mysql資料庫檢視max_connection_errors: show variables like '%max_connect_errors%'; 
    ② 修改max_connection_errors的數量為1000: set global max_connect_errors = 1000; 
  ③ 檢視是否修改成功:show variables like '%max_connect_errors%'; 

   2、使用mysqladmin flush-hosts 命令清理一下hosts檔案(不知道mysqladmin在哪個目錄下可以使用命令查詢:whereis mysqladmin);
  ① 在查詢到的目錄下使用命令修改:mysqladmin --socket=/tmp/kkimdb.sock --port=3306 -uhyman -p flush-hosts
  備註: 配置有master/slave主從資料庫的要把主庫和從庫都修改一遍的(我就吃了這個虧明明很容易的幾條命令結果折騰了大半天); 
      mysql> flush hosts; 也可以
      max_connect_errors是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。max_connect_errors的值與效能並無太大關係。
      預設情況下,my.cnf檔案中可能沒有此行,如果需要設定此數值,手動新增即可。
[[email protected] ~]# vi /etc/my.cnf
max_connect_errors = 1000
      配置說明
      當此值設定為10時,意味著如果某一客戶端嘗試連線此MySQL伺服器,但是失敗(如密碼錯誤等等)10次,則MySQL會無條件強制阻止此客戶端連線。
如果希望重置此計數器的值,則必須重啟MySQL伺服器或者執行 mysql> flush hosts; 命令。 
      當這一客戶端成功連線一次MySQL伺服器後,針對此客戶端的max_connect_errors會清零。
影響與錯誤形式
     如果max_connect_errors的設定過小,則網頁可能提示無法連線資料庫伺服器;
而通過SSH的mysql命令連線資料庫,則會返回 ERROR 1129 (00000): Host 'gateway' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 錯誤。 
     功能與作用
     一般來說建議資料庫伺服器不監聽來自網路的連線,僅僅通過sock連線,這樣可以防止絕大多數針對mysql的攻擊;如果必須要開啟mysql的網路連線,則最好設定此值,以防止窮舉密碼的攻擊手段。