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

 找回密碼
 立即註冊
查看: 502|回復: 0

[mysql] mysqld 升級到8以上遇到的問題

[複製鏈接]
發表於 2021-3-14 13:06:23 | 顯示全部樓層 |閱讀模式
tid=187560&(1)
) g2 f0 n, b: p% l; {7 hphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
, A+ \! f$ O" G6 r0 F# v! I

) a; \6 A- F  R% }6 G: N3 F# Hmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers2 M5 Y+ H/ j5 c% \% `3 z: x
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
9 S" ^$ z5 Q' q7 H原因:
8 z) ]  t3 t- y4 L" C$ G
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:6 D2 w2 c8 n5 L  f$ ^
vi /etc/my.cnf  加入下列:% O8 q/ r' Z6 P; |9 T
[mysqld]
% G6 I4 z+ ]8 w$ J2 J7 k: d( \3 I% o8 p6 Q3 o/ i
character-set-server=utf8; x$ T5 o: o  |, j# {) b/ D
default_authentication_plugin=mysql_native_password
" z) P7 R  M$ r3 i) J
) Q( ?' L! ~7 F  Q: y- {: w" D[mysql]$ w; ~4 A* r4 E' ^
default-character-set=utf8
2 ~  D  c+ @- X% s
" x' W2 y6 ~" d' E9 k, ?[client]
, h5 e" S& f4 T4 t6 V! x* Edefault-character-set=utf8
+ Q: c9 _* s+ E8 E/ I9 m3 M5 `9 f- p5 r" C$ b) @7 d& t4 ^+ k
然後重啟mysqld
* R9 I( j8 p( k$ Aservice mysqld restart
, Z( g0 n! h6 V: w5 R- ?8 e% y搞定!!

3 |: B5 ?$ G7 u$ s
. n0 \, x1 q$ o, a$ V& N: R註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:
註: 可以先寫支php程式以測試 ~~~
  1. <?
  2. $hostname = "x.x.x.x";
  3. $database = "db_name";
  4. $username = "user_name";
  5. $password = "pwd";
  6. $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);
  7. mysqli_query($conn ,"SET NAMES utf8");
  8. $sql = "select count(*) as total from " .  "table_name";
  9. $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));
  10. echo $rec['total'];
  11. mysqli_close($conn);
  12. ?>
複製代碼
遊客,本帖隱藏的內容需要積分高於 999999999999 才可瀏覽,您當前積分為 0

# I, ?; Q( Y/ Q+ U/ w. I8 f# N, q$ P) K7 v/ {* H

( s& h3 s6 X* p  y; L  |# C$ Y當php 7.2.24  connect to mysql server,出現 :
  1. PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
  2. Stack trace:
  3. #0 {main}
  4.   thrown in /test/connectmysql8.php on line 9
  5. Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
  6. Stack trace:
  7. #0 {main}
  8.   thrown in /test/connectmysql8.php on line 9
複製代碼
這是版本相依的問題,只要 yum install php-mysqlnd  或 yum install php-mysqli 即可
4 @! i$ J& Q+ x. a4 j) d& {2 x" [1 ~

6 ?2 w. J* c% q( E; H; p" v[Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
3 \4 @! Z5 C- R' C, J說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動5 S  D6 O& ?  Y4 Z6 d
3 N9 q% j! Q+ L: T4 h3 d7 M, K. o
(2)" A- ^3 S5 M+ r+ ^  i0 ~$ x+ j
(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'system>0' at line 1
  P6 S# L4 c$ |5 d: I" O! _SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0
; v) ~/ q0 E! e
- T6 ?* }7 ~! y8 W(1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups = '' AND starttime<=1532077291 AND (endtime>=1532077291 OR endtime=0) ORD' at line 1
/ ^  i. H5 |3 R5 ~7 j+ Q! @1 cSELECT * FROM forum_announcement WHERE type!=2 AND groups = '' AND starttime<=1532077291 AND (endtime>=1532077291 OR endtime=0) ORDER BY displayorder, starttime DESC, id DESC LIMIT 1
" L" w. m  D" U# ]8 N, x% \* o8 j1 E, d' K% e  K$ G
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。. G/ u- T9 w% a+ e$ D5 o, ~
( M5 u% |" Y( j' h0 e, m
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,
! _) w9 V/ Y8 B3 e/ s, A7 c將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
( u& z4 Y2 r% J) D! R4 m6 B: s
- m) ^& n' a6 c% |7 j* r. m第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,0 f4 v$ U: n* ]$ g
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。& r) a7 X& I' D; q0 j1 a! u+ s: E" \3 {

5 t4 s5 L, L& W6 v+ ]2 L如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。7 ?5 E# [) Z# f( p7 I* u5 M* y* _

0 U0 X  b6 w1 J3 Y5 T為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。& ~' t3 g# A9 ^; b4 A
以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤

! n* H* m: j# R" K) J; w
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2026-3-23 17:09 , Processed in 0.126310 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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