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