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

 找回密碼
 立即註冊
快捷導航
  • 我愛av論壇BBS
  • 手機A片
  • 自拍偷拍外流區
  • 貼圖區
  • 52av裸聊室
  • 中文-中國主播
Yahoo!奇摩搜尋
熱搜: av4u論壇
Google搜尋
熱搜: av4u論壇
     
查看: 5343|回復: 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').7 t; Y9 A  u1 u6 ^) ]
: z( c1 P' A) I1 s; j: ~
這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.) ]2 i% C/ E# y' H5 G
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)  X1 l/ i6 w, e
登入mysql 然後輸入 : 9 |& ?- y8 e4 o$ ?# z) `& u
mysql> SHOW VARIABLES LIKE 'old_passwords';' H1 j9 S; k2 t& f
+------------------+-------+
! x; `0 `& H" O! X| Variable_name | Value |
( \" `2 `3 C- j7 N- Z+------------------+-------++ V1 y/ S6 l% z* w$ S3 Q8 i$ a' _& F
| old_passwords | ON   |& K3 G6 k* }& L8 ]
+------------------+-------+$ [& q9 W( e6 C$ ~) \" q
1 row in set (0.00 sec)
& A2 L. X; \* ^( i# V2 u. P0 p! k8 w* n8 @* y. r9 [
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart1 N. v+ Q. A( x! z  Z
或 在 mysql prompt下輸入:  R& M0 |6 J' ?" H0 j% q
mysql> SET old_passwords=FALSE;  1 |9 D. t( y4 L/ ?5 `6 h5 F
檢查mysql.user內 每個密碼長度:! b8 z1 {6 i3 W% X  b- o# `) H+ P
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;# o) A1 \! I- ]8 _5 {+ a0 b
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
* O6 ~6 K) r# Y! L* Y0 U+ {% P1 }# {( Z* P" W8 ?4 ~+ X
再重設原來的密碼:
+ A  B4 }- C/ j5 Gmysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了
; d" R/ n8 K9 q$ Qmysql> flush privileges;; h8 t, e" ~2 l; J0 O$ E- ~# @

6 E! b0 {2 A5 W' L( z# `再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼, P! R9 z& t. s9 x/ X
注意:0 Y( X4 _+ ~0 e  ~. S# ~
如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================
2 d+ @3 \/ ]5 k' @0 D當mysql升級到 8.0.21時,php連到mysql出現2行errors:
8 K* d$ z8 y6 R; Lmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers1 l3 L& T. X9 g) z
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers. r! K2 j( Q7 o9 o+ }" a  N0 Q3 d
原因:
2 j2 l, z0 ]# q1 e$ y
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
$ P2 i$ I* Y. h/ {! tvi /etc/my.cnf  加入下列:7 W* X- d2 n0 k
[mysqld]) \6 I0 S0 B' Z- \& f

/ c8 b0 p. n2 l5 n" tcharacter-set-server=utf8" T* L0 F( A( Q0 V# s: h1 w
default_authentication_plugin=mysql_native_password
9 Z- L- _8 L0 a  |4 v. W5 v! |+ d0 }
[mysql]1 f+ V  q% c0 M( f
default-character-set=utf8
- q' H% s' X3 C( U# K' |+ N7 }" W8 J; b$ X4 a, q6 a* ]
[client]
* f( k( u; {' w. k& n0 y( B' K- k: qdefault-character-set=utf83 P4 g  M: o# H% J$ F

0 U  W$ i* j+ n4 N7 ~然後重啟mysqld
4 ^+ u' e' ]7 hservice mysqld restart/ }3 ~8 E( q4 \' A
搞定!!
6 q9 |) j, G) ]  L7 w) s& i
1 O' w7 h6 w5 E/ s2 z% F' e

; [1 L* K* z1 J- v! U5 y
回復

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2026-6-11 03:29 , Processed in 0.008936 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

連絡站長.廣告招商

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

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