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

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

作者: coav4u    時間: 2021-3-14 13:06
標題: mysqld 升級到8以上遇到的問題
(1)# Y( [3 Q+ S$ y' E% f
php連到mysql出現2行errors : (discuz網頁出現的是連接到mysql錯誤表格,需自行寫一隻連接mysql的php程式來測試)4 ?/ S. m: P( F2 W0 r( b: L

1 ^/ W; {6 V8 Z' ^mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers3 T( X! X8 @- f, n7 \7 L( L8 Q
mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers" V4 V# Z* Q6 V/ e" ^
原因:
8 s5 }6 N6 r3 d, ^3 o0 ^6 A
在MySQL 8.0.21中,caching_sha2_password是默認的身份驗證插件,而不是以往的mysql_native_password。所以和php不相容。可以降級php,也可以修改MySQL的配置。 吾人決定修改MySQL的配置:: R8 {! |" I! z
vi /etc/my.cnf  加入下列:
3 C( v& x7 b$ D" J. _+ `[mysqld]
& i+ q  A$ z6 n
; C! ^% r( o1 j: {  fcharacter-set-server=utf8
0 J; n( u. a" Gdefault_authentication_plugin=mysql_native_password. |( \# e+ L8 n8 ]3 y. e% Q
validate_password.policy=LOW7 B1 y4 }0 D- q; g" z0 Q
[mysql]
" ?$ v6 P7 V, y5 s& g; p1 Rdefault-character-set=utf8  O. P1 l7 h7 A# F# m' G3 U6 C
1 ~4 G" z, A; A# K  e! q9 f
[client]
0 u9 z0 Q, y' [; s* Q% V) v* ndefault-character-set=utf8: O& R, `# ?7 W$ J  o$ _

/ C$ Z  @, {& Z" a8 U; b: m. H. g然後重啟mysqld5 o& s* ^/ h% c$ T6 S/ x
service mysqld restart

( m$ {3 A, F$ Q5 v, v

$ T9 z9 q1 w" P( \, l3 w  v' P' _重啟後可能須做下列動作:+ `+ F* u& b1 s
mysql -u roor -p  
1 E; |$ K  Q! w+ ~, K) u; Y! p/ oSHOW VARIABLES LIKE 'validate_password%';' A4 f+ M6 u; b
SET GLOBAL validate_password_policy=LOW;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';搞定!!/ R2 Z; K8 h0 G- l
) f9 g6 f# a+ W, {0 i! T+ d- Z; }
註: mysqld啟動時,在/var/log/mysql/mysqld.log紀錄著:
註: 可以先寫支php程式以測試 ~~~7 l; P+ I8 S  p$ g$ }9 d8 y
  1. <?
    1 f! G: t5 R0 ]' d, L' e8 W
  2. $hostname = "x.x.x.x";
    " u/ u: M0 j2 [) |8 A2 v
  3. $database = "db_name";
    2 v) ^- \* @  ?& p$ p# i: `
  4. $username = "user_name";! P3 j! r: h3 m- k/ s2 {! p3 D. c
  5. $password = "pwd";
    , S* F5 P0 C6 a& K/ O/ \+ `2 U+ l" R
  6. 6 g/ N( W' c: _  D
  7. $conn = mysqli_connect($hostname, $username, $password,$database) or trigger_error(mysql_error(),E_USER_ERROR);$ x' ~) C4 N$ B" N: \
  8. mysqli_query($conn ,"SET NAMES utf8");) `( M* _( m8 m+ @: F5 R: S
  9. / ?; L7 ?# T' ~7 P+ G( B
  10. $sql = "select count(*) as total from " .  "table_name";+ x8 ]* @8 t) o1 _: ?" t0 q
  11. $rec = mysqli_fetch_assoc(mysqli_query( $conn,$sql));# P$ ~" k; H2 a
  12. echo $rec['total'];3 n" Z! g5 I6 i
  13. mysqli_close($conn);
    ) J1 n; w0 d: B, T) F7 f
  14. ?>
複製代碼
[hide=d100000000000000000000,999999999999]於video1主機下 /test/connectmysql8.php[/hide]* Q0 t% `0 J3 @( E0 J7 @

" |, K! J1 _' n) `; k( V5 i( W* }1 T- I
當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
    3 b+ a. z7 u  c
  2. Stack trace:7 [# N* a* S& x8 F" S) Y: S
  3. #0 {main}
    0 R: Z7 F) }: j/ I
  4.   thrown in /test/connectmysql8.php on line 90 C. G$ K! E) {9 S" x

  5. * s5 ]7 S" g7 I& ~4 |
  6. Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /test/connectmysql8.php:9
    ; t$ f: T) {5 T) d
  7. Stack trace:: f9 _) O- E6 v- L8 O7 Y- j
  8. #0 {main}
    3 D$ c& d6 }/ o' x9 w! K" `1 A. W; b
  9.   thrown in /test/connectmysql8.php on line 9
