首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Cluster 建表實戰:ENGINE=NDBCLUSTER、隱含主鍵陷阱與安全關機流程

     編輯:MySQL 綜合教學

Cluster 建表核心規則

在 MySQL Cluster 中操作資料與單機 MySQL 大同小異,但有兩個強制要求:

  1. 儲存引擎必須指定為 NDB/NDBCLUSTER:ENGINE=NDB 或 ENGINE=NDBCLUSTER。
  2. 每個 NDB 表必須有主鍵:未定義時 NDB 會自動生成隱含主鍵(佔用額外記憶體與索引空間)。

建表語法範例


CREATE TABLE city (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL DEFAULT ''
) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;

關鍵點:

  • ENGINE=NDBCLUSTER 宣告此表由 NDB 存儲引擎管理,資料自動分片複寫至資料節點。
  • 明確定義 PRIMARY KEY 避免隱含主鍵開銷。
  • DEFAULT CHARSET=utf8 確保字符集一致性。

從現有資料庫遷移表結構至 Cluster

  1. 使用 mysqldump -d 導出純結構 SQL。
  2. 文字編輯器開啟,將所有 ENGINE=InnoDB / ENGINE=MyISAM 替換為 ENGINE=NDBCLUSTER。
  3. 檢查所有表皆有 PRIMARY KEY,無則補充 ALTER TABLE ... ADD PRIMARY KEY。
  4. 在 SQL 節點執行修正後的 SQL 腳本。

隱含主鍵的隱性成本

  • NDB 自動生成的隱含主鍵為 64 位整數,佔用 8 位元組儲存 + 索引開銷。
  • 大量無主鍵表會顯著增加記憶體壓力,甚至導致 Out of memory 錯誤。
  • 最佳實踐:業務設計階段即規劃自然主鍵或代理主鍵,嚴禁依賴隱含主鍵。

資料驗證:跨節點一致性測試

節點 db2(SQL 節點)寫入:


mysql -uroot test
INSERT INTO city VALUES (1, 'city1'), (2, 'city2');

節點 db3(另一 SQL 節點)讀取:


mysql -uroot test
SELECT * FROM city;
-- 輸出:
-- +----+-------+
-- | id | name  |
-- +----+-------+
-- | 1  | city1 |
-- | 2  | city2 |
-- +----+-------+

驗證重點:無需手動同步,NDB 同步複制保證跨 SQL 節點即時一致。

安全關機流程(關鍵操作)

  1. 關閉叢集:在 MGM 節點執行
    
    ndb_mgm -e shutdown
    
    此指令協調所有資料節點執行检查點、釋放資源、有序關閉。
  2. 關閉 SQL 節點:各 SQL 節點執行
    
    mysqladmin -uroot shutdown
    

嚴禁 直接 kill 進程或關機,會導致資料節點啟動時需漫長恢復過程(重做日誌重放)。

進階管理指令速查

指令用途
ndb_mgm -e "ALL STATUS" 查看所有節點狀態(連線、啟動階段、記憶體使用)
ndb_mgm -e "START BACKUP" 啟動線上備份(不鎖表、不影響服務)
ndb_mgm -e "NODE_ID STATUS" 查看特定節點詳細狀態
ndb_restore 從備份還原資料至叢集
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved