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

 找回密碼
 立即註冊
快捷導航
  • 我愛av論壇BBS
  • 手機A片
  • 自拍偷拍外流區
  • 貼圖區
  • 52av裸聊室
  • 中文-中國主播
Yahoo!奇摩搜尋
熱搜: av4u論壇
Google搜尋
熱搜: av4u論壇
     
查看: 5280|回復: 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').$ P* ?7 g7 q  |( X) R! W
8 N# Y% k& b7 ~, I7 b4 ?. w
這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.6 t# x  B6 P# {' e2 Q
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)# c- }' l9 ?. U/ U
登入mysql 然後輸入 : 1 P9 c% J. e' K+ {
mysql> SHOW VARIABLES LIKE 'old_passwords';
7 {" f+ D( d5 k; T; I8 B7 T+------------------+-------+
8 i$ b- }: c% G| Variable_name | Value |
5 ]- n4 l! k0 \4 r* T% u+------------------+-------+
! D! W7 `/ L5 T| old_passwords | ON   |1 u# f* {5 s/ Y- p- B
+------------------+-------+
3 a, [" b. I  G5 r# w3 D# x- m1 row in set (0.00 sec)% p1 {! O1 V+ K

/ S# i# P5 d1 e/ n# @4 o* Oold_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart9 B% z3 m/ q4 S- G
或 在 mysql prompt下輸入:
% `" ^8 I2 D" q2 r6 Qmysql> SET old_passwords=FALSE;  
+ x2 F: }7 W: y( l& W檢查mysql.user內 每個密碼長度:
; M6 T3 z3 s; e) Z3 h& E2 g6 lmysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;% _) V( X1 d" g- u& N
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼) ' Y% I/ G, p& J3 }8 G" F+ y2 r
- M0 V2 s7 l+ t/ m. C
再重設原來的密碼:; l4 Y+ G9 u3 s7 y' O
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了' r9 G+ U) v& h  }2 l6 ]  ?
mysql> flush privileges;
3 ^# _! @) f9 u1 q/ I2 f$ w# w) b+ m5 B/ z! x4 J
再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼
# H  }6 b6 f; Q! V注意:
; m4 [% ]  N$ Z# I如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================1 l7 f0 y0 r) y; U
當mysql升級到 8.0.21時,php連到mysql出現2行errors:2 z7 }4 {/ E: o7 i; x
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers  O( ?/ o1 R  @, S, U
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
6 Z- ]- S: r. p( W3 w: c+ T原因:

1 |/ _5 X7 i5 C! J  Z( Z. A5 M在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:. t+ Q. X! J6 F' @( _- ^! u
vi /etc/my.cnf  加入下列:
7 T8 Z/ F4 R/ [/ a1 m, @[mysqld]
- _6 I) u% A0 N8 o: t8 n8 \
8 B4 W( ^( t  c  w( F) q0 rcharacter-set-server=utf8# \; N) N5 ]3 T0 C5 Z
default_authentication_plugin=mysql_native_password
9 t$ T7 j& |( M, L5 S3 k
6 K  C$ }& w/ t2 f' f[mysql]3 D: u6 V0 r0 r' ?# J6 m
default-character-set=utf8
* O" O, n! {) n5 E4 ?  U
' z: u* m2 |6 G8 I[client]
! u- }9 Q8 t- H0 S# Jdefault-character-set=utf8
9 o# O+ v/ Y' }4 G4 T0 b) e* r  ?" q, s' o
然後重啟mysqld) e5 H! G) Q. Z9 t$ @4 G
service mysqld restart% b2 ]) k5 a4 ^& C! x8 y' t8 U5 n
搞定!!- Z( O0 U3 \1 E1 \7 k

# L& L" b+ m( s. n2 _  f$ W# S! X9 s, U. l8 L
回復

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2026-5-21 07:25 , Processed in 0.007997 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

連絡站長.廣告招商

[email protected] | Telegram:@asa00061     since 2015-01

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