in header_common.htm --> -->

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

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

     
查看: 4141|回復: 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').
# n$ F* I9 }4 }1 V# r& _* G  l
7 o' U( a8 ~' K# ^這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.) T5 k- d6 D8 a+ x
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)
* w# `9 N; O6 Y. ~  S% v登入mysql 然後輸入 : * ?" J# F8 B5 U/ \* B
mysql> SHOW VARIABLES LIKE 'old_passwords';2 M; t; l& U' Z; h; X# z! X/ X/ S. Q/ ~
+------------------+-------+9 J9 R# L* f$ Z* B8 m+ J& {" E# k
| Variable_name | Value |3 Q$ _7 Q3 P6 M' \; S6 i: D" h
+------------------+-------+) D* e+ U/ o' \! o, q
| old_passwords | ON   |
5 Y; l5 q  Q+ h, W+------------------+-------+; G. X1 K" O& h% g$ L
1 row in set (0.00 sec)9 `9 D3 ^! Z7 C! Y! x1 z% _* s
' L2 G! @/ d$ {* ~8 g9 A# k% Q9 H
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart
5 v0 R* w+ u# z" q" t或 在 mysql prompt下輸入:
. l4 g, Y, K; T1 o' \1 g. I2 ^mysql> SET old_passwords=FALSE;    I% M; }4 @, p+ V
檢查mysql.user內 每個密碼長度:% H) d% V8 z" S) y+ P( w
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;/ b  j4 Y- c$ z' X, J4 H; H
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
( p% Q' y. m3 r( ^- l1 e2 ]1 \4 T* s$ _
再重設原來的密碼:
+ q0 ?; A! l3 ]2 S! d4 xmysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了/ g" F3 \9 M0 H' Y# p
mysql> flush privileges;
3 u9 R6 a# o7 E
$ u% D5 z# `0 A, K0 V8 a9 v再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼3 H( z' M8 g. U" p5 x8 F
注意:
% r  L3 |) v& O2 r  z" [0 S; O如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================
5 Y7 O9 u6 r8 i: Q$ Z  G  Q7 O當mysql升級到 8.0.21時,php連到mysql出現2行errors:
4 [9 \+ s$ ?5 K9 I- nmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
4 Y1 G' ~4 B" K3 f9 smysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
, }+ U4 @* a$ Q+ v6 G& L原因:

: U* M# y; a$ G0 ~( t8 }8 V4 m在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
4 y& F. m9 t1 G  Y1 b1 dvi /etc/my.cnf  加入下列:
; o; @5 T( l- B2 N6 u: x[mysqld], ^9 b' L" i1 t% Y9 C
  v; {* p' O; }4 z9 y6 p
character-set-server=utf8
+ O9 L6 x! r: I! Ndefault_authentication_plugin=mysql_native_password
  O4 {0 L1 g- N! Q
$ n" G" h" S! v( }- {" T[mysql]
1 G6 }, u; ]1 s+ L. b4 ydefault-character-set=utf8
  |! i: t" x, R& c9 r* m6 `
' j% m, T# |; `[client]
2 E, s/ ^) P( `, G# X; X6 j) t) Udefault-character-set=utf8+ V% |: H% D6 j9 ^% [

" h( x) f; i4 T然後重啟mysqld
3 X! ?0 S+ h. ^% X! Lservice mysqld restart
% U$ Z9 t( {, g6 B# ]5 L搞定!!
4 \+ O! Q5 {. m: B

$ K3 P% q8 s/ n$ \- H- e- |3 N, H) @. L4 A$ ]# N* ]2 Q5 D7 J
-->
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則


-->

聚BT福利

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

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

GMT+8, 2024-12-29 16:48 , Processed in 0.070350 second(s), 16 queries .

連絡站長.廣告招商

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

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