in header_common.htm --> -->

52AV手機A片王|52AV.ONE

 找回密碼
 立即註冊
快捷導航

請登入會員才有搜尋功能
     
查看: 4147|回復: 0
打印 上一主題 下一主題

[mysql] 解決 php連接mysql指令mysqli_connect()等等的錯誤==>mysqlnd cannot connect to MySQL 4.1

[複製鏈接]
跳轉到指定樓層
樓主
發表於 2018-10-11 12:57:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

當php 5.5以上 遇上 mysql 5.2 時,連接mysql的指令 mysqli_connect() 會產生錯誤mysqli_connect(): mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password').
: s4 {+ u" i0 r9 x
% C7 Y5 S: A# ^+ g這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.
/ Y2 X% V* f8 N1 H! e先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)6 V) h$ r6 p# V+ o
登入mysql 然後輸入 : 0 K! O$ X( v, w3 v" |7 ?  l
mysql> SHOW VARIABLES LIKE 'old_passwords';
* U1 Y, o% B8 `% x4 I9 I+------------------+-------+
' {0 [7 p/ R& p3 d+ ^| Variable_name | Value |" G/ e$ [8 r7 q& |
+------------------+-------+
6 x) i+ N& g7 W' _* ]| old_passwords | ON   |
  D7 T' W3 o5 O+------------------+-------+2 y* w7 F) n8 i7 N4 s
1 row in set (0.00 sec)
) z" v5 `* K! L/ z6 z
$ ^3 z1 r3 B! d2 v# jold_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart
+ `! }' d+ b; g. Q+ a' |0 y5 [2 P  q9 V或 在 mysql prompt下輸入:
* Q8 u; r3 j$ E0 Omysql> SET old_passwords=FALSE;  ! m1 j/ O2 M% @' y
檢查mysql.user內 每個密碼長度:3 M5 q: e  T* [6 A* i/ n
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;
& C& o) p, [) |1 m2 @$ W& e. x如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
/ l; f( l" v* X9 c  @2 j- Z8 S7 ?! {* J% Z5 s3 d* r
再重設原來的密碼:: Q' h9 g1 P/ o
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了$ s$ |5 A  ]# ^6 }
mysql> flush privileges;: [" B& [: u. V% O: x# K. S

3 D$ Q9 ~  v$ H: a再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼: Z! R) S$ T- A/ F1 ~% t% R6 G
注意:
' j8 ]3 m% @6 D: ?# R1 C3 E, V* b" P如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================# o/ {6 D8 b6 _0 Z6 Z' \8 U
當mysql升級到 8.0.21時,php連到mysql出現2行errors:
0 w$ C( D: B# Umysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers4 j6 u5 P* W: F; D
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers5 T0 ?8 A; Q! l
原因:

# [6 b0 z  p$ D. z" G在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:6 F8 Q9 B8 W, N$ W- e$ F; P2 u
vi /etc/my.cnf  加入下列:
8 |2 b2 ^8 G9 P2 @! v8 d[mysqld]* ^7 Q: O* P' l

" O- g" V; b: Icharacter-set-server=utf8* ]% N/ w4 u5 l) b7 Y+ K
default_authentication_plugin=mysql_native_password
: O- W# Z& n* H# s  e, G% d/ }7 ~2 {1 p& l
[mysql]# @' `2 O5 B% |; V
default-character-set=utf84 Q  f2 F9 ]" a3 z# A* r

. t6 _9 w1 P- n. [5 m[client]
& x+ I. `5 t" `( |default-character-set=utf8
) i) ?  M$ K- J" a
$ h( ?; w1 q( }9 p然後重啟mysqld
% X3 t8 r+ J8 j$ E% {service mysqld restart7 p: Q. O2 |+ ^, v, d$ W" n# [% Z
搞定!!+ ~$ y7 n; \3 w5 G9 K  F5 ^$ X3 O

3 B! l8 Y  z4 E" R& x, r5 o2 [; Y0 _# {3 \7 l4 w
-->
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則


-->

聚BT福利

本區塊內容依據『電腦網路內容分級處理辦法』為限制級網站,限定年滿18歲以上或達當地國家法定年齡人士方可進入,且願接受本站各項條款,未滿18歲 謝絕進入瀏覽。為防範未滿18歲之未成年網友瀏覽網路上限制級內容的圖文資訊,建議您可進行網路內容分級組織ICRA分級服務的安裝與設定。 (為還給愛護 本站的網友一個純淨的論壇環境,本站設有管理員)

QQ|小黑屋|手機板|52AV手機A片王

GMT+8, 2025-1-2 17:17 , Processed in 0.080334 second(s), 16 queries .

連絡站長.廣告招商

[email protected] | QQ:2405733034     since 2015-01

裸聊妹 快速回復 返回頂部 返回列表