in header_common.htm --> -->

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

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

Yahoo!奇摩搜尋
熱搜: 手機A片
Google奇摩搜尋
熱搜: 手機A片
     
查看: 3416|回復: 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').0 C7 A$ h8 B1 P: |# i
# F8 p# ^3 m+ R8 q& A' l
這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.. L0 `+ \0 C3 m  D
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)+ T4 ~4 c4 n. Y, j# t" c
登入mysql 然後輸入 :
. o$ v# z* k: c# x  G& b; imysql> SHOW VARIABLES LIKE 'old_passwords';6 c2 c1 D3 g2 \4 v$ X7 A) e5 j
+------------------+-------+, p9 ^8 m' l& _/ f4 \$ a
| Variable_name | Value |. ?( f7 w6 E: x' q
+------------------+-------+
" r* O5 U% q- \  M" [' R6 \| old_passwords | ON   |& J, D+ i9 _/ b+ Z# v/ t
+------------------+-------+
! j, b) D' r, ]8 ^9 q5 ^9 K1 row in set (0.00 sec)" j' t6 Z5 r0 P8 S& J' o& Q) S; {3 \8 j# A
/ \' V8 F7 p' c$ E- ?9 l1 G
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart$ @4 I# N' N( d
或 在 mysql prompt下輸入:  p, C: V* S( [" @' U
mysql> SET old_passwords=FALSE;  
( z8 W: y5 d: ]& a, d$ J檢查mysql.user內 每個密碼長度:
! s! p2 }! H. C# kmysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;
' m/ U, ~' [+ n! r: h  t如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
, q! k  E: u7 I# c: R' X
" a' r5 K8 {/ s2 @9 X; A, z7 p再重設原來的密碼:
, K# ?1 b- T, R3 emysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了' l4 o& O2 i) L' t
mysql> flush privileges;7 m+ d; B( v: W* o

( T; _9 h" t. Y' ]再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼
/ h- r+ q, \& E; A6 i* d注意:
4 V9 v9 L. p8 X& C+ u; s如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================
* c' |$ p' \+ O: [4 @( ]) q當mysql升級到 8.0.21時,php連到mysql出現2行errors:
; w- v8 h: u7 I; Smysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
, N: |' \6 M6 ^2 \mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
9 s% L) y: v; M7 `/ x& g原因:
) D4 X7 {: X) o1 f$ ~0 f
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:0 y0 G- K: ?8 S( E; a+ n7 f  o0 x
vi /etc/my.cnf  加入下列:; p) {  a/ |: X
[mysqld]
1 y& S+ ]* u# T. L4 I  p) h% d7 g2 E/ C5 a' Z  z
character-set-server=utf8
4 C' ?% s. n  Z" S: ]; a7 Y* \% W, G2 ]default_authentication_plugin=mysql_native_password
" `+ o4 n5 _' V7 f* T) x# a0 N9 @; U7 l/ K, ]- e% D
[mysql]0 ?2 v3 ~2 k( {4 z
default-character-set=utf8% g1 W7 A: F7 ~, v( W8 _$ a

5 A# ~* ^* s: n1 P! R# P[client]
" c4 W5 ~' ~5 J. ?5 ?8 Odefault-character-set=utf89 {8 s7 ^% G+ _# `
! W+ w7 K4 n* G& z* n; Z/ ~
然後重啟mysqld% F4 Z3 P' Z& ], D4 F
service mysqld restart7 G$ u$ M+ q0 c/ \9 c2 |1 u
搞定!!
! |4 ~3 w) n9 {0 l& f
2 [+ w1 v, m) y$ k9 X4 G1 z9 F4 }. g
- E# M3 {' O4 v4 w& C. |1 C
-->
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則


-->

聚BT福利

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

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

GMT+8, 2024-10-20 13:56 , Processed in 0.064665 second(s), 16 queries .

連絡站長.廣告招商

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

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