in header_common.htm --> -->

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

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

Yahoo!奇摩搜尋
熱搜: 手機A片
Google奇摩搜尋
熱搜: 手機A片
     
查看: 3377|回復: 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').3 |7 N6 x0 H( t3 z% ^8 g9 J/ ~& x

& t5 R7 @$ _: |這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.& k; ?1 a; m+ p) M7 d( k
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73): d) C7 K5 N/ c; N- v* d
登入mysql 然後輸入 : # {1 E5 J( T" _  p, O# Z7 ]
mysql> SHOW VARIABLES LIKE 'old_passwords';
/ C! a7 `& U' w8 b+------------------+-------+
- e1 ~, h% ?1 ]" S* x) ?4 V| Variable_name | Value |& _: l, t, H: h; K' _- F
+------------------+-------+
6 a2 N# J, L6 W, j, O+ v) R; Q| old_passwords | ON   |* M7 A) q) W) Q+ F) _
+------------------+-------+
; c+ S. s7 o# C; i4 ~1 row in set (0.00 sec)$ N' y+ t/ ~' T. z

) j# l$ `+ w! B/ `! \# f3 Q! lold_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart% t: V  \9 p3 D# x+ ~7 {
或 在 mysql prompt下輸入:
" d1 S# x1 n/ T# G. pmysql> SET old_passwords=FALSE;  + D$ H; b2 X' n; R5 a
檢查mysql.user內 每個密碼長度:
0 ^1 v/ |9 c0 U! P0 ~" I8 Wmysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;
& K" u+ Z8 C, r, p$ |如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
% g2 O9 t6 q7 g% m
2 D& Y2 j& w/ Q( M( q9 r; f9 q" K4 K再重設原來的密碼:' A5 Q2 W! a2 M% l( H  X* }) r0 i
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了
9 W6 e. ~, Y5 P! Mmysql> flush privileges;
. z0 _% k" p7 x$ o
0 F3 `  H: K- F. E- H) v再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼
0 k# d4 A* H/ R; l' s- ~5 ^3 y" Q注意:8 M1 O5 V& b( G7 E* H3 ?' x
如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================& Y' y& g. E+ {6 V2 B0 p. W
當mysql升級到 8.0.21時,php連到mysql出現2行errors:% V) j: v3 y% B- U/ l: h0 Z7 r
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
  e6 K. v: e) I; r' H3 Tmysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
7 D$ i5 z, A+ X) e# h3 `6 Q+ W原因:

% H3 u- k3 l  I4 C/ I5 k- ~5 t在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
8 ]& j3 z) o+ Y' }! @' A& avi /etc/my.cnf  加入下列:; h# Q  h: M  i. {  H6 `7 G
[mysqld]: v2 U) T1 Q* I7 a  E

2 M- L+ J+ M7 o$ Pcharacter-set-server=utf8& s8 b. _0 Y7 ~8 f8 m: K& t
default_authentication_plugin=mysql_native_password  N9 `0 H. @9 M; E* X

6 d; K- I% f5 }8 {: M[mysql]6 n1 e, X+ L( S" X; [
default-character-set=utf8
2 `' m1 z, M6 L- e% ^
0 a- @% `0 h% w5 w4 ^0 V: S" @, K[client]
, W& N8 X9 m2 ^# S% \1 G2 @. S0 hdefault-character-set=utf8' k; m  y( b" E1 _
, W2 N8 g# \* S! ^% o
然後重啟mysqld
7 D/ ?3 v' G1 f  v/ lservice mysqld restart* N& |+ o9 H! U) ?$ S* Z9 h( s  p0 v
搞定!!
3 E. p' L) c2 H# a2 d" S3 i# S" w
+ q6 \1 k/ y4 h( r% k. ^% z: i

) \) s$ Y4 x' x! m# [
-->
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則


-->

聚BT福利

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

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

GMT+8, 2024-10-3 13:57 , Processed in 0.059504 second(s), 16 queries .

連絡站長.廣告招商

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

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