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

 找回密碼
 立即註冊
快捷導航
  • 我愛av論壇BBS
  • 手機A片
  • 自拍偷拍外流區
  • 貼圖區
  • 52av裸聊室
  • 中文-中國主播
Yahoo!奇摩搜尋
熱搜: av4u論壇
Google搜尋
熱搜: av4u論壇
     
查看: 5404|回復: 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').
% W/ V! H! N/ B, n; M* T# p' z
7 I% v! I( \. q8 F這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.+ n3 R) d7 j  J0 X8 b" r' Q
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)  H. c8 J$ \% u3 O4 j" }5 i
登入mysql 然後輸入 :
1 _9 @8 n$ B1 p1 O1 I  f; Smysql> SHOW VARIABLES LIKE 'old_passwords';
& f: r" r- ~9 x- I+------------------+-------+
5 b) k; j+ q: R( E& O6 [| Variable_name | Value |% }& D$ E: [( z$ B$ u$ A0 L
+------------------+-------+
# a% Y' @1 c- L, O| old_passwords | ON   |( Y, ?; \+ X( L) k4 k; j& ?
+------------------+-------+% Q: R! W2 F) s) [  ]
1 row in set (0.00 sec)
  {$ K  Y6 |  f# \) f6 z0 Z' K' S- F% z( b- Z
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart
7 ?# Q+ j% [# z9 x或 在 mysql prompt下輸入:3 g1 K6 y! N: {# K, Y7 h
mysql> SET old_passwords=FALSE;  7 ]/ l% ]9 Q, n: T( a7 ^/ I2 U
檢查mysql.user內 每個密碼長度:, N3 C& R  A" ^$ U# n
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;! b3 g' \! A* `- U
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼)
- P3 M# z( e/ k, Y+ ]+ B7 M( p4 z) t4 h3 I: j) Z2 U3 `& y, |
再重設原來的密碼:1 g& |2 g8 s* K
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了
5 }# y! a$ G& l  q0 c8 {. Vmysql> flush privileges;
# `8 y' I- X0 n- ^) U# M8 j( Z6 v) G
再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼
0 y; B9 l: u7 p+ j注意:4 U% A4 P5 U8 N# p( \4 d
如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================0 R, X, G  E5 g5 K! J  G
當mysql升級到 8.0.21時,php連到mysql出現2行errors:  b- Q8 b( m# _" w/ t+ ^. q: m
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
! Z5 j) A. D. ?3 ?9 ?3 O8 |6 cmysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers/ D" B% @  C5 N) [, K
原因:

: k1 Q6 a# z% Y1 O9 f在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
6 E2 s2 \9 Z/ S& A, W5 i1 M( Q: Fvi /etc/my.cnf  加入下列:  z+ Y5 R8 A9 v. D
[mysqld]
  e2 ?' s( J  _2 ^' @
4 k# [$ T1 \! `  T9 X  scharacter-set-server=utf8
, y7 N% r) c/ D: _default_authentication_plugin=mysql_native_password; H& V( N, W4 H
7 q3 p  {4 F2 v: L. U
[mysql]
% L! M8 A7 E$ p! j+ i0 |" ]default-character-set=utf8  X& u. E; g3 J0 j7 [1 F

' R- \& a! B4 o[client]
4 c3 d" U* h; H) idefault-character-set=utf8: e4 s, l; \8 z9 b% c  @
( }! ?$ _+ Y4 s
然後重啟mysqld
6 C4 H% |% j3 T" b) x0 Kservice mysqld restart
/ c1 U- b' p+ ~% x搞定!!  \/ |3 n1 h! L3 F3 u  t' Z% q

: Z" p' l+ F+ \/ N! l% O" O' A
& v2 Z8 M" i5 ~1 w- i6 q4 h- R4 M' d
回復

使用道具 舉報

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

本版積分規則

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

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

GMT+8, 2026-7-5 16:58 , Processed in 0.008688 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

連絡站長.廣告招商

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

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