---
# System prepended metadata

title: DB80開發機
tags: ['#MySQL']

---

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



