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

標題: mysqld 升級到8以上遇到的問題 [打印本頁]

作者: coav4u    時間: 2021-3-14 13:06
標題: mysqld 升級到8以上遇到的問題
(1)
/ d5 O6 ]1 l4 j4 Pphp連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
( \' A# X9 W5 r3 ^% F1 Z$ r
4 H1 j0 `' p0 j$ O
mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers
$ H& v' j3 c8 G, jmysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers
3 @+ H( c! J  o, o原因:

/ X2 F$ U; C+ }/ L2 z( C在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
  Q" ~' Y' y* t) ]% ~vi /etc/my.cnf  加入下列:1 _/ L- D" p" w6 o& r, {; ^4 \
[mysqld]5 W* g5 t' h2 w/ n$ ^0 C/ M
9 N' n5 V1 A- _8 I& n; z
character-set-server=utf81 y8 v1 o& l' [: k9 L
default_authentication_plugin=mysql_native_password
! c  C" [7 t. c- ^* R( q2 ?' @
validate_password.policy=LOW
  ]+ l% ]2 G" z: ?0 K
[mysql]
1 M7 q, A' N( {5 Q% ndefault-character-set=utf89 o- H3 @# n' o4 T

/ G' E8 S9 E% ^5 O5 b[client]9 H7 z1 J9 \- B
default-character-set=utf8
* j/ m: U! v" a: e* i* C5 R2 v  N
% L) t% C+ d' L6 L) ~然後重啟mysqld1 y  _7 L9 j$ l- L# ^7 @  y* Q
service mysqld restart

; b) v( g- [' B+ X  N
$ I) ?; X7 W& T/ G2 i. _
重啟後可能須做下列動作:& f4 z) W% `0 z; ]% J+ c
mysql -u roor -p  
: \% R  Z7 @4 dSHOW VARIABLES LIKE 'validate_password%';
: o3 y7 L/ l6 l$ f& s0 ?3 I8 ?" o5 ESET GLOBAL validate_password_policy=LOW;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';搞定!!
: U- C* u' D: L8 N! B
7 f3 c( K' r! S  k' r& m註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:
註: 可以先寫支php程式以測試 ~~~% a8 }8 R) A7 o
  1. <?
    , x5 ]5 t3 Y/ J% Y* s9 v9 |! ^' u& C
  2. $hostname = "x.x.x.x";
    ( J/ `2 C# N9 p* X. d
  3. $database = "db_name";' j) S  h  T! P; b1 \: i- [- e  |
  4. $username = "user_name";) q6 R' B8 F$ _% g' d; r
  5. $password = "pwd";
    , W' {! M' K/ G7 Y2 d

  6. 4 ~3 i$ }! m: K9 z* y- X
  7. $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);
    ( t9 l' g4 X3 p$ a' c) Q
  8. mysqli_query($conn ,"SET NAMES utf8");
    " f5 o( k0 f# P$ c$ h

  9. 4 M8 P( s7 F' A8 W+ d8 L
  10. $sql = "select count(*) as total from " .  "table_name";
    ( J6 S7 e9 b0 i1 w$ N
  11. $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));
    - ~5 Y3 N; M! H& n. \9 `3 u
  12. echo $rec['total'];. R% {- j$ x0 s/ f3 N
  13. mysqli_close($conn);' G6 a: p7 q% ?4 N9 x8 f. t0 P  U
  14. ?>
複製代碼
[hide=d100000000000000000000,999999999999]於video1主機下 /test/connectmysql8.php[/hide]
- p, M. J# D9 U4 }# n# q; X: L4 ?: s

; b2 Q1 \6 z+ }4 S0 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
    0 I' V: m; W# v# q2 G  I- ~: E. i
  2. Stack trace:
    - K# |; b# x& Q
  3. #0 {main}2 L: Q8 `2 @0 \# }+ g5 c) N1 C( }0 O
  4.   thrown in /test/connectmysql8.php on line 9
    . J- O! |+ |; Z. E7 ]' c

  5. 0 A% p* S" r6 ?
  6. Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
    5 \- B. G. f/ s9 M$ }
  7. Stack trace:
    2 e3 n3 i3 Q2 _; i" v& c4 T
  8. #0 {main}3 ?5 G# ~  Z; ?! T& I, Z
  9.   thrown in /test/connectmysql8.php on line 9
複製代碼
這是版本相依的問題,只要 yum install php-mysqlnd  或 yum install php-mysqli 即可2 n) q! r: I; k' _( W3 @

1 l+ ?* }$ U* S# [0 T) ^+ _1 y7 `, S9 S- |0 l2 c
[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.; A" p% `# e. B+ q+ I" G! X# b
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
! U7 l/ z* J; Y
2 h: ~: X. L7 B6 L# @. f; S(2)' u; N7 [* t4 O( o1 ]7 Q9 y; y
(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 18 d  h9 F8 M7 j! n0 s
SELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>07 e: n  @$ m7 B) L

4 y* ^  C; t7 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 'groups = '' AND starttime<=1532077291 AND (endtime>=1532077291 OR endtime=0) ORD' at line 1
5 Y! a. G: n  k* k2 hSELECT * 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
6 f) g' O& A4 o6 W/ V
9 r+ ~' X$ n1 U9 ~7 ?* A4 ^; V8 a因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。: c$ Z# u# T  [% T4 Q. q# O

! ~2 i/ r$ n! C+ i第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,8 I! b6 x) {9 C; Z$ Q
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。
* I' ?2 Q- f3 ^/ L: E" w. o/ w) e& I7 }  G6 T: D$ [: }, G
第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,% N1 ?! L: U: Z% ?# d
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
- \; b% v( y4 E" f4 \2 E+ L/ L8 {3 _8 U
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。
5 _9 e  L6 q8 y8 ?1 }3 N; x2 V5 s, g, O- \
為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。" N4 Z$ j5 ?4 \  ^0 U
以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤

* ^4 y& L0 p' L
, u8 ]6 L! |6 b
) ]6 B0 m- K& F; R
0 g0 o: E% s% y- I: K$ t! h" k# l/ c) q- [* @





歡迎光臨 52AV手機A片王|52AV.ONE (https://www.52av.one/) Powered by Discuz! X3.2