--- tags: MySQL --- DB80開發機 === * v1020 ## 序論 ### 更換說明 :::info :bulb: 測試機MySQL 5.6資料 昇級匯入8.0版 【注意】本文件使用代號!! ::: * 事件:測試機ap-mysql昇級8.0.34。 * 測試: > - 由DB開發機.10 (v5.6) AP使用資料庫導入Inserte到新機.229(v8.0)。 > - 調整必要的資料庫及設定。 線上階段 〉play.doc[#DB線上昇版](http://192.168.10.18:8888/doku.php?id=dba:dba_readme:dba_2023q4:start) v20231011 ### 版本時程 * DBA-MySQL昇版時程 v2023/09/14 | 站別(Host)\\週次 | *9-20 | 9-27 | 10-04 | 10-11 | 10-18 | API | Note | |-|-|-|-|-|-|-|-| | DEV(Dev.10) | |v5.7.43| | | |o|開發用v5.6 | | DEV(Dev.229) |v8.0.34| | | | |o|開發用 | | DEV(Dev.231) |v5.7.43<br>v8.0.34| | | | | |開發用 | | STAGE(db-27) | |v5.7.43| |v8.0.34| |o| (暫)預計更新 | | onLine(db-32)| | |v5.7.43| |v8.0.34|o| (暫)預計更新 | 各端DEV/STAGE/onLine作業昇級,以下為說明: 1. 上表 `DBA-MySQL昇版時程`以當週週三檢驗;各更新機前週請`維運`架好模擬環境供DBA先測試。 2. `維運`作業環境,當週前完成測試,正式站機群交由維運排程。 3. MySQL8.0盡量以相容5版進行調整,進行必要調校的昇級。 4. MySQL8.0各AP測試,如遇修正/測試延期(STAGE & onLine)上線時間在安排。 5. MySQL8.0-SP進行評估。新版可行,但AP要調整語法,詳[文件-DB80驗測SP](https://hackmd.io/EyX1qy97QjO9bEZMjRXLXw) <!-- * 作業流程文件-特定DB完成 1. 原機昇5.7新版流程紀錄: DBA「步驟1」,參考 [#DB原機昇版](#DB原機昇版)。 2. 設定BinLog調整:`Bing-log`參考[#原機my.ini](#原機my.ini)進行作業;適用版本v5.6up。 --> * 異動說明 - 版本8.0版調整為 8.0.33 。參考:[#Warning.PASSWORD.log](#Warning.PASSWORD.log) ## 任務DBA DBA配合細節部份如下 ### 任務0915 1. 開發機(Dev.229),AP連接測試時間 9/15(五)早 2. 各部門使用連線的帳號碼請私訊,參考[#專案列表](#專案列表) ### 任務0922 1. Dev.229 使用狀況整理,參考[#專案列表](#專案列表) 2. db-32.clone()測試v8.0.34資料狀況 ### 任務1004 - Dev.掛測Client-API連線v8.0.33無異常[#Client2054] 狀態:目前版本v8034 ,開發測的版本;預計降為v8033 協調:舊5.x版的API client library測試,協助DBA。 調整:DBA驗証無異常告警[#Warning.PASSWORD.log](#Warning.PASSWORD.log) ### 任務1012 - Dev.229換MySQL版本成v8033 HOST: 192.168.128.229 (v8034) 說明:預計排定做調整成預計線上版本v8033 ## 維運協調 請維運配合的項目: ### 維運0915 1. 補機器 DEV(Dev.229) 空間大小: C碟599G 狀態:完成 ### 維運0922 1. 開發機 9/15(五) dev.10開發機clone HOST: dev(v5.6) dev.10機器clone,不影響AP使用的新環境 目地:架測試 mySQL8.0.34 的參數調整不影響正在測試的(Dev.229) 作業:DBA 2. db32機 9/20(三) db32線上clone HOST: db32 線上clone,安全停DB 目地:DB 5.7.43-> 8.0.34 作業:DBA ### 維運0927 - db32機 9/27(三) db32線上clone HOST: db32.clone() 目地:DB 5.7.43-> 8.0.33 作業:DBA ### 維運1002 - Dev.10(v5.6.x)昇級到5.7.43 已完成@Jie ### 維運1004 * 線上機DB列出分區待調整資料表 **[重要]** https://playstar-jira.atlassian.net/browse/BU00HELP-1251 ```code 派工任務:進行Stage機 mysql從 5.6 升至 5.7.43 升級的前置作業,請維運整理並列出DB分區待調整資料表 流程步驟: HOST:線上待昇級的DB機器 機器:優先STAGE站或前五台HOST 檢查列出mysqlcheck待調整的資料包含: 資料表大小、分區有資料的開始&結束日期 列表日期在本週10/6(五)前協助整理 [作業說明] 升級5.7.43版本的事前準備 ``` * Dev.MySQL5.7語法同步8.0驗証 https://playstar-jira.atlassian.net/browse/BU00HELP-1235 Dev.10 昇級:掛Client-API昇版到v5.7.43測試BinLog 8.0讀取狀況。 狀態:目前版本v5626 文件:操作昇級 ``` Jie (敬介)  5 天前 複製檔案至目標主機(指定目錄)中 DBA檢查檔案 =>錯誤的檔案 檢查檔案 (10/11 13:30)檔案不是當下的備份檔Dev.10 , 需要更換的初始檔案 Dev.10 架設文件程序的 備份B `datadir` [重新備份] 如果當下省略了沒備份, 參考:架設文件程序 https://playstar-jira.atlassian.net/browse/BU00HELP-1101 服務啟動:Services/Name:"MySQL57"/停止(O):STOP 。確定。 步驟6. 營運前準備&備份資料庫,開始重作一次 就有新的檔 在協助傳到 HOST:Dev.231 存放路徑 C:\_StoreData\Dev.10\ ``` ## 原檔記錄 Date:2023.9.14 HOST:.29 |NO | Type | File:Size |DB:Size| Note |--|:--|--:|--:|:--| | |devdb_backstage_0913.sql |167 MB |206 MB | | | |devdb_jackpot_0913.sql |343 MB |603 MB | | | |devdb_slotgame_0913.sql |21.8GB |43.8GB | | 第一次匯入slotgame: 2:11:12 (2023-09-13 19:55) <!-- ## 建立新機 ### 建立狀況 ~~~shell C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p devSlotgame < "C:\_StoreData_0913\devdb_slotgame_0913.sql" & Enter password: **************** ERROR 1359 (HY000) at line 26293: Trigger already exists ~~~ --> ## 遇到問題 [For Clike-API]以下為連MySQL 8待調整的相關事件 ### Client[2054] ```text SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client ``` Client端 * mysql>特定帳號修正成 mysql_native_password(向下相容)。已調整完成。 MySQL 8身份驗證(預設):[caching_sha2_password](https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html) 在服務器端使用緩存以獲得更好的性能,並具有其他功能以實現更廣泛的適用性。DBA:建議Client-side plugin要昇版本。 - PHP 7.0.33 是現在可以兼容PS後台的最高版本了 | 版本 | 釋出日期 | 結束支援日期 | |-|-|-| | 7.0 | 2015年12月3日| 2018年12月3日 | | 7.4 | 2019年11月28日 | 2022年11月28日 | | 8.0 | 2020年11月26日 | 2023年11月26日 | | 8.2 | 2022年12月8日 | (目前PHP版本) | [wikipedia/PHP#版本歷程](https://zh.wikipedia.org/wiki/PHP#版本歷程) ### 刪除GroupByASC的非標準語法 刪除GROUP BY ASC 和 GROUP BY DESC 的非標準語法 <!-- https://hackmd.io/uPfT8heTT0W4_dJwLtMeCw#刪除-GROUP-BY-ASC-和-GROUP-BY-DESC-的非標準語法 --> SQL 語法排序 - * 使用 ORDER BY 子句 ```sql ##[SQL-92] 排序 SELECT ...[ORDER BY {col_name}] [ASC | DESC] SELECT max(a.id) as id,ANY_VALUE(a.id) as id2, a.authority FROM admin_id a WHERE a.status = 1 GROUP BY a.authority ORDER BY a.id ASC ; ##[v5.7之前] ## v8刪除 GROUP BY ASC 和 DESC 的語法;在 MySQL 中,歷史上曾使用 GROUP BY 進行排序 SELECT a.id, a.authority FROM admin_id a WHERE a.status = 1 GROUP BY a.authority ASC ; >> ERROR 1064 (42000): 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 'ASC' at line 6 ``` 參考 dev.mysql.com>[Remove the syntax for GROUP BY ASC and DESC](https://dev.mysql.com/worklog/task/?id=8693) * MySQL 5.7 中棄用了語法 GROUP BY ASC/DESC。 * 注意:直到 8.0.12,Mysql 不允許 ORDER BY 和 ROLLUP。 MySQL ANY_VALUE() 函数返回指定列中的任意一个值,它用在包含了 GROUP BY 的语句中,以抑制 ONLY_FULL_GROUP_BY 导致的错误。 ### DES_ENCRYPT does not exist * 原因:error FUNCTION slot-game.DES_ENCRYPT does not exist * AES_ENCRYPT()函数代替:作用為加密,原function 己移除 ~~DES_ENCRYPT~~ - huaweicloud.com 華為雲 / 函数-解决方案 [低版本迁移至MySQL 8.0](https://support.huaweicloud.com/drs_faq/drs_04_0030.html) - dev.mysql.com (v5.7)/ DES_ENCRYPT()函數已棄用 [MySQL 5.7 的新增內容](https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html) - dev.mysql.com (v5.8)/[Encryption and Compression Functions](https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html) ### procedure因為沒使用者 * 1449 - The user specified as a definer ('root'@'%') does not exist 使用到的帳號不統一,例如:使用到`root`將會移除,調整對的帳號。 ```SQL MySQL 5.7> SELECT db,name,`type`,definer,comment FROM mysql.proc WHERE db in('DBName1','DBName2') AND definer !='s%' MySQL 8.0> SELECT ROUTINE_SCHEMA as db, ROUTINE_NAME as _Name ,ROUTINE_TYPE ,DEFINER ,ROUTINE_COMMENT as comment FROM information_schema.routines WHERE ROUTINE_SCHEMA in ('DBName1','DBName2') AND ROUTINE_TYPE in('PROCEDURE','FUNCTION') AND DEFINER !='s%' ORDER BY ROUTINE_NAME LIMIT 500 ; ``` ### mysql_stmt_error.priority_weight **已解決** * (勇) 09/26 10:52 直接操作,不會出問題,但透過C++的GS去呼叫,就會出現這個錯誤,很奇怪-.- ```code mysql_adapter.h:49] MySQL: [MySQL]: [Comment]: mysql_stmt_execute error [mysql_stmt_error]: Column 'priority_weight' cannot be null [mysql_stmt_errno]: 1048 [mysql_stmt_sqlstate]: 23000 [statement]: CALL update_lucky_host(?,?) ``` * DBA我看線上什沒有這觸發器 ```code TRIGGER-Name: jack.make_grand_default_to_disable [呼測試] TABLE: host_pool_config CALL update_lucky_host(2, 'TEST'); SQL> CREATE TRIGGER `make_grand_default_to_disable` BEFORE INSERT ON `host_pool_config` FOR EACH ROW BEGIN DECLARE is_max_level bool DEFAULT FALSE; SELECT IF(MAX(a.`level`)=b.`level`,1,0) INTO is_max_level FROM pool_config a LEFT JOIN pool_config b ON a.group_id = b.group_id WHERE b.id=NEW.pool_id; IF is_max_level THEN SET NEW.status = 0; END IF; END ``` * 解法-完成 ```code 勇 10/18 14:53 嗨,Eason,我把trigger改成procrdure 程式內,當我呼叫完update_lucky_host後 會再去呼叫make_grand_default_to_disable 這樣可以達到一樣的效果 ``` ## 遇到5743 ### BadHandshake * 錯誤訊息:PS-SERVICE.err ```code 2023-10-02T02:50:15.987779Z 22489 [Note] Bad handshake 2023-10-02T02:50:16.019280Z 22490 [Note] Bad handshake ``` * BU00&維運群 ```code Eason 2023-10-02 10:54 伺服器: Dev.10 伺服器版本: 5.7.43-log 檢查已昇級OK [.err] https://zhuanlan.zhihu.com/p/140873987 以下幫補這個 & 重啟mysql -Name:MySQL57 [mysqld] skip_ssl ``` ## 準備升級 [For DB-Server]以下為資料庫伺服器調整`#準備升級`的部份 ### Warning.PASSWORD.log 伺服端Dev.229 (2023-09-22) * 開發機開機ap-Mysql產生的SERVICE.err 因降規的帳號連接過多的`[Warning]`,將會影響到其他告警的顯示。 :::info **Note** As of MySQL 8.0.34, the mysql_native_password authentication plugin is deprecated and subject to removal in a future version of MySQL. ::: 從 MySQL 8.0.34 開始,mysql_native_password 身份驗證插件已棄用,並可能在 MySQL 的未來版本中刪除。 * dev.mysql.com > [started in MySQL 8.0.34](https://dev.mysql.com/doc/refman/8.0/en/pluggable-authentication.html) * brandonchecketts.com分享 > [MySQL 8.0.34 升級和大量 MY-013360 'mysql_native_password' 已棄用警告][https://www.brandonchecketts.com/archives/mysql-8-0-34-upgrade-and-tons-of-mysql_native_password-is-deprecated-warnings) * log-error.err如下: ```code 2023-09-18T05:16:24.630613Z 6253372 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead' ``` 解法: 2023/9/22 跟J討論降一小版8.0.33 * @轉[AP 掛Client-API 舊版連8.0] ``` 預計一個小時內就好了 測法:將舊版 Client-API 連指到單獨測試機 DB HOST:DEV.231 PORT : 3333 建立連線 測試任表的查詢/異動 [版本MySQL ] 8.0.33 https://hackmd.io/uPfT8heTT0W4_dJwLtMeCw#WarningPASSWORDlog ``` <!-- ```code [client] port=3306 default-character-set=utf8mb4 [mysqld] character-set-server=utf8 default_authentication_plugin= mysql_native_password authentication_policy=mysql_native_password,, default-storage-engine=INNODB ``` --> ### 檢查CheckTable 在升級到最新的 MySQL 8.0 版本之前,請先執行下述初步檢查來確保目前 MySQL 5.7 或 MySQL 8.0 伺服器實例的升級準備就緒。否則升級過程可能會失敗。 TABLE:session_log * 5.6.x/5.7.29昇到5.7.43要先檢查。 * 任何表都必須變更為使用 InnoDB或變為非分區表。不然原機昇版會失敗 - [dev.mysql.com / 準備升級安裝-Preparing Your Installation for Upgrade](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) 參考: https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html ```sql mysql> use DBslot; ##v5.7 Database changed mysql> check table `session_log`\G *************************** 1. row *************************** Table: DBslot.session_log Op: check Msg_type: status Msg_text: OK *************************** 2. row *************************** Table: DBslot.session_log Op: check Msg_type: warning ***<==5.7要先解決*** Msg_text: The partition engine, used by table 'DBslot.session_log', is deprecated and will be removed in a future release. Please use native partitioning instead. 2 rows in set (13.54 sec) ``` * Dev查詢的三張表。 ***[注意]*** 運行的時間取決資料表的大小。 ```SQL mysql > ## dev.10(v5.x) [warning]The partition engine.待修正 ALTER TABLE `dbslo`.accounting ENGINE = INNODB; ##1.8GB (1 min 21.18 sec) ALTER TABLE `dbslo`.funds_log ENGINE = INNODB; ## 65MB (6.78 sec) ALTER TABLE `dbslo`.session_log ENGINE = INNODB; ##1.8GB (44.18 sec) ``` * 所有的表(partition engine) ```sql mysql> SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.partitions WHERE PARTITION_NAME IS NOT NULL GROUP BY TABLE_SCHEMA,TABLE_NAME ORDER BY TABLE_SCHEMA,TABLE_NAME LIMIT 500; ``` ### 退版本失敗 - **Dev.229(v8034)退小版本(v8033)** - Dev.229(v8034)只有開發機會遇到,線上各DB由5.7.43昇到8.0.33。 - 官方文檔參考: [https://dev.mysql.com/#downgrading.html](https://dev.mysql.com/doc/refman/8.0/en/downgrading.html) :::info **Note** 不支援從 MySQL 8.0 降級到 MySQL 5.7,或從 **MySQL 8.0 版本降級到先前的 MySQL 8.0 版本**。唯一受支援的替代方案是恢復升級之前進行的備份 。因此,在開始升級過程之前必須備份資料。 ::: - 退版本.log ```code 2023-10-12T02:03:36.727633Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead. 2023-10-12T02:03:36.727661Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.33-commercial) starting as process 5200 2023-10-12T02:03:36.728656Z 0 [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. 2023-10-12T02:03:36.750875Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2023-10-12T02:03:40.658744Z 1 [ERROR] [MY-013171] [InnoDB] Cannot boot server version 80033 on data directory built by version 80034. Downgrade is not supported mysqld: Can't open file: 'mysql.ibd' (errno: 0 - ) ``` <!-- 2023-10-12T02:03:40.732220Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine 2023-10-12T02:03:40.733104Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed. 2023-10-12T02:03:40.733301Z 0 [ERROR] [MY-010119] [Server] Aborting 2023-10-12T02:03:40.733831Z 0 [System] [MY-010910] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.33-commercial) MySQL Enterprise Server - Commercial. --> ## 專案分配 整理已配發的帳號使用狀況 ### 專案列表 |No.| Dep. | Obj. | tName | db:Bac | db:Slo | db:Jac | db:Eve |-|-|-|-|:-:|:-:|:-:|:-:| |601| Jm.| py | gm-api | v | | | | |602| Jm.| go | backend | v | v | | | |603| Jm.| go | gm-server | v | v | | | |-|-|-|-|-|-|-|-| |701| 勇 | slot | gm-server | | v | | | |702| 勇 | jack | jp-server | | | v | | |703| 勇 | fish | gm-server | | v | | | |-|-|-|-|-|-|-|-| |501| Ing| web01| backend | v | v | v | | |502| Ing| sa | sa | v | v | v | | |511| Elv| event| backend | r | | | v | |-|-|-|-|-|-|-|-| |-|-|-|-|-|-|-|-| |901| Ad.| admin| admin | | | | | |902| Ad.| read | read-DBs | | | | | |903| Ad.| sys. | monitor | | | | | |-|-|-|-|-|-|-|-| |101| Rd.| User | user0001 | v | | | | |102| Rd.| User | user0002 | v | v | | | |103| Rd.| User | user0003 | v | v | | | |104| Rd.| User | user0004 | | | | | |105| Rd.| User | user0005 | | | | | <!-- ## 設定.ini ### 設定.ini8 * 來源新機:dev.229 (v8.0.34) * 調整說明: 1. 新版預設的值將會移除 2. 調整順序將分區塊 3. 變數更改調整成v8.0 4. 其他... 測試中 --> ## 版本調整 派工任務:Dev.229換MySQL版本成v8033 需求:Dev.229調MySQL版本成v8033 目的:QA進場測試前調整成版v8033 備註: HOST: 192.168.128.229(版本v8034) QA進場測試前調整成預計版本v8033 [作業說明] 參考文件: http://192.168.10.18:8888/doku.php?id=dba:設定文件:s801昇級8033:start 程序說明: 1.原機備份v8034位置說明 [ my.ini]C:\_StoreData\datadir\my.ini [datadir]C:/_StoreData/datadir\Data 以上檔案及資料夾先備份 (調整版本成v8033,使用同樣的檔案) 2.文件從 `#操作昇版` 開始,前先移除MySQL 8034 Dev.229只有一個磁區,程序D磁空間,統一調整成C磁。 3.操作昇版 步驟 5.資料版本昇級: `mysql_upgrade`程序不用作業,只需驗証 `檢查`程序。 完成