成熟的數據庫架構非一蹴而就,而是隨業務增長逐階演進。本文從運維視角,劃分五大階段:表設計 → 部署架構 → 單機優化 → 架構擴展 → 日常維護,給出各階段核心問題與解決方案。
pt-online-schema-change 線上變更
[Client]
│
▼
[Keepalived VIP]
│ │
[Master] [Slave] (同步複製,Slave 只讀)
讀寫 讀/備份
軟件選型:Keepalived(VRRP,輕量)、Heartbeat(老牌)、MHA(主從故障切換,推薦)。
單機運行多個 MySQL 實例(不同端口、數據目錄、配置),榨乾多核 CPU 與內存帶寬,mysqld_multi 管理。
| 層次 | 核心參數 | 推薦值/策略 |
|---|---|---|
| 公共 | max_connections, sort_buffer_size, query_cache_size, open_files_limit | 連接數 80% 上限;排序緩存 16M;查詢緩存 關閉/小值;文件句柄 65535 |
| MyISAM | key_buffer_size, read_buffer_size | 內存 30-40%;讀緩存 16-32M |
| InnoDB | buffer_pool_size, buffer_pool_instances, flush_log_at_trx_commit, file_per_table, log_buffer_size | 內存 60-70%;4-8 實例;業務允許用 2;開啟獨立表空間;8-16M |
# /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_tw_buckets = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
[App] → [Proxy: LVS/HAProxy/Nginx] → [Slave1, Slave2, ...] (讀)
│
└─→ [Master] (寫) + [Master-Standby] (高可用)
代碼層實現讀寫分離性能最佳;中間件方案有 MySQL Proxy、Amoeba、MyCat、ShardingSphere。
雙主同步複製易產生數據衝突。MySQL-MMM(Perl 開發)核心機制:同一時刻僅一個 Master 提供寫服務,VIP 漂移實現故障切換,保證寫入單點一致性。
| 維度 | 垂直拆分 | 水平拆分 |
|---|---|---|
| 解決問題 | 表寬/字段多、熱冷數據分離 | 單表數據量大(>2000萬)、索引膨脹 |
| 實現方式 | 按業務模塊拆庫;大字段獨立表 | Hash/Range/一致性哈希 分表;Merge 引擎或中間件路由 |
| 應用改造 | 較小 | 較大(需分片鍵路由) |
MySQL 原生 Partitioning(Range/List/Hash/Key),邏輯上單表,物理分文件/磁盤。優點:無需應用改造、自動分區裁剪、歷史數據快速歸檔(DROP PARTITION)。
QPS = Questions / Uptime
TPS = (Com_commit + Com_rollback) / Uptime
-- 或以 Com_* 計算,InnoDB 多用 Com_*,MyISAM 多用 Questions
slow_query_log=1
long_query_time=1
log_queries_not_using_indexes=1
slow_query_log_file=/var/log/mysql/slow.log
分析工具鏈:mysqldumpslow(簡易)→ pt-query-digest(全功能,支持 slowlog/binlog/general log)。
mysqldump 邏輯備份| 工具 | 適用引擎 | 需停庫 | 典型命令 |
|---|---|---|---|
| myisamchk | MyISAM | 是 | myisamchk -r -q *.MYI |
| mysqlcheck | MyISAM/InnoDB | 否 | mysqlcheck -r -q -uroot -p db_name |
mpstat -P ALL 1 關注 %iowait、%softiostat -d -x -k 1 關注 %util(100% 為瓶頸)、await、IOPS=r/s+w/s百萬級 QPS、PB 級存儲、實時分析場景下,關係型數據庫達到物理極限。演進方向:
運維核心能力從「調優單機 MySQL」轉向「設計演進數據架構」,持續學習前沿技術,方能應對業務無限增長。