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

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

作者: coav4u    時間: 2021-3-14 13:06
標題: mysqld 升級到8以上遇到的問題
(1)( Y* g4 J. N" s; c) h) r' `
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)
8 O+ p# ?; ?" ?. _* x

7 ?! I& s/ E: k, dmysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers' p& d0 C2 S# V) L7 x
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers. }5 ~+ E% j$ U+ Z. {
原因:

2 N+ {( D$ t! p5 Z4 T/ |8 X在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:
2 Q$ N! q1 `( F: q# Jvi /etc/my.cnf  加入下列:
# ?. c% j9 g; R3 W[mysqld]# Y6 z/ K  N% g0 R
, [8 A# b. k9 j9 c* L0 x
character-set-server=utf8
! U, F, N3 S) ~  K. C# A0 udefault_authentication_plugin=mysql_native_password# h, \: N8 r# a. M# l
validate_password.policy=LOW
8 Q, J) k( x! v0 E  W4 P; X8 D
[mysql]
9 C) `, d5 [$ v  ~default-character-set=utf8* f( \2 Q1 l8 U$ F4 |! J
2 ~( @9 u7 U8 A7 }9 y/ b
[client]+ J8 p( {( P& u5 V& T3 s4 V
default-character-set=utf8
9 `! ~& _* N/ n( V8 d% l8 l+ t+ y8 s4 [/ K$ @  T" N4 `; [! a5 b9 R
然後重啟mysqld
  f2 [$ i$ h. z0 `8 mservice mysqld restart
5 @+ S8 J+ n& K
# P- f) q* @( E; z$ b
重啟後可能須做下列動作:
/ e9 P# p. P  h% g6 i: amysql -u roor -p  0 t& V! K4 S' t+ _
SHOW VARIABLES LIKE 'validate_password%';
8 N' w# q$ j% }* F4 T8 L" U& ySET GLOBAL validate_password_policy=LOW;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';搞定!!1 s7 S6 d4 Y, v; i/ P

! q, ~* p9 U# _2 I7 V註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:
註: 可以先寫支php程式以測試 ~~~
0 q: k# R4 G; `; p; o0 `
  1. <?) b; W  N& ^" T: F1 b: V6 ?9 x
  2. $hostname = "x.x.x.x";; O$ f: s8 j  R  a/ B* r7 j' U
  3. $database = "db_name";
    0 p8 G% I8 n' c" u  A& G
  4. $username = "user_name";5 R# F5 C& s+ H0 ~
  5. $password = "pwd";
    # j# q& g. G$ E- Y
  6. . ?3 C8 r1 C% }" @
  7. $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);( J% q7 ~5 N$ t! l2 w6 |, y& n
  8. mysqli_query($conn ,"SET NAMES utf8");
    : J! j7 m$ G1 ~% i% P- @4 m
  9. ; U7 S- v) k+ [! C
  10. $sql = "select count(*) as total from " .  "table_name";) X0 m( e/ Y! r+ d! g
  11. $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));! V# \" `/ S- M0 e+ M' n7 E
  12. echo $rec['total'];
    0 J- q& h6 z  ^3 {$ ]) i
  13. mysqli_close($conn);/ O7 M8 W7 J* b5 P, ]. w1 ~( o8 U
  14. ?>
複製代碼
[hide=d100000000000000000000,999999999999]於video1主機下 /test/connectmysql8.php[/hide]. l6 r  P* E2 R- [# q+ q' q
- I, l* `7 n/ Y3 ]' x

/ w1 o' E& ^$ H當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
      L7 O( {6 x1 B
  2. Stack trace:+ m1 e7 G5 j9 L; Q% K7 A
  3. #0 {main}
    1 ~6 Y1 k2 B% \: ]% u* s
  4.   thrown in /test/connectmysql8.php on line 9
      U3 v, x4 n8 `* s5 B1 t8 j
  5. 6 t* F. p( N! I- q& M( o7 s# x
  6. Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
    ( F6 c" \; w! [' U( K4 r" Y2 p
  7. Stack trace:) b) C7 j+ j1 u7 ~, [& N
  8. #0 {main}! @* g' B: M- D( R/ C
  9.   thrown in /test/connectmysql8.php on line 9
複製代碼
這是版本相依的問題,只要 yum install php-mysqlnd  或 yum install php-mysqli 即可& i/ J2 K: h2 M& f4 ^
) k4 J! Q# f2 Q6 a9 a
& c- e) \+ m5 a! U
[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.$ j- U0 z9 K; O+ e; P5 x" c- ^1 O; `! d
說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
, n& A, r; |8 b& m5 L6 T/ ]5 d" z# M1 B; i4 o
(2)
8 s: {8 h! p0 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
6 X" B7 G0 Z- N: H. dSELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0+ H8 M9 m5 P" F9 C; V! N6 B. P( [: h
) W+ @" T* F4 Z2 u: D: J* }* Q
(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& D6 y3 s+ `4 {- o. m
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
" e2 P" Q2 A. t$ ]& Y8 ?6 w; @$ e* `( E6 \3 l3 f
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。2 h# m$ }( X! }& g8 a: s
, L+ b* \% B3 ]0 W# o. s0 ]
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,% ]+ a( K4 R8 k1 @
將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。( K& o. J, s+ v: A% B

0 c( g6 W& ^9 y  g$ B第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,* Z0 k4 ]$ j5 |0 }, G% b
將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。) F9 E0 |$ X6 C! k
" _4 K& u; l3 n" U3 {' Q1 x* O$ U
如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。
* Q4 E# U- B$ \- A2 {2 ]- f! Q2 p/ A4 `$ r
為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。" j" f  |0 n, d, L# W- @
以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤

* X7 b& K8 A' {2 q1 [
: ?+ j$ J7 y1 l7 G2 Q0 X2 b
- t4 G3 Y+ a& x+ v+ F6 k
! h7 S% L, z! `) F* z) @8 k. `/ K+ R5 x. q  V4 k





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