---
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`程序不用作業,只需驗証 `檢查`程序。
完成