跳至主要內容
技術文件

資料庫

這個分類下的問題與解答。點標題可以展開答案,也可以點右上角進到單題頁面。

MySQL 與 MariaDB 的關係與版本選擇 »
問:
MySQL 和 MariaDB 有什麼不同? 可以直接互換嗎? MyISAM 要換成 InnoDB 嗎? buffer pool 要設多少?
答:

兩者的關係

MariaDB 是從 MySQL 分支出來的專案,由原開發團隊成員發起。早期版本高度相容,但隨著各自發展,差異逐漸擴大。

目前的狀況是:基本的 SQL 語法與多數應用程式的操作仍然相容,但在特定功能、系統資料表、複寫機制與部分語法上已有明顯差異。

對一般網站的實務意義

對典型的 PHP 網站應用(增刪改查、簡單的關聯查詢),兩者幾乎可以互換使用。

需要注意差異的情況:

  • 使用了較新或特定的內建函式
  • 依賴特定的系統資料表或狀態變數
  • 使用複寫或叢集功能
  • 使用 JSON 相關的進階功能——兩者的實作方式不同
  • 特定的儲存引擎

版本的選擇

長期支援版本

兩個專案都有區分長期支援與一般版本。正式環境建議選用長期支援版本,理由是:

  • 支援期間較長,不必頻繁升級
  • 穩定性經過較長時間驗證
  • 主機商與套件的支援較完整

具體的版本號與支援期限請查閱官方公告,不要憑印象判斷。

不要停在已停止支援的版本

與 PHP 一樣,停止支援後即使發現安全漏洞也不會再有修補。相關考量見PHP 版本升級要注意什麼

儲存引擎

InnoDBMyISAM
交易支援
鎖定層級列層級資料表層級
外鍵支援不支援
當機復原較可靠可能需要修復
建議預設選擇舊系統遺留

現在幾乎沒有理由使用 MyISAM。 它的資料表層級鎖定在寫入頻繁時會造成明顯的等待,而且當機後容易需要修復。

檢查現有的資料表引擎

SELECT table_name, engine, table_rows
FROM information_schema.tables
WHERE table_schema = 'your_database';

轉換為 InnoDB

ALTER TABLE tablename ENGINE=InnoDB;

轉換前務必備份,並注意大型資料表的轉換會鎖住該表一段時間,應選在離峰時段進行。

常用的檢查指令

SELECT VERSION();                    -- 版本
SHOW VARIABLES LIKE 'version%';      -- 詳細版本資訊
SHOW ENGINES;                        -- 可用的儲存引擎
SHOW VARIABLES LIKE 'character_set%';-- 字元集設定
STATUS;                              -- 連線與環境摘要

基本的設定調整

設定檔常見位置:

/etc/mysql/my.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
/etc/my.cnf

最關鍵的一項

innodb_buffer_pool_size = 1G

這是 InnoDB 用來快取資料與索引的記憶體區域,對效能的影響通常最大。

估算原則:

  • 專用的資料庫伺服器——可設為實體記憶體的六到七成
  • 與網站共用同一台——需保留給網頁伺服器與 PHP,通常設較保守
  • 資料量小於設定值時,多設也沒用

其他常見的調整

max_connections = 150
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
slow_query_log = 1
long_query_time = 1

不要照抄網路上的設定範本。 參數應依實際的記憶體、資料量與存取模式調整,抄來的設定可能讓情況更糟。

連線數的估算

max_connections 要與應用端的行程數對應。

以 PHP-FPM 為例:若 pm.max_children 設為 30,理論上最多會有 30 個併發連線(未使用持久連線時)。

設太低會出現連線被拒絕;設太高則可能在尖峰時耗盡記憶體。

行程池的設定見網頁伺服器的效能相關設定

升級時的注意事項

  1. 完整備份——包含資料與設定檔
  2. 查閱該版本的升級說明——注意不相容的變更
  3. 在測試環境先執行一次
  4. 升級後執行系統資料表的升級程序
  5. 確認應用程式功能正常
  6. 觀察錯誤日誌數日

跨越多個主要版本時建議分階段,不要一次跳太多版。

本文以 MySQL 與 MariaDB 的常見版本為例,實際的指令、預設值與可用選項可能因版本與發行版而異。執行任何變更前請確實備份,並先在測試環境驗證。

»
»
»
»
免費諮詢 · 1 個工作天內回覆

準備好讓網站 開始幫你帶生意了嗎?

不論是要做新網站、救舊網站,還是只想先聊聊方向——先諮詢,不用先付錢,我們照實給你建議。

1 個工作天回覆免費諮詢與報價費用白紙黑字26 年找得到人
免費諮詢
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢 LINE諮詢 03-4020420 臉書傳訊