in header_common.htm --> -->

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

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

Yahoo!奇摩搜尋
熱搜: 手機A片
Google奇摩搜尋
熱搜: 手機A片
     
查看: 3380|回復: 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').
% a) \; Y- v8 O6 S$ z4 T" C% H1 t4 m; [
這是因為php 5.3以前舊版的密碼採16位編碼,而新版php 5.3以後採41位編碼,而mysql 5.2 以前預設也是16碼,所以才會造成此種錯誤.% X# U9 p; g, U5 B1 t
先診斷一下mysql: (我的php 5.6.38 , mysql 5.1.73)
8 G6 L5 m( @" b1 q登入mysql 然後輸入 : " u$ ?4 U! E; h1 y# y
mysql> SHOW VARIABLES LIKE 'old_passwords';
3 A, t1 x( ]5 ^7 }5 R# Q+------------------+-------+6 A" \: j4 m+ i
| Variable_name | Value |
  H. d5 G. ?% F2 ?5 v- z+------------------+-------+4 I( ~3 e  g! Z  b4 ]
| old_passwords | ON   |# c* e- X% Y. Z# s
+------------------+-------+
& m# D& v8 l/ w4 J0 ?+ e3 k1 row in set (0.00 sec)
: q3 H; S! h  C" j4 d% E5 O7 f4 V* z/ j: m9 P, \) P+ G
old_password  ==> ON  就表示 /etc/my.cnf  裏的 old_passwords=1  設定為16碼,須將它設為 0 然後重啟mysqld ==> service mysqld restart
9 t' ^4 q4 ?3 O# d% {或 在 mysql prompt下輸入:
9 e  B( {2 W) Nmysql> SET old_passwords=FALSE;  5 b! l# {( X$ [' U3 Y( T/ M  v
檢查mysql.user內 每個密碼長度:: N  g4 O2 E5 v  H. Z6 n/ i
mysql> SELECT 'User', 'Host', Length('Password') FROM mysql.user;  w8 ?1 x$ M* R9 W
如果還沒改成41位,Length('Password')這個欄位應該都是16或是0(表示沒設密碼) . R0 a0 M  J. t/ ~9 T
' V3 D5 p+ \4 C
再重設原來的密碼:4 f4 L  J2 D$ I, P( k& h
mysql> SET PASSWORD FOR 'root'@'192.168.1.1' = PASSWORD('原來的密碼');    // 小心要核對原來 帳號@IP 更改,不要改錯了
3 k5 x' I5 J2 X, P9 j" i* smysql> flush privileges;
- w5 C3 [0 i6 ^# z( T0 J$ o) u5 C4 k3 J! A% W% o
再輸入 SELECT 'User', 'Host', Length('Password') FROM mysql.user; 檢查密碼度,就可發現剛剛改的root 的密碼長度已改為41碼8 H* W& S! t" b& D2 L
注意:' g9 p* `- _1 b. P; |0 O: E& H
如果帳號太多,可以遇到問題時再重設密碼,因為重設密碼 SET PASSWORD FOR 只針對個別密碼,不會因為 old_passwords=0 而對所有密碼造成影響
===========================================================================
# z/ j- b* f4 d. g8 i當mysql升級到 8.0.21時,php連到mysql出現2行errors:
+ {& |5 V/ e: X$ ]- ]( ]3 nmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers9 J6 O, G% b/ u8 y! |% F4 F* m1 w' i
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
* d+ b+ @# y2 V. g% O1 H原因:

$ P! I: ]( Q4 S0 q在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:/ T. V* S) S+ E. Y
vi /etc/my.cnf  加入下列:( E3 P* `4 `! c5 D7 f
[mysqld]
- M6 y4 l4 p- \7 k
5 T6 C1 [: m2 f% {character-set-server=utf8& p: |- ?% K5 d! w
default_authentication_plugin=mysql_native_password% G* Q0 h- e9 n! y& Y* V

1 b  }2 L# ]8 `3 ?+ S* Q* n2 S( q& k[mysql]5 `8 a/ E. `! o; x; U, `
default-character-set=utf80 `3 Y( {8 ?7 m9 B! V: N: V5 L
. j, v. \) s: t
[client]7 b. k# z9 Z: Y4 ?6 f
default-character-set=utf8
7 \5 _' r' v+ G4 k% U$ D$ o; R4 k3 n# O4 w; c
然後重啟mysqld
; h' O8 i% I+ D$ ?. a" D1 [6 M  a6 hservice mysqld restart
* t2 r  S0 T, b5 d( s& ~搞定!!
5 \1 y( `" q8 i% ?

4 h! N6 k# {8 P' L/ T
# H9 ~, e4 ^/ m
-->
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則


-->

聚BT福利

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

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

GMT+8, 2024-10-4 03:34 , Processed in 0.053139 second(s), 16 queries .

連絡站長.廣告招商

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

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