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

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

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

[複製鏈接]
發表於 2021-3-14 13:06:23 | 顯示全部樓層 |閱讀模式
tid=187560&(1)
, m3 x9 q6 j) g3 E5 U4 zphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
: l' }" Q8 o: W2 ]. x1 d

6 j8 u/ d1 E3 t6 A$ n2 I) e6 ^- ^7 zmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers* c) o  [. j* l- ~" X9 }) g2 g
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers6 o7 v- h% s6 C; K5 r7 d( K5 O7 o! i
原因:
) ]! ?% z  O9 Z+ d" ~% y7 E5 _
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
2 P+ n  L3 h+ r; }1 C3 {5 Vvi /etc/my.cnf  加入下列:: O4 ]/ a$ p7 o; J) W! c: p: D- u4 m1 ?
[mysqld], l' c, Y- y; h9 E/ v% p

' v+ d, H8 [* ocharacter-set-server=utf88 w0 U: {6 D& R$ j
default_authentication_plugin=mysql_native_password
8 L) ^2 x  s: d4 t7 L
* l1 v  v2 X3 B& W[mysql]
, j( G. z) t) v) m4 |- W0 Bdefault-character-set=utf8
9 u" p% {  ~$ D& }
% O5 `8 _' I$ l2 {3 c7 m/ U4 }; u[client]( g8 K7 |% [) p+ _  _- h/ H4 x
default-character-set=utf8
" a% M- B+ ?+ h+ m/ m: x6 k3 s2 e" _
然後重啟mysqld
: s' F" J1 z0 Q7 ~, a( Q( }* D. [service mysqld restart
% ?0 J) w5 h- D) t( m* E搞定!!
8 Y+ g! H: Z: O
$ u( l) J8 @9 P: H" ~! A
註: 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

3 |0 w& ~7 M1 v$ T
3 t1 i4 ^  u% [/ {- E; g: h% _9 J; @+ P, a7 K
當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 即可$ s0 ]! P7 r5 _8 e* x8 a" u$ t; @& X7 ?
& |6 e' t) i( N
8 B8 H4 G' p- c$ F
[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.
4 O7 j( ?0 b' R$ d" i說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
0 K$ K3 `2 f3 j! v8 N5 |" T- w2 k5 r1 O6 Y; ^
(2)8 t! W. p2 W7 \1 H" M5 E! g
(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% T7 d# n9 o/ S9 H) o& `6 e6 B% u
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0
. J9 ~3 b8 v$ D
" f. [- d/ W, V5 W: ?  R(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
/ e/ O. k$ ?+ @2 y( e8 `SELECT * 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  j& @0 @* o. d$ c) R
8 i# y; T3 D' D4 p# ~% }
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。( C- A2 L1 w# F& \
  N" u* p+ s% g3 z
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,
0 E4 l/ X5 U% j8 l( A6 C3 M將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
+ y# ~4 x- C5 z
. m* I+ V  }# M; R4 u第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,: G( K, e+ @9 d, e5 Z* A/ {
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
1 F' w$ S& \- _7 W) j. b8 _4 M9 m: W2 @% o! U
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。
+ ]$ b; ~. _7 ~% }9 @' I) {
; O, _2 \2 X- N為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
+ R& |6 @+ d$ N% w以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤

6 L% y: [% S. c) c* {, n
回復

使用道具 舉報

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

本版積分規則



中文酷站排行榜

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

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

GMT+8, 2024-10-29 02:28 , Processed in 0.047603 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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