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

 找回密碼
 立即註冊
查看: 1126|回復: 0

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

[複製鏈接]
發表於 2018-10-11 12:57:07 | 顯示全部樓層 |閱讀模式
tid=90325&當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').7 F/ P7 C7 v" X  I4 v0 s

4 g& e- U) K% n% t1 G1 d這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.3 ?* r+ `# ]. u% O4 g1 o
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)4 z. }  }/ K) C* B
登入mysql 然後輸入 :
  a! c$ N8 ~% h& a# i) }: rmysql> SHOW VARIABLES LIKE 'old_passwords';$ A- b  o! j1 N2 P1 ~
+------------------+-------+
+ R0 C) _" q8 N6 X0 Q7 O; T4 c| Variable_name | Value |
8 C' [% U: T" d8 y  q+------------------+-------++ E$ T0 F# l. S3 Y# Q* A
| old_passwords | ON   |
* A# @! E, u4 Z+------------------+-------+
4 s% A6 j2 C  ~* N1 row in set (0.00 sec)
8 ]9 p& f: U$ M: p) W$ P6 h8 K' |7 g- A
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart: i* u, J! W* G" Q" @; e; l( v
或 在 mysql prompt下輸入:
1 H* ]7 Q9 W+ a- G  }mysql> SET old_passwords=FALSE;  
7 c0 \2 }1 M3 H6 J4 t5 L檢查mysql.user內 每個密碼長度:- e$ Q0 q9 |% j* \# t& S+ z5 }
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;4 A7 e* g. j, r
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
3 n& J# U# a$ Z8 A4 J6 d; L( y0 S7 P5 x; c2 `# `4 \
再重設原來的密碼:/ c4 @  S  n/ H
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了; ]7 ^$ B! S4 d! \' p1 j
mysql> flush privileges;- S- \  S* o, _, u
- V/ Z( }: j% n4 N% p' U
再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼# A5 \* C' W' u4 K" t8 O
注意:
$ d. C, u" o- N! K1 L如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================0 O  G7 Y1 X( m  u) a& K% D. X- z
當mysql升級到 8.0.21時,php連到mysql出現2行errors:9 @' E9 b$ j% V* W
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers/ _  p" b% U1 S' u7 `8 J7 N! T& n
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers6 x0 o& a3 v! f$ d! n$ m& Q
原因:
3 B8 m1 x* M  q" z
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
3 k4 X, P) ]$ w/ bvi /etc/my.cnf  加入下列:
  G/ _  ]8 Z% \/ r3 b! w1 E[mysqld]3 |8 T. p  ]+ t/ }6 I6 J

$ g$ R7 \3 o- G5 ~4 b) g/ G/ Ncharacter-set-server=utf8  v2 A, _3 M4 H. m) D3 a
default_authentication_plugin=mysql_native_password
' ?% V% m& J4 M+ f
! N  H' f7 R$ K[mysql]
% U) ]0 k4 w) ^" k% h7 O/ O$ jdefault-character-set=utf8, O9 ~$ G: {" K3 ?- N1 ~* r
9 m* C( r/ U: W# ?$ Z! a7 x
[client]
5 `+ S  a  U+ r2 `; t6 Gdefault-character-set=utf8
0 D+ q1 Q: A5 J' B  S
* w  O9 n+ F1 ^: |$ O& x1 s然後重啟mysqld
8 f4 c0 l7 m( r: h( Kservice mysqld restart
" A) X- E& V7 s% n/ Z4 p7 c+ k9 @搞定!!
7 E; w4 o$ ^. ?

! ], N1 q2 x) C' u3 H& \. c% a0 l! D2 t4 R+ k+ J+ R) q3 @
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 22:21 , Processed in 0.060666 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表