MySQL 5.5+ 默認引擎,核心優勢:
除大數據分析(OLAP)等特殊場景,絕大多數業務首選 InnoDB,棄用 MyISAM。
# InnoDB 核心 innodb_additional_mem_pool_size = 16M # 數據字典緩存,16M 足夠 innodb_buffer_pool_size = 4G # 核心!專用 DB 設物理內存 50-80%,非專用 1/4 起步 innodb_data_file_path = ibdata1:1G:autoextend # 共享表空間初始 1G,自動擴展 innodb_flush_log_at_trx_commit = 1 # 數據安全首選,性能可控 innodb_log_buffer_size = 64M # 事務日志緩存 innodb_log_file_size = 256M # Redo Log 文件大小 innodb_log_files_in_group = 2 # Redo Log 文件組數 innodb_file_per_table = 1 # 必開!獨立表空間,便於管理/回收空間 innodb_status_file = 1 # 生成 innodb_status.文件,便於監控 transaction_isolation = READ-COMMITTED # 提升事務效率,通常滿足一致性 # 通用優化 max_connections = 60 # PHP 短連接可適當大,連接池則小 max_connect_errors = 100000 # 防頻繁報錯導致 Host 被封 long_query_time = 1 # 慢查詢閾值 1s max_heap_table_size = 96M tmp_table_size = 96M # 兩者必須一致 sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 2M # 每連接緩存,勿設過大 query_cache_size = 0 # 關閉 QC,高並發下常成瓶頸 key_buffer_size = 8M # 僅用於 MyISAM 系統表,極小即可 interactive_timeout = 120 wait_timeout = 120 # 短連接建議縮短,長連接可註釋用默認 8h
ls -lh /mydata/data/ -rw-rw---- 1 mysql mysql 1.0G ibdata1 -rw-rw---- 1 mysql mysql 256M ib_logfile0 -rw-rw---- 1 mysql mysql 256M ib_logfile1
SHOW ENGINES; -- InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES
TIMESTAMP (4 字節,含時區) 而非 DATETIME (8 字節)。INT UNSIGNED 存 INET_ATON() 值,INET_NTOA() 取回。TINYINT (0/1/2) 代替 CHAR(1)/'Y'/'N'。ibdata1(含數據字典、Undo Log、雙寫緩存、插入緩存等)。ib_logfile0/1(循環寫入,崩潰恢復核心)。.frm(引擎無關)。開啟 innodb_file_per_table=1 後,每表生成 table_name.ibd,存放該表的數據、索引、插入緩存;Undo、系統事務、雙寫緩存仍在共享表空間。
| 維度 | 共享表空間 | 獨立表空間 (innodb_file_per_table=1) |
|---|---|---|
| 文件管理 | 單一文件/多文件分布不同磁盤 | 每表一個 .ibd,可單表遷移 |
| 空間回收 | 刪除數據產生碎片,難回收,統計/日志類最不適合 | DROP TABLE 直接回收;ALTER TABLE ... ENGINE=InnoDB / TRUNCATE (5.6+) 可回縮 |
| 大表風險 | 單表受限於 64TB 表空間上限 | 單表受限於文件系統上限 (ext3 4TB, XFS/NTFS 更大) |
| 碎片影響 | 多表混存,碎片嚴重影響全庫 | 碎片隔離在表級,影響可控 |