複製代碼
這是版本相依的問題,只要 yum install php-mysqlnd  或 yum install php-mysqli 即可
0 d6 v- }7 z$ l% V9 F: Y
2 I, a# w; w: H% B+ z3 f! b
$ T* v, l: q. i- m[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.
2 R! k, [, a2 R  }說明: 千萬不能照它建議用"UTF8MB4",否則無法成功啟動
; U6 d1 o# e8 ]' n+ g& @( X: c! L  D; @* U
(2)2 ~+ v4 k" w& y4 b
(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
" e3 J8 }4 o( B9 s+ G8 TSELECT COUNT(*) FROM common_usergroup WHERE type='special' and system>0) |  s9 P- Y7 h& g1 q

4 @4 O/ E0 `! x' R$ A(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
4 G; W. i. P- F. p5 W3 R* sSELECT * 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
2 M: f5 [- D  ^" f; x7 z- V/ y7 e6 L: {3 o( e
因為MySQL 8.0+將system和groups作為了關鍵字,所以不能直接在SQL中將system和groups這兩個詞作為數據庫、數據表、數據表字段中的任意一種使用,如果數據庫名或數據表名或數據表字段名使用了system或groups作為名字,必須使用一對反引號引用起來。寫作`system`或`groups`。
  P; O& ~$ P% |" q! v7 F: Y2 h( {. r- j+ s+ Y  j
第一個錯誤需要找到Discuz!目錄中的source\class\table\table_common_usergroup.php,
$ w: |( U( w5 I* K0 \% q將文件中所有的system全部改成`system`,保存後重新上傳到服務器的相同目錄即可。4 C3 p* U5 i# c' S: K
3 [6 O0 H1 I" h  X( P2 {! j
第二個錯誤需要找到Discuz!目錄下中的source\class\table\table_forum_announcement.php,
) Q$ T* |! F/ s8 J0 Q5 R2 Y  ]& [2 R將文件中所有的groups全部改為`groups`,保存後重新上傳到服務器的相同目錄即可。
* [1 C3 c8 T. C0 U4 r
3 K, k8 H. U  d( m如果在MySQL 8+環境下安裝Discuz!,在安裝前需要給install\data\install.sql文件中沒有加引號的所有system逐一添加一對反引號保存重新上傳到服務器的相同目錄,否則也會出現SQL語法錯誤。7 m6 D. b" L. i1 D6 F& R& l5 Q- t

0 U( q; _6 m, |- S; }- n) ?為了避免語法錯誤,在寫SQL語句時,一定要為所有的數據庫名、數據表名、數據表字段名全部添加一對反引號,像Discuz!這樣的寫法是很不妥的。
# Y1 d2 Z/ O4 R$ V1 [7 l  g$ C" e以上參考:   升級到 MySQL 8.0+ 後Discuz! 更新緩存時出現SQL語法錯誤
3 k& y& a) f! ^4 c$ v

$ t) K  r/ P0 m+ }) t; Q: L) G* T4 I+ U, q

  ?, e7 t/ {/ v
- t4 V/ B: y; W8 P$ g; F




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