---
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,解決問題。