基於 MariaDB 官方 my-huge.cnf 模板,添加詳細中文註釋。適用於 **專用數據庫服務器,內存 1-2GB,主要運行 MariaDB/MySQL 的大型系統**。
# MariaDB 會按順序讀取以下配置文件(後讀取的覆蓋先讀取的): # 1. /etc/my.cnf (全局) # 2. /etc/mysql/my.cnf (全局) # 3. /usr/etc/my.cnf (全局) # 4. ~/.my.cnf (用戶級) # 查看具體加載順序: my_print_defaults --help
[client] # 客戶端默認連接參數 port = 3306 socket = /var/lib/mysql/mysql.sock # password = your_password # 不建議明文寫密碼 [mysqld] # ================= 基礎網絡 ================= port = 3306 socket = /var/lib/mysql/mysql.sock skip-external-locking # 避免外部鎖定,提升性能 # ================= 緩存與緩衝區 (1-2G 內存機型) ================= key_buffer_size = 384M # MyISAM 索引緩存,InnoDB 主用 buffer_pool max_allowed_packet = 1M # 單次網絡包最大值,大字段需調大 table_open_cache = 512 # 表緩存數量,配合 max_connections sort_buffer_size = 2M # 排序緩存 (每線程) read_buffer_size = 2M # 顺序讀緩存 (每線程) read_rnd_buffer_size = 8M # 隨機讀緩存 (每線程) myisam_sort_buffer_size = 64M # MyISAM 建索引排序緩存 thread_cache_size = 8 # 線程緩存,減少創建銷毀開銷 query_cache_size = 32M # 查詢緩存 (5.7+ 建議關閉,8.0 已移除) thread_concurrency = 8 # 建議 CPU核心數 * 2 (舊參數,新版忽略) # ================= 臨時目錄 ================= # tmpdir = /tmp/ # 建議掛載到 SSD 或 tmpfs,提升臨時表性能 # ================= 安全:禁用 TCP/IP (可選) ================= # skip-networking # 僅允許本地 Socket 連接,極大提升安全性 # 注意:Windows 需同時開啟 named-pipe 否則無法連接 # ================= 主從復制:主庫配置 ================= log-bin = mysql-bin # 啟用二進制日志 server-id = 1 # 集群內唯一 ID (1 ~ 2^32-1) # ================= 主從復制:從庫配置 (二選一) ================= # 方案 1: CHANGE MASTER TO (推薦,動態配置,不依賴 cnf) # 方案 2: cnf 靜態配置 (首次啟動生成 master.info 後,cnf 修改無效) # server-id = 2 # master-host =# master-user = # master-password = # master-port = 3306 # log-bin = mysql-bin # 從庫也建議開啟 binlog (備份/級聯) # binlog_format = mixed # 推薦 mixed 或 ROW # ================= InnoDB 專用配置 (取消註釋啟用) ================= # innodb_data_home_dir = /var/lib/mysql # innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend # innodb_log_group_home_dir = /var/lib/mysql # innodb_buffer_pool_size = 384M # 純 InnoDB 實例設為物理內存 50-80% # innodb_additional_mem_pool_size = 20M # innodb_log_file_size = 100M # 約 buffer_pool 25% # innodb_log_buffer_size = 8M # innodb_flush_log_at_trx_commit = 1 # 1=最安全, 2=高性能(刷OS Cache), 0=最高性能(風險丟數據) # innodb_lock_wait_timeout = 50 # 死鎖等待超時(秒) [mysqldump] quick # 直接輸出流,不緩存內存 max_allowed_packet = 16M # 導出大表需調大 [mysql] no-auto-rehash # 禁用 Tab 補全,加速啟動 # safe-updates # 防止無 WHERE 的 UPDATE/DELETE (新手保護) [myisamchk] key_buffer_size = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
| 參數 | 調優方向 | 監控指標 |
|---|---|---|
key_buffer_size | MyISAM 表多則增大,純 InnoDB 可縮小至 32M | Key_reads / Key_read_requests < 0.01 |
table_open_cache | 配合 open_tables 狀態變量調整 | Opened_tables 快速增長 → 增大 |
thread_cache_size | 高並發短連接場景增大 (如 50-100) | Threads_created / Connections < 0.1 |
query_cache_size | **讀多寫少** 且查詢重複率高時開啟;寫入頻繁**必須關閉** (設置 0) | Qcache_hits / (Qcache_hits + Qcache_inserts) > 0.8 |
innodb_buffer_pool_size | 核心參數,專用機 50-80% 內存 | Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests < 0.01 |
innodb_log_file_size | 寫入壓力大時增大 (1G-4G),需重啟生效 | Innodb_log_waits > 0 → 增大 |
innodb_flush_log_at_trx_commit | 1=ACID 最嚴格;2=高性能(掉電丟 1 秒);0=極致性能(掉電丟數據) | 業務對數據安全容忍度決定 |
query_cache_*) 已棄用/移除,配置無效。caching_sha2_password,老客戶端需兼容處理。innodb_buffer_pool_size、key_buffer_size。server-id 全局唯一。log-bin 並規劃 expire_logs_days。innodb_flush_log_at_trx_commit = 1、sync_binlog = 1。mysql_secure_installation 清理匿名用戶、測試庫、遠程 root 登錄。