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

用戶名  找回密碼
 立即註冊
快捷導航
  • 我愛av論壇BBS
  • 手機A片
  • 自拍偷拍外流區
  • 貼圖區
  • 52av裸聊室
  • 中文-中國主播
  • ♥️AI榨精淫域♥️

     
查看: 4602|回復: 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').
: F. Q4 w- C7 n) d$ C4 {$ b, [2 Y! E7 z
這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.$ s( r' _4 d* b) \. g: @
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)9 m& W1 I$ r9 p! ~
登入mysql 然後輸入 :
+ h& A7 c, R% T1 c4 @, Tmysql> SHOW VARIABLES LIKE 'old_passwords';
9 r0 W3 p  T  P' U' _8 v* O+------------------+-------+; }1 i  D  x7 `4 a
| Variable_name | Value |% I( A: ^4 n6 b& ^0 B8 O# J
+------------------+-------+. u' y9 `; L: n! F: v* P8 ?2 y
| old_passwords | ON   |* p, [( Y6 C/ {
+------------------+-------+8 l6 L% z9 |2 M( H
1 row in set (0.00 sec)
7 f& M- r4 S0 [) Q  P+ O& Y/ O! _' ?2 ~  U
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart$ Y8 n4 V% W3 H" S. \+ N/ I* K& R
或 在 mysql prompt下輸入:
6 W) a0 e; z/ H) ^* Z: f9 Tmysql> SET old_passwords=FALSE;  
' o3 e; O0 p5 Z0 M9 e3 U檢查mysql.user內 每個密碼長度:: `% x0 K4 @' @$ P9 t9 Y
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;
/ C% c' w" E) H3 A% N3 O, ?& M" h如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
5 M0 F/ g5 V; {# u/ I0 r/ r0 O  e, I9 {) A
再重設原來的密碼:$ m* P9 C) G7 Q" }; A
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了
: J$ {- k& h( }+ c+ |4 Y% Q5 emysql> flush privileges;7 ~1 t( J) |, N5 r) L

( @& Y$ s2 F3 C6 u. G再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼" j, H( T6 n% [9 T9 d. B8 A% o- Y
注意:
8 [! l) x- Y1 o, z  O3 p5 d如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================
! H9 N- v6 d5 V2 S5 ^* N0 V% T$ R當mysql升級到 8.0.21時,php連到mysql出現2行errors:
+ I' Y8 s+ {- [4 t. c  bmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers1 J& J, T; m3 z6 D1 M" {- @' s* t
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
0 r' a# c: a+ X3 a* H/ d7 g原因:
! r# Y$ E0 j+ C3 y
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
5 s% \  a& K  E" U6 L) `4 w- ivi /etc/my.cnf  加入下列:) R" ~; f: i6 N) s
[mysqld]
, U3 t% F7 g; V0 P6 J  [! |
" `! f* L1 {; jcharacter-set-server=utf85 m: A2 a# R: a4 r/ a
default_authentication_plugin=mysql_native_password/ b3 B7 R+ n' F& }3 d9 Z$ T

, i* K3 d- I) x2 S* m[mysql]
; i3 g) \( F+ r1 t. qdefault-character-set=utf89 k1 H- S% J6 X9 A' U- }' }

8 |$ |/ J4 R( L  H& f% P[client]5 l0 u( y; Q1 X& d
default-character-set=utf81 u* z9 u# T; K9 @; v& f

$ t2 K6 S- P+ r7 R9 L2 Q然後重啟mysqld
( N8 K# v# E* C8 @+ qservice mysqld restart
2 n# Z; d4 a8 q搞定!!2 U3 [& f( ]$ D
' J6 ?+ i! g  e  Z) F( e% r

) \% \) j  t) T7 P% m  P) g
回復

舉報

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

本版積分規則
















聚BT福利

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

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

GMT+8, 2025-7-8 22:32 , Processed in 0.069281 second(s), 16 queries .

連絡站長.廣告招商

52avtv@gmail.com | QQ:2405733034     since 2015-01

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