---
# System prepended metadata

title: DB57機器更版
tags: ['#MySQL']

---

---
tags: MySQL
---
DB57機器更版
===

* author : eason@iplaystar.net
* https://hackmd.io/@KjNH3ny0TBuHP7lIbXqRmQ/rkd0LJoan
* v1002 （DB57機器互換）

## 序論

### 更換說明

:::info
:bulb: ap-mysql異常停止服務
:::

* 事件狀況：線上機ap-mysql異常停止服務 carsh (mysqld.exe)。
* 記錄顯示：查詢[重啟記錄](#重啟記錄)db-27，系統程序影響到應用AP-DB。
* 更換說明：建立單純環境，DB更新5.7新版，解carsh問題。
	> - 預備一台伺機機，用以換置線上掛載的主DB使用的新安裝OS。
	> - 服務MySQL更新版本5.7.43 保留原資料`datadir`。
 
### 更換機器

* 機器說明表：

|No.| **更換前置-名稱** | **更換完成-名稱** |  **說明** |
|--|:-------------:|:------------------:|:-------------:|
|  | `原機IP.A`-(線上機)  | `運行IP.A`-(更換機) | 線上運行的機器  |
|  | `新機IP.B`-(更換機)  | `備用IP.C`-(備份機) | 測試/備份機器  |

* MySQL版本

|No.| **DB版本** | **狀態** |  **說明** |
|--|:-----------:|:--------:|:----------- |
|  | mysql-5.6.26 | 線上A | OS:Win2012     |
|  | mysql-5.7.29 | 線上B | mysql-advanced |
|  | 5.7.43 [2023-07-18GA](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/) | [更版](https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html) | OS:Win2019     |
|暫| 8.0.34 [Mar 16, 2023](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/) | [80版](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) | 預計2023年更新 |

> 192.168.128.10:開發機@5.6.26-log - MySQL Community Server (GPL)
 

 
 
* 事前準備：備一台新機器`新機IP.B`重新安裝，包含：
  > 1. 機型 m5.large空機
  > 2. OS新安裝的環境。
  > 3. MySQL 5.7.43 新安裝。
  > 4. 儲存HD：同等線上或更大的空間。
規格 `新機IP.B`：OS: Windows Server 2019 ,RAM:{同等服務機}GB


## 階段一：更換前置

本程序為事先的預備測試

:::info
* 預備新機器1台
 MIS備一台新機器`新機IP.B`，重新安裝的單純新環境。
:::


### 架DB及測試
維護時間作業程序如下
* DBA架設及檢查
   作業流程參考[#DB架設流程](#DB架設流程) 

* AP掛連DB運行檢查-應用API 
	1. 線上測試AP:各端UI
    2. 線上測試AP:Game-API
    3. 同線上的環境整個流程測試，不影響線上運行檢查。完成

## 階段二：正式更換

在維護時間，依序如下：

### 1.DBA架設及檢查
   作業流程參考[#DB架設流程](#DB架設流程)
   
### 2.AP連線設定 (暫定步驟)
* MIS部門調整更新IP，參考[機器說明表](#更換機器)
	1. 先調整IP `原機IP.A` ==> `備用IP.C`
	2. 後調整IP `新機IP.B` ==> `運行IP.A`
	3. 運行檢查`運行IP.A` 啟動AP程序如同[更換前置](#更換前置)的MySQL運行檢查；更換資料完成。

Note:`備用IP.C`原線上的機器調整成為備份DB,線上DB`運行IP.A` 運行正常數日後即可移除。

### 3.AP掛連DB運行檢查-應用API 
* 維護時間內檢查的QT
	1. AP-Server重啟：應用Service.app相關服務重啟，DB連線需正常。
	3. AP-Web介面檢查：後台及各game運作操作需正常。
	3. 維護導回。

以上完成。


## 傳輸資料表

### 傳輸資料時間
* 來源機器： 建立ufx測試DB環境(m5.large)，
* 記錄所需時間：

|No.| **來源-機型** |**目地-機型** | **檔案大小** | **傳送時間** |   **速度約MB/s** | **說明** |
|----|:----:|:----:|:----:|:----:|:----:|:----:|
|測a| m5.large  | m5.large   |16.9 GB | 21:55.00| 12~20MB/s  | 測8/31 1430
|測b| m5.8xlarge| m5.8xlarge |16.9 GB | 01:47.00| 20~320MB/s | 測8/31 1530 (速度較m5.large快)

<!--
* SysBench 基準測試工具 https://dev.mysql.com/downloads/benchmarks.html
-->

<!--
* 內網傳檔AWS ,檔案大小:16.9
規格:m5.large   ,時間21:55(12-20MB/s) ,測8/31 14:00, 慢
規格:m5.8xlarge ,時間01:47(20-320MB/s),測8/31 15:00,<==快很多
-->

## DB32資訊


### DB32資訊.text

* datadir   172.31.0.189 ,來源:db-32

|No.| **DB版本** | **Size** |  **說明** |
|--|:-----------:|:------------:|:-------------:|
|  | mysql_data      | 2.09 TB (2,306,971,667,577 bytes) |   |
|  | > slot@002dgame| 1.63 TB (1,798,419,729,712 bytes) |   |
|  | > ibdata1(file)|   413GB (  443,602,173,952 bytes) |   |
|  | > jackpot      |   16.8GB (  18,092,414,634 bytes)  |   |


調整大檔
> * 調整大檔:ibdata1
> SQL > show variables like 'innodb_file_per_table';<br>
> 解法調整my.ini：[mysqld]/innodb_file_per_table=1 <br>
> 新建立的 InnoDB 資料表都會使用獨立空間, 即使用屬於自己的 .ibd 檔

*主機狀況
```code
id:db-32
Name:db-ufabet
Microsoft Windows Server 2012 R2 Standard
memory:(RMD) 127 GiB
CPU:2.50 kHz   / Multi-core:32
```


* 線上機資訊 `原機IP.A`
DB32資訊.ini ： my_ufx-ps.ini 注意參數值
```code
MySQL Properties(Local Computer)
C:\mysql-advanced-5.7.29\bin\mysqld --defaults-file=C:\mysql-advanced-5.7.29\bin\my.ini MySQL
Startup type: Automatic

C:\mysql-advanced-5.7.29\bin>mysqld --version
mysqld  Ver 5.7.29-enterprise-commercial-advanced for Win64 on x86_64 (MySQL Ent
erprise Server - Advanced Edition (Commercial))
```



## 重啟記錄

* 機器

|No.| **Srv@版本**   | **重啟時間**        |  **說明** |
|--|:---------------:|:-------------------:|:-------------:|
|  | db-27@5.6.26-log| 2023-09-07 02:05:44  | Xavier(小葉):已緊急升級規格為 r6i.large  |
|  | db-27@5.6.26-log| 2023-09-04 05:42:45 |                                          |
|  | db-22@5.6.26-log| 2023-09-03 09:34:22 |                                          |
|  | db-32@5.7.29-e..| 2023-09-03T15:58:20 |                                          |


### 重啟記錄db-27

* 普羅米修斯psprometheus,資料查詢

~~~code
= Host:db-27

Xavier(小葉) 2023/09/07 上午11:38
今天早上 db-27 發生 carsh ，已緊急升級規格為 r6i.large，這邊附上 mysql_error log 及 my.ini 檔

== OS系統狀況
* 區塊[偵測異常]: 進程數/磁盤剩餘/網路使率/內存詳情
(+8h)2023-09-07 09:36:30~09:38:15  偵測不穩<==異常
(+8h)2023-09-07 09:39:15~10:06:15  偵測不到

* 區塊[偵測不到]: CPU使用率
(+8h)2023-09-07 09:42:30~10:06:45  偵測不到

== AP:3306 停服時間-區塊[偵測不到] 
(+0h)2023-09-07 01:49:30~02:05:44  Error.log
(+8h)2023-09-07 09:49:30~10:05:44  MySQL[Connections]
(+8h)2023-09-07 09:53:15~10:07:00  MySQL[Questions]

== 告警作業
db 告警大約在早上 9:50 左右，(升級設備)大約在 9:53左右去執行動作
~~~

### 重啟記錄-mysql_error.log

重啟時間： mysql_error.log的時間；往前推為carsh時間

* mysql_error.log開始/停服 樣版如下：

~~~code
##AP.5626 運作正常 開始/停服
2023-09-07 02:05:44 1228 [Note] C:\mysql\bin\mysqld.exe: ready for connections.
2023-09-02 01:09:24 2520 [Note] C:\mysql\bin\mysqld.exe: Shutdown complete

##AP.5728 運作正常 開始/停服 db-32
2023-09-03T15:58:20.042505Z 0 [Note] C:\mysql-advanced-5.7.29\bin\mysqld: ready for connections.
2023-08-30T05:27:27.713984Z 0 [Note] C:\mysql-advanced-5.7.29\bin\mysqld: Shutdown complete

##AP.5743 運作正常 開始/停服
2023-09-05T07:29:59.730504Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld: ready for connections.
2023-09-05T09:05:13.936428Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld: Shutdown complete
~~~

<!--
##  db-32@  C:\Users\Eason\Downloads\db_32_mysql_error.log
ON 23932 2023-08-30T09:56:54 mysqld: ready for connections
xx 26496 2023-09-03T15:56:36 [Note] InnoDB: Database was not shutdown normally!
ON 26532 2023-09-03T15:58:20 mysqld: ready for connections
-->


##  原機準備


###  原機檢查

* cmd.exe檢查
```shell
mysql/bin > # v5.x 先檢查
echo [mysqlcheck.star]%date%-%time%                   >> C:\upgradev57_20230927_chk1.txt 
mysqlcheck -u root -p --all-databases --check-upgrade >> C:\upgradev57_20230927_chk1.txt 

echo [mysqlcheck.end.]%date%-%time%                   >> C:\upgradev57_20230927_chk1.txt 
```

* chkN.txt 文字內容
```
slot-game.session_log
Warning  : Trigger slot-game.session_log.session_log_parse_user_agent does not have CREATED attribute.
status   : OK
warning  : The partition engine, used by table 'slot-game.session_log', is deprecated and will be removed in a future release. Please use native partitioning instead.
```

***[說明]***
`does not have CREATED attribute.`，這類文字可省略。
`warning  : The partition engine,`，各機器`table`數量不一定，遇到需各別處理，參考程序[#原機作業](#原機作業)。

###  原機作業

[#原機檢查](#原機檢查)沒有`warning  : The partition engine,`可省略以下作業。
如果遇到有問題的TABLE都要處理。

* SQL調整

作業時間:限在***維護時***
HOST:dev.10.clone()
時間: 整個程序約20分鐘內
以單一資料表 & 開發機共三個表 為例如下：

```sql
## 1.只保留近30日資料
use `slot-game`;
CREATE TABLE `slot-game`.session_log_ztmp202309  LIKE  `slot-game`.session_log ;
ALTER  TABLE `slot-game`.session_log_ztmp202309  ENGINE = INNODB;  
INSERT INTO  `slot-game`.session_log_ztmp202309 (SELECT * FROM `slot-game`.session_log  
  WHERE create_time>=concat(DATE_SUB(CURDATE(),INTERVAL 30 DAY)," 00:00:00") 
);

## 2.調整檔案&TRIGGER
DROP TABLE IF EXISTS   `slot-game`.session_log ;
DROP TRIGGER IF EXISTS `slot-game`.`session_log_parse_user_agent`;
ALTER  TABLE `slot-game`.session_log_ztmp202309 RENAME  `slot-game`.session_log ;

CREATE TRIGGER `slot-game`.`session_log_parse_user_agent` BEFORE INSERT ON `session_log`
 FOR EACH ROW SET NEW.`device_type` = CASE
   WHEN NEW.user_agent REGEXP 'iPad|iPhone|Android|Mobile|Tablet' THEN 2
   WHEN NEW.user_agent REGEXP 'Mac OS X|X11|Windows' THEN 1
   ELSE 0
END ;

## 3.TABLE.session_log完成。
SELECT substr(create_time,1,10)as _day,count(1) FROM `slot-game`.session_log  GROUP BY substr(create_time,1,10) order by substr(create_time,1,10);


## 4.Dev查詢的三張表
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)
```


## DB原機昇版

### 原機昇版步驟

HOST:開發機.231 (原.10)
版本:MySQL 5.7.43 (原機v5.6.26)

[原機昇版]
1. MySQL關閉：停下MySQL服務。
	- Services/Name:"mysql"/內容(R):Properties/Startup type:"Manual"手動 ->[Apply]確定。
	- Services/Name:"mysql"/停止(O):STOP 。確定。
	- 修改"C:\mysql\bin\my.ini"內容:[mysqld] port第6行改"port= 5626"

2. 備份A `datadir` 位置"C:\mysql\data"整個資料夾備份。

3. 下載/安裝/設定 MySQL 5.7.43
	- 下載[MySQL5.7.43](https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.7.43.0.msi)
			https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.7.43.0.msi
	
	- 安裝MySQL （...5.7.43.0.msi）
	```shell
	 MySQL Installer [Cancel]->[Yes] / MySQL Installer [Add ...] / 
	 Select Products > [-]MySQL Server [-]MySQL Server 5.7 --"MySQL Server -X64" => Products To Be Installed:"MySQL Server -X64" [v]Enable the Select Features page to...  [Next]
	 Select Features To Install [Next >]
	 Installation > Product:"MySQL Server"/Arch:"X64"  [Execute] & [Next >]
	 Product Configuration > [Next]
	 Installation Complete >  Type and Networking [Next] > Accounts and Roles / MySQL Root Password:"{xxx密碼xxx}"輸入密碼 & 重複一次密碼 [Next > ]
	 Windows Server > 預設名稱Windows Service Name:"MySQL57" 移除自動開啟[ ]Start the MySQL Server at System Startup [Next >]
	 Server File Permissions > (v)No,I will manage the permissions after the server configuration.[Next >]
	 Apply Configuration > [Execte] & [Finish]  
	```
	 
	- MySQL關閉：停下MySQL服務。
	```shell
	  Services/Name:"MySQL57"/內容(R):Properties/Startup type:"Manual"手動 ->[Apply]確定。
	  Services/Name:"MySQL57"/內容(R):Properties/-Log On-(v)Local System account ->[Apply]確定。
	  Services/Name:"MySQL57"/停止(O):STOP 。確定。
	```


4. 檢視安裝檔案位置
	```shell
	程式位置 "C:\Program Files\MySQL\MySQL Server 5.7\bin\" 
	設定更名 "C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" ，更名”OriginalFile5743.my.ini
	建新設定 "C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"來源"C:\mysql\bin\my.ini"  參數[#原機my.ini](#原機my.ini)。
	```
	- 攺設定my.ini：產生bin-log檔，調整參數[#原機my.ini](#原機my.ini)。
	- 資料庫夾`datadir`的移檔:"C:\_StoreData\data5743" 將舊版`datadir`移入。
	- 移除檔案 `ib_logfile0`,`ib_logfile1`,`mysql_error.log`,`ps-service-slow.log` & 備份(file)
	- 開啟"MySQL57"：Services/Name:"MySQL57"/啟動(S):Start 。確定。
	- 確定服務開啟，如果未能啟動請：特別留意> [#啟不來](#啟不來)，修正到Status:Running 服務中。
	

5. 資料版本昇級：mysql_upgrade & 檢查
    - 資料昇級mysql_upgrade檢查
	```script
	C: 
	cd \Program Files\MySQL\MySQL Server 5.7\bin 
	echo   [upgrade.star]%date%-%time%  >> C:\_StoreData\ztmp_e5729\upgrade57_5743.log
	mysql_upgrade -u root -p --force    >> C:\_StoreData\ztmp_e5729\upgrade57_5743.log
	echo   [upgrade.end]%date%-%time%   >> C:\_StoreData\ztmp_e5729\upgrade57_5743.log
	檢查不要有Eroor
	```
	- 測試參考 [#架設S3-完成測試](#架設S3-完成測試)


6. 營運前準備&備份資料庫
	- 重點my.ini (v5.7.43)
	```text
	[mysql]
	port= 3306
	datadir=D:/_StoreData/data5743   ##資料區
	event_scheduler = ON   ##排程:主DB啟用正試開始
	server-id	= 20230927 ##UUID:同機群的唯一代號(int),主從架構使用
	```
	- 服務停用:Services/Name:"MySQL57"/停止(O):STOP 。確定。
	- 攺設定my.ini：啟用排程。[mysqld] event_scheduler = ON
	- 刪除雜檔 
	```text
	C:\_StoreData\data5743 ##移除檔案限包含如下 
	ib_logfile%
	mysql-bin.0%
	mysql-bin.index
	PS-SERVICE.err
	PS-SERVICE-slow.log
	```
	- 備份B`datadir`，開啟前的初始備份。 位置:"D:\_StoreData\data5743" 整個資料夾備份。
	- 服務啟動:Services/Name:"MySQL57"/啟動(S):Star 。確定。
	
7. 昇級完成
	- 檢查MySQL產生的log,不要有`Error` 等訊息產生
	- 掛載-監視應用程序。
	- 完成。


完成


<!--
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql_upgrade -u root -p --upgrade-system-tables --force
Enter password: ********
The --upgrade-system-tables option was used, databases won't be touched.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading the sys schema.
Upgrade process completed successfully.
Checking if update is needed.
C:\Program Files\MySQL\MySQL Server 5.7\bin>
-->

<!--

5. MySQL開啟：開始服務,收取異動BinLog檔案,測試v5743版
6. 測試參考 [#架設S3-完成測試](#架設S3-完成測試)
7. 備份binlog: Path:"C:\mysql\data\"的檔名"mysql-bin.000001" 備份
8. 停下MySQL,進行昇級。
-->


### 原機my.ini

Host: DB-27
Version:5.6.26 ->5.7.43

* FilePath "C:\mysql\bin\my.ini",增加log記錄
```code 
[mysqld]

## All-Query.log
#general_log = on  ##所有Query全部保留 *注意* 要記得關
#general_log_file="C:/mysql/tmp/20230911_allQuery.log"


## Bing-log ## 
server-id	= 20230911 ## 
log-bin=mysql-bin      
binlog_format=row
max_binlog_size  = 1G

## SlowQuery
slow-query-log = 1
long_query_time = 5

```

### 原機db27

* C:\mysql\data ,共311 GB
Date:2023-09-11 掛測資料狀況

| No. | Path | GB | bytes  |
|-|-|----: | ----:|
| dir | C:\\mysql\\data | 311 | 334,395,992,851  |
|  | backstage |  | 65  |
|  | jackpot |  | 15,211,070  |
|  | mysql |  | 57,521,636  |
|  | performance_schema |  | 485,447  |
|  | test |  | 65  |
|  | slot@002dgame | 289 | 311,169,516,546  |
| 檔 | ibdata1 | 20.5 | 22,024,290,304  |

[HD]Dirve C:共799GB ,Used 337GB/Free 461.GB

* DB-27 
 - Windows Server 2012 R2
 - memory(RAM):16.0GB
 - Version: '5.6.26-log'  socket: ''  port: 3306  MySQL Community Server (GPL)


### DB27昇版


[原機昇級5.7]
依照序順如下
1. 原機5.6.26停服：
   - 啟動類型(E)改手動：`Service` > Name "mysql"  服務5.6版，Startup type:Manual(手動)，[OK]確定存檔
   - 啟動類型(E)改手動：`Service` > Name "mysqld_exporter" ，Startup type:Manual(手動)，[OK]確定存檔 
   - "mysql"停服：`Service` > Name "mysql"
  
  
2. 移除MySQL程式： 
   - 停服MySQL：安全停下mysql.exe，確保資料正確`datadir`。 
   - 資料區檔案： 保留`datadir`，原機位置"D:\mysql_data"。 
   - `系統設定`/`新增或移除程式`，應用程式執行別名:"MySQL"的應用程序[解除安裝]移除。
   - AP位置移除`C:\Program Files\MySQL\MySQL Server 5.7` 、 `C:\ProgramData\MySQL` 

3. 安裝程式 MySQL 5.7新版：注意項目
   - 使用`手動`開始: 移除不勾選，[ ] Start the MySQL Server at System Startup #重啟時不自動 開啟

4. 資料庫檔案架設：參考以下[#架設流程](#DB架設流程)，將資料檔案掛入MySQL。完成DB原機昇版。


## DB架設流程

[備好環境](#更換機器)後，DB架設程序[先試操作](#階段一：更換前置)之後，[正試站維護](#階段二：正式更換)能在十分鐘內完成，程序包含 
> [1-服務檢查](#架設S1-服務檢查)：新機環境的檢查。
> [2-新機設定](#架設S2-新機設定)：運行配置及設定。
> [3-完成測試](#架設S3-完成測試)：SQL測試及監視應用程序檢查。
>  DB更換時間：十分鐘

### 架設S1-服務檢查

[新機檢查]
1. 環境版本：環境OS版本(Windows Server 2019) & 記憶體配置是否同線上 。
2. 服務Service ：開始，停止及設定 Windows 服務。 
 > 服務(Service)/名稱(Name)> 找到 “MySQL57”    目前狀態要是停止(O) 
 >
 > 可執行檔所在路徑
 > - "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" MySQL57
 >
 > 啟動類型(E):
 > - 手動
 
### 架設S2-新機設定

1.設定my.ini：參考[#架設my.ini](#架設my.ini)參數配置。
2.檔案配置：資料夾&備份檔的正確位置。
~~~javascript
/* 建立資料夾 */
cd D:\
mkdir _StoreData
cd _StoreData
mkdir tmpdir 
mkdir tmp_202309backup 

/* 移改檔案夾`datadir`-主資料區 */
move "D:\mysql_data" "D:\_StoreData\datadir" 

/* 搬移檔案(file)到備份區 */
cd D:\_StoreData\datadir 
move *slow.log         ../tmp_202309backup/
move *error.log        ../tmp_202309backup/
move ib_*              ../tmp_202309backup/
move {*備份檔案File*}  ../tmp_202309backup/

/* 檔案配置-完成 */
~~~
:::danger
:mega: 使用的資料(datadir)，
需安全停服(mysqld.exe)寫入的檔案使用。
(原機位置"D:\mysql_data" )
:::

3. 資料檢查mysqlcheck
  時間允許下可再執行檢查指令
~~~shell
cd C:\Program Files\MySQL\MySQL Server 5.7\bin 
mysqlcheck --all-databases -u root -p
~~~

4. mySQL開啟: 服務(Service)/名稱(Name)> 找到 "MySQL57" 啟動(S)
5. mySQL日誌：如果未開啟正常mysqld.exe服務，查Error.log有"Error"排除。  
6. 調版檢查：在cmd下用使用如下的指令  mysql_upgrade
~~~shell
cd C:\Program Files\MySQL\MySQL Server 5.7\bin 
mysql_upgrade -u root -p --upgrade-system-tables --force
>Enter password: ****************
>.... Upgrade process completed successfully.
> Checking if update is needed.
//  mysql_upgrade 檢查完成
~~~
完成。

### 架設S3-完成測試

1. SQL語法測試：新增異動資料檢查。

```javascript= 
# shell> mysql -uroot -p ;
mysql > SELECT version(),now(),sleep(5);
USE `slot-game`;
CREATE TABLE z_session_recovery_202309 LIKE  session_recovery;
INSERT INTO  z_session_recovery_202309 (SELECT * FROM session_recovery);

UPDATE `z_session_recovery_202309` SET `create_time` = '2020-05-07 13:25:08' WHERE `z_session_recovery_202309`.`id` = '++tBhoWwlk0NyZ+k81aEPA=='; 
UPDATE `z_session_recovery_202309` SET `create_time` = '2020-05-07 13:25:07' WHERE `z_session_recovery_202309`.`id` = '++tBhoWwlk0NyZ+k81aEPA=='; 
DELETE FROM `z_session_recovery_202309`  WHERE `z_session_recovery_202309`.`id` = '++tBhoWwlk0NyZ+k81aEPA=='; 

DROP TABLE   z_session_recovery_202309 ;

## 以上回應都要是回應"Query OK,"

### 測試二：Procedure 、event
USE `slot-game`;
CREATE TABLE z_acc_member_game_daily LIKE  acc_member_game_daily;
INSERT INTO  z_acc_member_game_daily (SELECT * FROM acc_member_game_daily      WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59');
UPDATE      `z_acc_member_game_daily` SET `game_day` = '2023-09-08 00:00:01'   WHERE 1; 
DROP TABLE  `z_acc_member_game_daily` ;

#SELECT count(1),max(game_day),'Test_2OLAP' as `dba` FROM acc_member_daily_new  WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59' LIMIT 1;
#SELECT count(1),max(game_day),'TestSource' as `dba` FROM acc_member_game_daily WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59' LIMIT 1;
 
SELECT   game_id,subgame_id,count(1)as _cou         FROM acc_member_game_daily WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59' 
Group by game_id,subgame_id  LIMIT 1;

SELECT game_id,subgame_id,host_id ,count(1) FROM acc_member_game_daily 
 WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59' 
 group by game_id,subgame_id ;

call calc_acc_member_daily('2023-09-08');
SELECT 'call_fun2',get_game_type('PSS-ON-00116',0) ,get_game_type('PSF-ON-00006',2),
 count(1) FROM acc_member_daily_new WHERE game_day>='2023-09-08 00:00:00' AND game_day<='2023-09-08 23:59:59'  \G 

# flush logs;
```


2. DB記錄.log寫入：`log-error` 、`slow_query_log_file` 正常有值。
3. 掛載-監視應用程序：(psprometheus)需有掛上服務`MySQL Overview(wmi_expoorter)`、`主機細節_windows`。

```SQL
mysql> call calc_acc_member_daily('2023-09-08');
MySQL 回應： #1665 - Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
```


:::success
:tada: DB架設流程 
架設如有疑問,請知會 eason@iplaystar.net  2023/9/8
:::


### 架設my.ini

RDBS-MySQL5.7.43設定
* Host:測試db-32 ,v5.7.29
* FilePath: C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

```javascript=
[client] 
socket          = "D:/_StoreData/datadir/mysql.sock"
default-character-set=utf8mb4

[mysqld]
port= 3306
socket  = "D:/_StoreData/tmpdir/mysql.sock"
basedir = "C:/Program Files/MySQL/MySQL Server 5.7" 
tmpdir  = "D:/_StoreData/tmpdir"
datadir = "D:/_StoreData/datadir"

pid_file = "mysql.pid"
log_error = "mysql_error.log"
#(E) plugin_dir = "C:/mysql-advanced-5.7.29/lib/plugin/"  ##取預設值
#(E) plugin-load-add=thread_pool.dll

## MySQL5.7.x  log.err[Warning]
# explicit_defaults_for_timestamp = OFF 
# tls_version = "TLSv1,TLSv1.1,TLSv1.2"  

##sql_mode=NO_ENGINE_SUBSTITUTION
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
skip-federated
skip-name-resolve
default-time-zone = "+00:00"
server-id	= 20230906 
event_scheduler = ON

slow-query-log = 3

query_cache_size = 0
table_open_cache = 10000
wait_timeout = 3000
max_connections = 2000

tmp_table_size = 32M
sort_buffer_size = 16M
read_buffer_size = 64M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 8M
join_buffer_size = 16M
thread_stack = 196K

max_allowed_packet = 512M
net_buffer_length = 8K

## ==character-set
character-set-server=utf8

## ==innodb.... 
## innodb_force_recovery = 0    ## DBA.202309

## innodb_buffer_pool_size = 72G
innodb_buffer_pool_size =  1G ##78G    
innodb_buffer_pool_instances = 52
innodb_buffer_pool_chunk_size = 1610612736

innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_file_size = 1G ##16G
innodb_log_buffer_size = 8M
innodb_lock_wait_timeout = 100
innodb_flush_log_at_trx_commit = 1
innodb_write_io_threads = 26
innodb_read_io_threads = 26
innodb_page_cleaners = 52
innodb_io_capacity = 2000
innodb_io_capacity_max = 13000
innodb_flush_method = normal
innodb_flush_neighbors = 0

[mysqldump]
quick
max_allowed_packet = 512M

[mysql]
no-auto-rehash
default-character-set=utf8mb4

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
```


## 基準測試

### 基準SysBench Benchmark Tool
https://dev.mysql.com/downloads/benchmarks.html
檔案下載-DBT2：https://downloads.mysql.com/source/dbt2-0.37.50.16.tar.gz 
檔案下載-SysBench ： https://downloads.mysql.com/source/sysbench-0.4.12.16.tar.gz

```shell
cd C:\>cd C:\ec_web\tool_sysbench


```

* how-to-install-sysbench-on-windows.html
http://mafiameister.blogspot.com/2017/02/how-to-install-sysbench-on-windows.html


C:\Program Files\MySQL\MySQL Server 5.7\include\mysql.h



## 會議討論


### 會議0829
討論群組:[SRE & DBA 群]
~~~code
[SRE & DBA 群]
已釘選 Jill(大J) 8/29(二)下午4:40 >

ufx維護完以後請執行以下動作，流程如下：
(由於要測試機器規格是否會影響傳輸速度，故會分兩段動作)

----(以下為新建mysql最新5.7，以及倒資料，並確認內網IP是否能維持不變)----
1).「維運」提供一台m5.large空機, 以及mysql 5.7最新版的安裝檔，提供給「DBA」
2).「DBA」於空機安裝最新版mysql 5.7，安裝完畢通知「維運」
3).「維運」
 a. 快照該5.7最新版環境
 b. 建立ufx測試DB環境(m5.large)，供「DBA」倒資料使用『簡稱：快照舊DB』
4).「DBA」
 a. 測試倒資料，並記錄所需時間。
 b. 倒完資料後通知「維運」將『快照舊DB』關機
 c. 測試『新DB』使用是否正常。
5).「維運」確認內網IP是否能維持不變。

----(以下為換規格看是否影響傳輸)----
1).「維運」
 a. 使用5.7最新版快照建立m5.8xlarge
 b. 建立ufx測試DB環境(m5.8xlarge)，供「DBA」倒資料使用
2). 「DBA」
 a. 測試倒資料，並記錄所需時間。
 b. 倒完資料後通知「維運」將該兩台m5.8xlarge機器關機。

DBA的動作都須將流程紀錄，並提供時間。供維運正式動作時可執行。


Jill(大J) 下午4:47
@Eason @MaxLee (李麥斯) @yuri(小希) @Xavier(小葉)
~~~
* DBA作業：新機更換5.7新版流程紀錄；參考 [#DB架設流程](#DB架設流程)


### 會議0911 

* 會議記錄9/11  
討論群組:[PS主DB升級事件]
~~~code
Jill(大J) 9/8(五) 下午5:43
目前mysql 升級8升級遇到以下事件，所以須先解決線上問題，再進行升級。
遇到問題事件：

線上DB會無預警crash
DB版本不統一
windows OS過舊
升級mysql 8主要流程為：

步驟1：將正式機器統一mysql 5.7.43 企業版
步驟2：將正式機器升級mysql 8 企業版

== 「步驟1」的動作： ==
流程：

1. [維運]db-27(5.6) 找時間Shut down 該db後，clone一台，並移交給[DBA]
2. [DBA]測試5.6直升5.7.43，列出步驟以及所需時間。並將步驟移交給[維運]，([維運]記得將該測試db關機)
3. [維運]為了測試模擬u站直升的流程，所以須將u站stage rds改成ec2 windows 2019 mysql5.7.29版本 使用上述流程將mysql 5.7.29升級5.7.43。記得將升級時間記錄下來。u站stage改成ec2 windows 2019 mysql 5.7.43後移交給[QA]進行送測
4. [QA]+[BU00/01/02]stage進行送測，因上述動作有異動到內網IP，故需請相關單位[BU00/01/02]進行內網IP的調整，並且各單位[BU00/01/02]須將該流程動作記錄下來，並且評估時間，為了之後換機器須遵照此次流程進行調整。
* 額外動作：
[維運]找時間將u站正式站小工具搬移至另外的ec2 windows 2012
[維運]如果流程4動作完畢，u站又掛掉的話，可以找時間直升u站 mysql 5.7.43

＿以下全部單位需進行配合轉移＿

1~4流程完成後，
將正式環境db環境全數轉為：windows 2019, mysql 5.7.43
全單位[BU00/01/02]須配合[維運]時程一起進行動作(因為會換內網IP所以全部單位都要動作)

流程(由維運進行時程的指揮動作)：

5. (低)流量的db先挑一台進行轉移，確定沒問題後會分批進行db轉移(低流量的db)
6. 根據(低)流量的轉移情況，調整剩餘的db(中高流量的db)。

== 「步驟2」的動作： ==
流程(RD應用層的測試)：

1. dev建置一台mysql 8的環境，供有需要的人自行使用(目前已經建置完畢)
2. dev建置一台獨立的ps api 連線mysql 8的環境，供有需要的人自行使用(預計下週一建置完畢)；如果使用該ps api有問題，麻煩各GS的單位[BU01/02]反應給[BU00]。
3. 若個單位使用dev mysql 8，問題都修正完畢會移交[QA]進行dev的測試
4. dev測試完畢後，會再討論與各單位討論mysql 8 上stage的流程。
備註(非常重要)：因正式mysql 8升級是分批進行，故各單位需確保語法相容mysql 5.7.43 + mysql 8。

＿＿＿＿＿＿

流程(db測試)：(db測試順序可自行安排)

1. [維運]db-32 找時間Shut down 該db後，clone一台，並移交給[DBA]clone的機器，需降規至m5.large
2. [DBA]使用db-32 clone機模擬mysql 5.7.43升級至mysql 8。並將最終可行步驟移交給[維運]。(步驟須在6小時內動作完畢)。(若機器規格會影響動作時間，可升級機器進行模擬)
3. [DBA]將某台DB(之後SRE會提供編號) binlog打開，先收集異動語法update delete insert，針對其收集語法進行評估，看是否相容mysql 8。
4. 呈上，收集 binlog select語法，針對其收集語法進行評估，看是否相容mysql 8。
5. 針對現在mysql 5.7的procedure, event, trigger進行評估，看是否相容mysql 8。
~~~

~~~code
下午5:10
截圖是目前我們針對MYSQL 8 升級的所有任務項目

圖片已上傳至：2023-9-11 下午5:11

會議記錄摘錄

請各部門新增工作卡片: 步驟1 #檢查&確認docker和程式包的內網IP，並且在工作完成後，至MySQL 8 進度同步將該卡片標示已完成
補充說明: 更換機器後，換機器就會影響到內網IP會跑掉，所以想要直接在stage站去模擬，送測有要動的要把動作記錄下來，在正式站要做的時候，商戶會掛維護，程式要記得修改內網IP

9/15(周五)前請各部門回覆(步驟1&步驟2)可執行的時程:
步驟1 可升級至5.7.43的時程
步驟2 5.7.43升級至8.0的時程
(1) DEV站的時程 (2) STAGE站的時程 補充說明:因為QA還是要持續測式專案，DEV的DB還是會維持兩台，所以RD要確保語法必須要支援5.7.43跟MYSQL 8.0，修改程式時要注意程式在兩邊連線切換要相容
下午5:12
以上訊息請注意有標``底框的部分
~~~

### 會議DBA時程

date:v2023/09/12 15

* DBA-MySQL昇版時程 

| 站別(Host)\\週次 | 9-22 | 9-29 | 9-29 | 10-06 | 10-13 | 10-20  |
|-|-|-|-|-|-|-|
| DEV(原機.10) | v5.7.43 |         |  |         |  |   |
| DEV(新建v80) |         | v8.0.34 |  |         |  |   |
| STAGE(db-27) | v5.7.43 |         |  | v8.0.34 |  |   |
| onLine(db-32)|         | v5.7.43 |  |         | v8.0.34 |   |

各端DEV/STAGE/onLine依 「步驟1」後接「步驟2」作業，以下為說明：
1. 上表 `DBA-MySQL昇版時程`以當週週三進行；各更新機前一星期請`維運`架好模擬環境供DBA先測試。
2. `維運`作業文件，當週前完成測試，正式站機群交由維運排程。
3. MySQL8.0使用(暫定)預設參數 [`sql_mode`包含`ONLY_FULL_GROUP_BY`](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html) 進行測試。
4. MySQL8.0各AP全面測試，如遇修正/測試延期(STAGE & onLine)上線時間在安排。
5. MySQL8.0-SP進行評估，預計8/29完成。新版可行，但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。

-----


### 使用檔案 

* 新空機
測試機的位置狀況
~~~code
\\192.168.10.18\work\???\??\Xavier\mysql-installer-community-5.7.42.0.7z

## Shell
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" MySQL57a
mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"   MySQL57a

## Microsoft Visual C++ Redistributable latest supported downloads

* https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
Dowland=>  https://aka.ms/vs/17/release/vc_redist.arm64.exe

## Download MySQL 5.7.43
https://dev.mysql.com/downloads/windows/installer/5.7.html
https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.7.43.0.msi
~~~

### 官網下載 

~~~code
MySQL企業版
適用於 Microsoft Windows x64（64 位）的 MySQL 服務器 8.0.34
v		V1036820-01.zip		MySQL 商業服務器 8.0.34 ZIP，適用於 Windows x86（64 位），268.0 MB
v		V1036819-01.zip		適用於 Windows x86 的 MySQL Commercial Server 8.0.34 ZIP（64 位，調試測試），679.1 MB

總共 2 個不同的文件		總大小 947.0 MB
~~~


## 檢查Dev.10

Date:2023/10/02 10:30 

```javasript
#use Dev.10; 
mysql>
ALTER TABLE `slot-game`.accounting   ENGINE = INNODB; 
ALTER TABLE `slot-game`.funds_log    ENGINE = INNODB; 

ALTER TABLE `jackpot`.`period_log` UPGRADE PARTITIONING ;
ALTER TABLE `platform`.`acc_member_daily` UPGRADE PARTITIONING ;
ALTER TABLE `platform`.`acc_member_daily_new` UPGRADE PARTITIONING;
ALTER TABLE `platform`.`acc_member_hourly` UPGRADE PARTITIONING;
ALTER TABLE `revenue_protect`.`winlimit_game_minutely` UPGRADE PARTITIONING;
ALTER TABLE `revenue_protect`.`winlimit_member_game_minutely` UPGRADE PARTITIONING;
ALTER TABLE `slot-game`.`acc_game_daily` UPGRADE PARTITIONING;
ALTER TABLE `slot-game`.`acc_game_hourly` UPGRADE PARTITIONING;
ALTER TABLE `slot-game`.`acc_game_minutely` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_game_minutely2` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_game_minutely3` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_member_daily` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_member_daily_new` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_member_game_daily` UPGRADE PARTITIONING           ;
ALTER TABLE `slot-game`.`acc_member_game_hourly` UPGRADE PARTITIONING          ;
ALTER TABLE `slot-game`.`acc_member_game_jackpot_daily` UPGRADE PARTITIONING   ;
ALTER TABLE `slot-game`.`acc_member_game_jackpot_hourly` UPGRADE PARTITIONING  ;
ALTER TABLE `slot-game`.`acc_member_game_minutely` UPGRADE PARTITIONING        ;
ALTER TABLE `slot-game`.`acc_member_game_minutely2` UPGRADE PARTITIONING       ;
ALTER TABLE `slot-game`.`acc_member_game_minutely3` UPGRADE PARTITIONING       ;
ALTER TABLE `slot-game`.`acc_member_hourly` UPGRADE PARTITIONING               ;
ALTER TABLE `slot-game`.`acc_member_minutely` UPGRADE PARTITIONING             ;
ALTER TABLE `slot-game`.`acc_member_minutely2` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_member_minutely2_with_jp` UPGRADE PARTITIONING    ;
ALTER TABLE `slot-game`.`acc_member_minutely2_without_jp` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_member_minutely3` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_member_minutely3_with_jp` UPGRADE PARTITIONING    ;
ALTER TABLE `slot-game`.`acc_member_minutely3_without_jp` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_robot_game_daily` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_robot_game_hourly` UPGRADE PARTITIONING           ;
ALTER TABLE `slot-game`.`acc_robot_game_minutely` UPGRADE PARTITIONING         ;
ALTER TABLE `slot-game`.`acc_robot_game_minutely2` UPGRADE PARTITIONING        ;
ALTER TABLE `slot-game`.`acc_robot_game_minutely3` UPGRADE PARTITIONING        ;

ALTER TABLE `slot-game`.`acc_robot_member_daily` UPGRADE PARTITIONING                ;
ALTER TABLE `slot-game`.`acc_robot_member_daily_new` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_robot_member_game_daily` UPGRADE PARTITIONING           ;
ALTER TABLE `slot-game`.`acc_robot_member_game_hourly` UPGRADE PARTITIONING          ;
ALTER TABLE `slot-game`.`acc_robot_member_game_minutely` UPGRADE PARTITIONING        ;
ALTER TABLE `slot-game`.`acc_robot_member_game_minutely2` UPGRADE PARTITIONING       ;
ALTER TABLE `slot-game`.`acc_robot_member_game_minutely3` UPGRADE PARTITIONING       ;
ALTER TABLE `slot-game`.`acc_robot_member_hourly` UPGRADE PARTITIONING               ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely` UPGRADE PARTITIONING             ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely2` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely2_with_jp` UPGRADE PARTITIONING    ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely2_without_jp` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely3` UPGRADE PARTITIONING            ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely3_with_jp` UPGRADE PARTITIONING    ;
ALTER TABLE `slot-game`.`acc_robot_member_minutely3_without_jp` UPGRADE PARTITIONING ;
ALTER TABLE `slot-game`.`acc_robot_win_times` UPGRADE PARTITIONING                   ;
ALTER TABLE `slot-game`.`acc_win_times` UPGRADE PARTITIONING                         ;
ALTER TABLE `slot-game`.`accounting` UPGRADE PARTITIONING                            ;
ALTER TABLE `slot-game`.`accounting_bonus` UPGRADE PARTITIONING                      ;
ALTER TABLE `slot-game`.`accounting_free` UPGRADE PARTITIONING                       ;
ALTER TABLE `slot-game`.`accounting_free_bonus` UPGRADE PARTITIONING                 ;
ALTER TABLE `slot-game`.`accounting_robot` UPGRADE PARTITIONING                      ;
ALTER TABLE `slot-game`.`accounting_vp1` UPGRADE PARTITIONING                        ;
ALTER TABLE `slot-game`.`bac_game_log` UPGRADE PARTITIONING                          ;
ALTER TABLE `slot-game`.`funds_coin_log` UPGRADE PARTITIONING                        ;
ALTER TABLE `slot-game`.`funds_log` UPGRADE PARTITIONING                             ;
ALTER TABLE `slot-game`.`member_medal_log` UPGRADE PARTITIONING                      ;
ALTER TABLE `slot-game`.`member_refund_log` UPGRADE PARTITIONING                     ;
ALTER TABLE `slot-game`.`member_wallet_log` UPGRADE PARTITIONING                     ;
ALTER TABLE `slot-game`.`session_log` UPGRADE PARTITIONING                           ;

```


### 啟不來

* Services > Name:MySQL57
The MySQL57 service on Local Computer stated and then stopped. Some services stop automatically if theay are not in use by other services or programs.

	[解決步驟]
	- step1, 快捷鍵 Windows + R 開啟(Open)。
	- Step2. 輸入 eventvwr.msc ，[Enter]，開啟 Event Viewer。
	- Step3. 點入EventViewer()->Windows Log -> Application 找到對應的Service的Error log查看詳情。
	- Step4. 根據 Details，解決問題。

