January 17Jan 17 適用環境 作業系統:Debian 13 網頁伺服器:Nginx PHP版本:PHP 8.3.x VPS規格:2 vCPU / 2GB RAM ------------- 前言 ------------- 為何選用 MariaDB 11.8? MariaDB 11.8 是目前最新的長期支援版本(LTS),相較於 10.11 引入了以下關鍵改進: 改進的 Performance Schema:記憶體用量更低,在 2GB 環境下更為友好 更完善的 JSON 與視窗函數支援:現代 PHP 論壇框架受益明顯 注意:Debian 13 (Trixie) 套件庫內建的 MariaDB 版本仍可能落後官方,強烈建議使用MariaDB 官方 Repository 以確保安裝最新LTS版本 ------------------------------- 更新系統並安裝必要工具 ------------------------------- apt update -y && apt upgrade -y apt install -y curl gnupg lsb-release ca-certificates ------------------------------------- 加入 MariaDB 官方 Repository ------------------------------------- 建立目錄 mkdir -p /etc/apt/keyrings 下載 MariaDB GPG 金鑰 以下這2行一起貼上 curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc \ | gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg 驗證 GPG 金鑰指紋 (重要,不可跳過) gpg --show-keys --with-fingerprint /etc/apt/keyrings/mariadb.gpg 預期輸出 (應包含以下指紋) pub rsa4096 2016-03-30 [SC] 177F 4010 FE56 CA33 3630 0305 F165 6F24 C74C D1D8 uid MariaDB Signing Key <signing-key@mariadb.org> sub rsa4096 2016-03-30 [E] 安全提醒:請將輸出的指紋與 [MariaDB 官方網站](https://mariadb.org/download/) 公告的指紋比對 若指紋不符,請立即停止安裝,該金鑰可能已遭竄改 金鑰驗證是防範供應鏈攻擊 (Supply Chain Attack) 的關鍵步驟,務必執行 ------------------------------------- 加入 MariaDB 11.8 Repository ------------------------------------- 以下這3行一起貼上 echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/mariadb.gpg] \ https://mirror.mariadb.org/repo/11.8/debian trixie main" \ > /etc/apt/sources.list.d/mariadb.list 確認 Repository 設定內容 cat /etc/apt/sources.list.d/mariadb.list 預期輸出:deb [arch=amd64 signed-by=/etc/apt/keyrings/mariadb.gpg] https://mirror.mariadb.org/repo/11.8/debian trixie main ---------------------------------------------------------- 鎖定 MariaDB 官方 Repository 優先權(關鍵步驟) ---------------------------------------------------------- 這是確保安裝到正確版本最關鍵的步驟,不可略過 若不設定,apt 可能安裝 Debian 內建的舊版本 Pin: origin 的值須與 sources.list.d/mariadb.list 中的鏡像網域一致 本文使用 mirror.mariadb.org,若改用 deb.mariadb.org,請對應修改 Pin 的值 編輯 vi /etc/apt/preferences.d/mariadb.pref 貼上以下內容 Package: * Pin: origin mirror.mariadb.org Pin-Priority: 1000 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter ------------------------------------------- 安裝前驗證版本來源 (關鍵步驟) ------------------------------------------- apt update -y apt-cache policy mariadb-server 預期輸出 (請確認 Candidate 欄位指向 11.8.x 且來源為 MariaDB 官方 Repository) mariadb-server: Installed: (none) Candidate: 1:11.8.7+maria~deb13 Version table: 1:11.8.7+maria~deb13 1000 1000 https://mirror.mariadb.org/repo/11.8/debian trixie/main amd64 Packages 1:11.8.6+maria~deb13 1000 1000 https://mirror.mariadb.org/repo/11.8/debian trixie/main amd64 Packages 1:11.8.6-0+deb13u1 500 500 http://ftp.sg.debian.org/debian trixie/main amd64 Packages 注意:若 Candidate 顯示的仍是 Debian 內建版本(優先權非 1000),表示 Pin 設定或 Repository 設定有誤,請重新檢查,不要繼續安裝 --------------------------- 安裝 MariaDB Server --------------------------- apt install -y mariadb-server mariadb-client 安裝過程中若出現以下提示 Enable the Feedback plugin and submit anonymous usage information? <Yes> /<No> 請選擇 <No>,正式環境不建議啟用匿名回報,並減少不必要的外部連線 --------------------- 確認安裝版本 --------------------- 確認版本,預期輸出 11.8.7-MariaDB mariadb -V ------------------- 安全初始化設定 ------------------- 安裝完成後,務必執行安全初始化腳本,移除預設的高風險設定 進行安全性設定 mariadb-secure-installation Enter current password for root (enter for none) 按 Enter,首次安裝尚未設定密碼 Switch to unix_socket authentication [Y/n] 切換到 unix_socket 身份驗證 [Y/n] 選 Y,本機連線更安全,即使知道密碼也無法從遠端登入root Change the root password? [Y/n] 更改root密碼? [Y/n] 選 Y,設定一組高強度密碼 (建議20字元以上,含大小寫、數字、符號) Remove anonymous users? [Y/n] 移除匿名用戶? [Y/n] 選 Y,移除匿名用戶,避免未授權存取 Disallow root login remotely? [Y/n] 禁止root遠端登入? [Y/n] 選 Y,即使需要遠端管理,也應另建立具有最小必要權限的帳號,而非直接用 root 遠端連線 Remove test database and access to it? [Y/n] 移除 test 資料庫? [Y/n] 選 Y,移除測試資料庫,減少攻擊面 Reload privilege tables now? [Y/n] 立即重新載入權限表? [Y/n] 選 Y,讓所有變更立即生效 完成後應顯示 All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! ----------------- 驗證 root 登入 ----------------- 初始化完成後,確認可以本機登入 以密碼方式登入 mariadb -u root -p 說明:以 root 系統使用者身份執行時,unix_socket 驗證優先生效,密碼驗證會被略過(不需要輸入密碼) 在 一般使用者 (非 root)身份下,unix_socket 驗證失敗後,才會要求輸入密碼 這比純密碼登入更安全,因為攻擊者即使知道密碼也無法從遠端直接登入 root 帳號 以 unix_socket 免密碼登入(推薦) sudo mariadb 成功後應顯示 MariaDB [(none)]> 提示符 輸入exit 離開 exit -------------------------------- MariaDB Client 用戶端設定 -------------------------------- /etc/mysql/mariadb.conf.d/50-client.cnf 是 MariaDB 用戶端 (client) 的設定檔 影響所有透過命令列工具 (mysql、mysqldump、mysqlcheck 等) 發起的連線行為 它不影響 MariaDB 伺服器本身的效能,但正確設定能避免備份失敗、字元集錯誤、連線逾時等常見問題 編輯 vi /etc/mysql/mariadb.conf.d/50-client.cnf 完整替換 為以下內容 # ======================================== # /etc/mysql/mariadb.conf.d/50-client.cnf # ======================================== [client] # ── 連線基本設定 ──────────────────────── # 標準 TCP 連接埠 (保持預設即可,除非有多實例需求) port = 3306 # 優先使用 Unix Socket (本機連線效能較 TCP 好且更安全) # 若應用程式與 MariaDB 在同一台機器,請保留此設定 socket = /var/run/mysqld/mysqld.sock # ── 字元集設定 ───────────────────────── # utf8mb4 支援完整 Unicode,包含 Emoji (論壇必備) default-character-set = utf8mb4 [client-mariadb] 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter ----------------------------------------------- 建立慢查詢日誌目錄 (必須在重啟前執行) ----------------------------------------------- 若啟用 slow_query_log,需確保目錄存在且權限正確 務必在重啟 MariaDB 之前執行,否則服務會因無法寫入日誌而啟動失敗 mkdir -p /var/log/mysql chown mysql:adm /var/log/mysql chmod 750 /var/log/mysql 注意:此處群組建議使用 adm (Debian慣例的日誌讀取群組),讓一般管理員帳號可透過 adm 群組讀取日誌,而無須使用 root 若無此需求,也可使用 mysql:mysql -------------------- Server 效能調校 -------------------- 以下設定針對 2 vCPU / 2GB RAM VPS 優化,適用於論壇網站 先備份原始設定檔 cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak 備份後,若調校後出現問題可快速還原 cp /etc/mysql/mariadb.conf.d/50-server.cnf.bak \ /etc/mysql/mariadb.conf.d/50-server.cnf systemctl restart mariadb ---------------------------- 編輯 Server 設定檔 ---------------------------- 編輯 vi /etc/mysql/mariadb.conf.d/50-server.cnf 完整替換 為以下內容 # ======================================= # /etc/mysql/mariadb.conf.d/50-server.cnf # 適用環境:VPS 2 vCPU / 2GB RAM,論壇網站 # ======================================= [server] [mariadbd] # ===== 字元集設定 ===== character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci # ===== 基本設定 ===== port = 3306 user = mysql pid-file = /run/mysqld/mysqld.pid basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp # 關閉反向 DNS 解析,提升連線速度 # 注意:若資料庫帳號是以 hostname 建立 (而非IP),請勿啟用 skip-name-resolve = ON # 僅允許 localhost 本機連線 (正式環境標準做法) # 如需遠端連線,請改為 0.0.0.0,並搭配防火牆限制來源IP bind-address = 127.0.0.1 # ===== 連線與執行緒調校 ===== # 最大同時連線數 # 每條連線約佔 1~2 MB 記憶體 # 2GB 環境建議 80~100;超過後應用端會收到 Too many connections 錯誤 # 搭配連線池 (如 PHP PDO persistent connection) 可有效降低此需求 max_connections = 80 # 連線錯誤次數上限 (超過後該IP暫時被封鎖,執行 FLUSH HOSTS 可解鎖) max_connect_errors = 100 # 執行緒快取,減少建立/銷毀執行緒的開銷 thread_cache_size = 50 # 開啟檔案數上限 (需與 systemd LimitNOFILE 一致) open_files_limit = 65535 # 閒置連線超時 (秒):超時後自動斷開,釋放資源 # 設為 8小時 (28800 秒),避免論壇長時間無人使用時連線數堆積 wait_timeout = 28800 interactive_timeout = 28800 # ===== 緩衝區設定 ===== # MyISAM 索引緩衝 (純InnoDB環境影響有限) key_buffer_size = 32M # 單次封包最大允許大小 (大型資料庫匯入或備份時可視需求提高) max_allowed_packet = 256M # 資料表快取數量 table_open_cache = 2048 # 每個session的排序緩衝 (勿設定過大,會乘以連線數佔用記憶體) sort_buffer_size = 768K read_buffer_size = 768K read_rnd_buffer_size = 512K net_buffer_length = 8K # MyISAM 排序緩衝 myisam_sort_buffer_size = 8M # 記憶體內暫存表上限 # 若 Created_tmp_disk_tables 數值偏高,可適度調大 tmp_table_size = 64M max_heap_table_size = 64M explicit_defaults_for_timestamp = ON # 預設儲存引擎 default_storage_engine = InnoDB # ===== Binary Log (啟用 PITR / Replication) ===== # Binary Log (binlog) 記錄所有資料變更操作,是主從複製和時間點還原 (PITR) 的基礎 # 若不需要上述功能,可將以下四行全部註解掉,以節省磁碟 I/O 和空間 # 啟用後請務必設定 binlog_expire_logs_seconds,避免磁碟空間耗盡 log_bin = mysql-bin binlog_format = ROW # ROW 模式記錄每一列的實際變更,適合主從複製與 PITR,資料一致性最高 # 完整記錄每列所有欄位(before/after),便於 PITR 精確還原 binlog_row_image = FULL server-id = 1 binlog_expire_logs_seconds = 604800 #過期時間 7天 = 604800 秒 # ===== 錯誤日誌 ===== # 預設由 systemd journald 處理 (journalctl -u mariadb) # 如需獨立日誌檔案,取消下列註解,並確認目錄已建立且權限正確 # log_error = /var/log/mysql/error.log # ===== 慢查詢日誌 (效能監控必開) ===== # 記錄執行時間超過 long_query_time (秒) 的查詢,用於找出效能瓶頸 # 目錄 /var/log/mysql 必須在重啟前建立 slow_query_log = ON slow_query_log_file = /var/log/mysql/mariadb-slow.log long_query_time = 2 # 同時記錄未使用索引的查詢 (即使執行時間未超過 long_query_time) log_queries_not_using_indexes = ON log_slow_verbosity = query_plan,explain # ===== 安全設定 ===== # 禁止伺服器向客戶端請求本地檔案,防止資料洩漏 local-infile = 0 # ===== InnoDB 調校 (最重要部分)===== # Galera Cluster / 多來源複製必須設為 2;單機保持 2 亦無妨 innodb_autoinc_lock_mode = 2 # InnoDB 緩衝池大小 (最重要的效能參數) # 建議值:實體記憶體的 50%~70% # 2GB RAM:建議 768M (其餘留給 OS、Nginx、PHP-FPM) # 設定過大可能導致系統 OOM (記憶體耗盡),請謹慎評估 innodb_buffer_pool_size = 768M # Redo log # MariaDB 11.8.x 在此修改為手動管理 # 一般生產環境 256M ~ 1G innodb_log_file_size = 256M # Redo log 寫入前的記憶體緩衝 (大量寫入時可適度調大) innodb_log_buffer_size = 16M # 交易提交刷寫策略 # 1 = 最安全 (每次交易都刷寫磁碟,正式環境建議值,ACID 完整) # 2 = 效能較佳 (每秒刷寫一次,斷電可能遺失最後 1 秒的資料) innodb_flush_log_at_trx_commit = 1 # 減少雙重緩衝,提升 I/O 效能 (SSD優化) innodb_flush_neighbors = 0 # I/O 容量設定 (依實際SSD規格調整;一般 VPS SSD 建議 200~800) innodb_io_capacity = 200 innodb_io_capacity_max = 400 # 鎖定等待超時 (超過後自動回滾,避免 Deadlock 長時間佔用資源) innodb_lock_wait_timeout = 50 # 全文索引最小字數 (論壇搜尋功能) # ft_min_word_len 適用 MyISAM 引擎 # innodb_ft_min_token_size 適用 InnoDB 引擎 # 設為 2:索引長度 ≥ 2 的詞彙 (中文環境建議設為 2) # 注意:修改此值後,必須重建所有 FULLTEXT 索引才會生效 # ALTER TABLE your_table DROP INDEX ft_idx, ADD FULLTEXT INDEX ft_idx (col); ft_min_word_len = 2 innodb_ft_min_token_size = 2 # ===== Performance Schema ===== # 若資源充足可開啟 (額外佔用約 5~10% 記憶體) # 2GB 環境若資源已緊繃,可視情況保持關閉,改用慢查詢日誌 # performance_schema = ON # ===== 工具設定 ===== [mariadb-dump] quick max_allowed_packet = 256M # 單次匯出封包最大值,大型資料庫時可視需求提高 [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter --------------------------------------- 啟用 systemd OOM 保護 (建議) --------------------------------------- 建立 systemd override,降低 MariaDB 在系統記憶體不足時被 OOM Killer 強制終止的機率 建立目錄 mkdir -p /etc/systemd/system/mariadb.service.d 建立 vi /etc/systemd/system/mariadb.service.d/override.conf 貼入以下內容 [Service] # 降低 MariaDB 被 Linux OOM Killer 殺死的機率 # 分數範圍:-1000(完全豁免)~ 1000(最優先被殺) # -900 = 高度保護(建議值,保留 -1000 給核心關鍵程序) OOMScoreAdjust=-900 # 確保檔案描述符上限與 open_files_limit 一致 LimitNOFILE=65535 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter ------------------------- 套用 systemd 設定 ------------------------- 套用設定 systemctl daemon-reload -------------------- 驗證設定檔語法 -------------------- 在啟動前務必驗證設定檔語法,可避免因語法錯誤導致服務啟動失敗 停止服務 後驗證 systemctl stop mariadb 驗證語法 (MariaDB 10.x / 11.x 均可) mariadbd --help --verbose > /dev/null 輸出說明: 無任何輸出 → 設定檔完全正確,可以啟動服務 顯示 [Warning] → 有警告,需確認是否影響運作 顯示 [ERROR] → 有錯誤,不可啟動服務,須先修正 確認無誤後再啟動 systemctl start mariadb 確認狀態 systemctl status mariadb ------------------- 確認生效的設定 ------------------- 顯示目前生效的所有設定 mariadbd --print-defaults 改為這樣,比較好讀 mariadbd --print-defaults 2>/dev/null | tr ' ' '\n' | grep '^--' 查看所有載入的設定檔路徑 mariadbd --help --verbose 2>/dev/null | grep -A 5 "Default options" ------------------------------------ 建立 logrotate (避免日誌爆硬碟) ------------------------------------ 若不設定 logrotate,慢查詢日誌在高流量環境下可能在數週內耗盡磁碟空間 建立 vi /etc/logrotate.d/mariadb 貼上以下內容 /var/log/mysql/*.log { daily rotate 30 compress delaycompress missingok notifempty create 640 mysql adm sharedscripts postrotate if /usr/bin/test -x /usr/bin/mariadb-admin && \ /usr/bin/mariadb-admin --defaults-extra-file=/etc/mysql/debian.cnf ping &>/dev/null then /usr/bin/mariadb-admin --defaults-extra-file=/etc/mysql/debian.cnf flush-logs fi endscript } 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter 說明:/etc/mysql/debian.cnf 是Debian套件安裝時自動生成的維護帳號憑證,logrotate 透過它執行 flush-logs,無需手動輸入密碼 ------------------------------------------- 測試 logrotate 設定 (dry run) ------------------------------------------- 測試 logrotate 設定 logrotate -d /etc/logrotate.d/mariadb -d 為 dry run 模式,不會實際輪替,僅顯示操作預覽,確認設定無誤 ---------------------- 確認日誌使用方式 ---------------------- 確認是否有獨立日誌檔案 ls -lah /var/log/mysql/ 查看 systemd journal 日誌 journalctl -u mariadb 說明:若 /var/log/mysql/ 目前是空的,表示 MariaDB 主要使用 journald 記錄日誌,logrotate 設定暫時無效 (等慢查詢日誌有內容後即會生效) ----------------------- 開機自動啟動 ----------------------- 開機自動啟動 systemctl enable mariadb 重新啟動 systemctl restart mariadb 檢查狀態,應顯示 Active: active (running) systemctl status mariadb ------------------- 重開機驗證 ------------------- 重開機 reboot 完成所有設定後,重開機是最可靠的驗證方式,確認所有服務能自動恢復正常運作 確認服務狀態,確認狀態為 active (running) systemctl status mariadb 確認記憶體使用情況 (重要:確保沒有 OOM) free -h 確認 MariaDB 進程記憶體佔用 ps aux | grep mariadb 確認 MariaDB 監聽的連接埠,應僅顯示 127.0.0.1:3306 (現在不會有監聽,論壇還沒設置) ss -tlnp | grep mysql ------------------- 資料庫內部驗證 ------------------- 登入資料庫 sudo mariadb 在 MariaDB 提示字元下執行 檢查 InnoDB 緩衝池大小(應顯示 805306368,即 768MB) SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 檢查字元集設定 (均應顯示 utf8mb4) SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%'; 確認 Redo log 管理狀態 (手動管理,顯示值 268435456 也就是 256M) SHOW VARIABLES LIKE 'innodb_log_file_size'; 檢查最大連線數(應顯示 80) SHOW VARIABLES LIKE 'max_connections'; 檢查目前連線數 SHOW STATUS LIKE 'Threads_connected'; 檢查歷史最大連線數 (用於調整 max_connections 的依據) SHOW STATUS LIKE 'Max_used_connections'; 確認 local-infile 已關閉 (應顯示 OFF) SHOW VARIABLES LIKE 'local_infile'; 確認 skip_name_resolve 已啟用 (應顯示 ON) SHOW VARIABLES LIKE 'skip_name_resolve'; 確認 binlog 已啟用 (若有設定,應顯示 ON) SHOW VARIABLES LIKE 'log_bin'; 確認 bind_address 設定 (應顯示 127.0.0.1) SHOW VARIABLES LIKE 'bind_address'; 離開資料庫 exit -------------------------------------- 安裝 mysqltuner 效能分析工具 -------------------------------------- 安裝 apt install -y mysqltuner 執行分析 mysqltuner 使用建議:系統運行 24小時後 再執行分析,數據更具參考價值 mysqltuner 可分析:Buffer Pool 是否不足、查詢效能、臨時表、索引問題、連線數、慢查詢 等 ------------------ 常見問題與排除 ------------------ 問題:連線被拒絕 (Connection refused) 可能原因: bind-address 設定為 127.0.0.1(遠端連線時) 防火牆阻擋 連線數超過限制 解決方法: 檢查 bind-address 設定 grep bind-address /etc/mysql/mariadb.conf.d/50-server.cnf 檢查目前連線數 sudo mariadb -e "SHOW STATUS LIKE 'Threads_connected';" sudo mariadb -e "SHOW STATUS LIKE 'Max_used_connections';" 問題:密碼錯誤 / 無法登入 解決方法: 以 root 身份免密碼登入 sudo mariadb 重設密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'; FLUSH PRIVILEGES; exit 解決方法二:緊急模式(連 sudo mariadb 也無法登入時) 警告:--skip-grant-tables 模式下無任何安全驗證,此期間任何人都可以無密碼登入,操作完畢後務必立即重啟服務 請在安全的環境下操作,切勿在有外部流量的情況下執行 systemctl stop mariadb 以跳過權限表的方式啟動(僅允許本機 socket 連線) mariadbd --skip-grant-tables --skip-networking & 等待 2 秒讓服務啟動 sleep 2 mariadb -u root FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密碼'; exit 停止緊急模式實例,改由 systemd 正常啟動 kill $(pgrep -f skip-grant-tables) systemctl start mariadb 問題:Too many connections 錯誤 可能原因: max_connections 設定過低 應用程式未使用連線池 連線未正常關閉(Sleep 連線堆積) 解決方法: 暫時調高連線數 (立即生效,重啟後失效) sudo mariadb -e "SET GLOBAL max_connections = 150;" 查看所有連線(含 Sleep 狀態) sudo mariadb -e "SHOW PROCESSLIST;" 批次結束閒置過久的連線 sudo mariadb -e "SHOW PROCESSLIST;" | grep Sleep | awk '{print "KILL "$1";"}' | sudo mariadb 永久調整:修改設定檔 50-server.cnf 中的 max_connections 值,並重啟服務 提示:應用端建議實作連線池(如 PHP PDO persistent connection),可大幅降低連線開銷, 一般論壇在連線池下 max_connections = 80 已綽綽有餘 問題:效能未明顯提升 可能原因: innodb_buffer_pool_size 設定不足 索引缺失 查詢未最佳化 解決方法: 確認 buffer pool 設定 sudo mariadb -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';" sudo mariadb -e "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';" 計算 Buffer Pool 命中率: 命中率 = (Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests × 100% 理想值應大於 99%。若低於此值,表示 Buffer Pool 不足,可考慮增加 innodb_buffer_pool_size(前提是系統有足夠的空閒記憶體) 動態啟用慢查詢日誌 (重啟後失效,建議在設定檔中永久啟用) sudo mariadb -e "SET GLOBAL slow_query_log = ON;" sudo mariadb -e "SET GLOBAL long_query_time = 2;" 安裝 pt-query-digest 分析慢查詢 apt install -y percona-toolkit 分析慢查詢日誌 pt-query-digest /var/log/mysql/mariadb-slow.log 問題:設定檔改了但未生效 可能原因: 編輯錯誤的設定檔 未重新啟動服務 設定檔語法錯誤被忽略 解決方法: 確認目前生效的設定 mariadbd --print-defaults 改為這樣,比較好讀 mariadbd --print-defaults 2>/dev/null | tr ' ' '\n' | grep '^--' 找出所有載入的設定檔 mariadbd --help --verbose | grep -A 1 "Default options" 驗證語法 (MariaDB 10.x / 11.x 均可) mariadbd --help --verbose > /dev/null 強制重新載入 systemctl daemon-reload systemctl restart mariadb 確認特定參數 sudo mariadb -e "SHOW VARIABLES LIKE '參數名稱';" ------------------------ 常用指令速查 ------------------------ 啟動 MariaDB systemctl start mariadb 停止 MariaDB systemctl stop mariadb 重新啟動 MariaDB systemctl restart mariadb 查看服務狀態 systemctl status mariadb 設定開機自動啟動 systemctl enable mariadb 查看最近 100 行系統日誌 journalctl -u mariadb -n 100 驗證語法 (MariaDB 10.x / 11.x 均可) mariadbd --help --verbose > /dev/null 顯示目前生效的所有設定 mariadbd --print-defaults 改為這樣,比較好讀 mariadbd --print-defaults 2>/dev/null | tr ' ' '\n' | grep '^--' 以 root 免密碼登入資料庫 (unix_socket) sudo mariadb 以密碼登入資料庫 mariadb -u root -p 執行安全初始化 mariadb-secure-installation Edited Wednesday at 12:12 AM3 days by Jack
Create an account or sign in to comment