真實 MySQL Inspector 前置確認

返回文件首頁

真實 MySQL Inspector 前置確認

1. 文件目的

本文件整理進入「真實 MySQL Inspector」前需要確認的實作邊界、資料來源、連線安全、查詢欄位、測試策略與停止條件。

此節點仍屬於實作前確認,不會新增 MySQL 套件、不會連線資料庫、不會讀取真實 information_schema,也不會執行任何 DDL。

2. 目前前置狀態

項目狀態
MySQL 版本使用者指定為 MySQL 5.6.2
Schema Attribute已完成第一版設計與實作
SQL Generator已完成 CREATE TABLE IF NOT EXISTSADD COLUMNADD INDEX
Schema Inspector 抽象已完成 ISchemaInspector 與 mock inspector
Dry Run Planner已可用 mock schema 產生新增欄位、索引與人工確認項目
Schema Initializer已完成 DryRun 第一版
ConsoleHost 顯示已可呈現 Schema Initializer DryRun 結果
自動測試dotnet test 通過 318 個測試
最新程式 commitac52376
真實 MySQL 套件尚未導入,導入前需另行確認
真實 MySQL 連線尚未執行,連線前需另行確認
DDL / Apply尚未執行,任何寫入 DB 行為需另行確認

3. 本節點建議目標

真實 MySQL Inspector 第一版建議只做「唯讀 schema snapshot」,目標是把既有資料庫現況轉成專案內部 schema model,交給 Dry Run Planner 比對。

目標說明
讀取 table metadatainformation_schema.TABLES 取得 table 名稱、註解、engine、collation
讀取 column metadatainformation_schema.COLUMNS 取得欄位型別、nullable、default、comment、順序
讀取 index metadatainformation_schema.STATISTICS 取得 index 名稱、欄位順序、unique 狀態
判斷 primary key優先由 STATISTICSPRIMARYKEY_COLUMN_USAGE 判斷
轉成 snapshot轉成現有 SchemaDefinition / TableDefinition / ColumnDefinition / IndexDefinition 相容結構
串接 Dry Run用真實 DB snapshot 與 C# 目標 schema 產生 Dry Run Plan

4. 明確不做的事

不做項目原因
不執行 CREATE TABLEInspector 只讀,不負責建表
不執行 ALTER TABLE避免尚未確認前修改資料庫
不執行 DROP / MODIFY / CHANGE破壞性或高風險 SQL 必須另行設計與確認
不把密碼寫進 repo密碼、token、連線字串不可進入文件或程式碼
不把 MySQL 套件放進 Core避免 Core 依賴外部 DB provider
不改 ConsoleHost 啟動方式CLI 參數與正式啟動流程需另行確認
不自動套用 Dry Run 結果Dry Run 只輸出計畫,不等於 Apply

5. 連線資訊與安全規則

真實 Inspector 需要 DB 連線資訊,但第一版規劃應先定義資訊來源,不直接收集密碼。

資訊建議處理
Host / IP可由本機設定檔或環境變數提供
Port預設 3306,但需允許覆寫
DatabaseName必填,只允許讀取指定 database
User建議使用唯讀帳號
Password只允許由環境變數、Secret 或本機未納版設定提供
SSL / Timeout第一版可先保留設定欄位,實作時再確認預設值
ConnectionString不建議完整寫入 repo,應由安全來源組合

建議第一個真實測試帳號只給:

SELECT 權限
information_schema 讀取能力
不得具有 CREATE / ALTER / DROP 權限

6. information_schema 查詢欄位

6.1 information_schema.TABLES

欄位用途
TABLE_SCHEMA限定指定 database
TABLE_NAME對應 table name
TABLE_COMMENT對應 table description
ENGINE確認 table engine
TABLE_COLLATION後續判斷 charset / collation

6.2 information_schema.COLUMNS

欄位用途
TABLE_NAME對應所屬 table
COLUMN_NAME對應欄位名稱
COLUMN_TYPE保留完整 MySQL 型別,例如 varchar(64)
DATA_TYPE判斷基礎型別,例如 varcharintdatetime
CHARACTER_MAXIMUM_LENGTH字串長度
NUMERIC_PRECISION / NUMERIC_SCALE數值精度
IS_NULLABLE是否允許 null
COLUMN_DEFAULT預設值
COLUMN_COMMENT欄位描述
ORDINAL_POSITION欄位順序

6.3 information_schema.STATISTICS

欄位用途
TABLE_NAME對應所屬 table
INDEX_NAME對應 index 名稱
COLUMN_NAMEindex 欄位
NON_UNIQUE判斷 unique / non-unique
SEQ_IN_INDEX還原複合 index 欄位順序

7. MySQL 5.6.2 注意事項

項目注意
JSON 型別MySQL 5.6.2 不支援原生 JSON,需使用 TEXT
datetime(3)需確認 5.6.2 環境是否支援 fractional seconds;若不穩定,第一版先用 datetime
utf8mb4需確認資料庫與 table collation 是否支援,否則先採既有 DB 設定
index 長度varchar 欄位建立索引時需注意編碼與長度限制
default valueTEXT 欄位不可隨意設定 default
commenttable / column comment 可讀,但不同環境可能有空字串或編碼差異

8. 建議實作位置

類型建議位置原因
真實 MySQL InspectorInfrastructure 或 schema 專屬模組需要依賴 MySQL provider,不應放入 Core
ISchemaInspector沿用目前抽象讓 mock 與真實 Inspector 可替換
連線設定 modelInfrastructure config 或 ConsoleHost 專用設定避免污染 Core schema model
測試替身Tests helper / mock inspector單元測試不依賴真實 DB
真實 DB 驗證獨立人工驗證節點避免 CI 需要密碼與外部 DB

9. 測試與驗證策略

第一版建議拆成三層:

層級驗證方式是否需要真實 DB
SQL query builder 測試驗證產生的查詢包含 database filter 與必要欄位
row mapping 測試用假資料列轉成 schema snapshot
真實 DB 人工驗證使用唯讀帳號讀取指定 database 並輸出 Dry Run Plan是,但需另行確認

真實 DB 人工驗證節點需回報:

10. 停止條件

遇到以下情況必須停下確認:

情況原因
要新增 MySqlConnector 或其他 DB 套件屬於新增核心套件
要建立真實 connection string可能涉及密碼與環境資訊
要連線實際 MySQL會碰到外部服務與權限
要讀取 information_schema已進入真實 DB metadata 存取
要執行 CREATE / ALTER / DROP會修改資料庫
要調整 public method 簽章可能影響既有契約
要改 ConsoleHost 啟動方式可能影響使用流程

11. 建議實作順序

12. 本次結論

可以進入「MySqlSchemaInspector 實作前確認清單」。

但下一步若要真的導入 MySqlConnector、建立連線資訊、讀取真實 information_schema 或接上 ConsoleHost 啟動參數,仍需先取得使用者確認。

返回文件首頁