技巧 1:權限最小化——精確到庫/表級
-- 授權模板
GRANT SELECT, INSERT, UPDATE, DELETE ON `db_name`.* TO 'app'@'10.0.0.%' IDENTIFIED BY 'strong_pass';
GRANT SELECT ON `db_name`.`sensitive` TO 'readonly'@'%';
-- 回收
REVOKE ALL ON `db_name`.* FROM 'old'@'%';
FLUSH PRIVILEGES;
**原則**:應用賬號無 DDL/DROP/FILE,只讀賬號僅 SELECT,運維臨時授權用畢即收。
技巧 2:核心監控指令速查
| 指令 | 關鍵指標 |
| SHOW STATUS | Threads_connected, Questions, Slow_queries, Innodb_buffer_pool_reads, Table_locks_waited |
| SHOW VARIABLES | max_connections, innodb_buffer_pool_size, query_cache_size, sync_binlog |
| SHOW PROCESSLIST | Time 大、State=Locked/Sending data、長事務 |
| SHOW ENGINE INNODB STATUS | 鎖等待、死鎖、緩衝池命中率、redo log |
| SHOW MASTER/SLAVE STATUS | Seconds_Behind_Master, Slave_IO/SQL_Running |
技巧 3:連接數與超時調優
-- 最大連接數 (預設 100)
SET GLOBAL max_connections = 2000; -- 視內存,每連 ~2-10MB
-- 寫入 my.cnf 永久生效
-- 等待隊列 (預設 50)
SET GLOBAL back_log = 500;
-- 非活動超時 (預設 8h=28800s)
SET GLOBAL wait_timeout = 600;
SET GLOBAL interactive_timeout = 600;
技巧 4:表碎片整理
-- 檢查碎片
SELECT TABLE_NAME, Data_free FROM information_schema.TABLES
WHERE TABLE_SCHEMA='db' AND Data_free > 0;
-- 整理 (鎖表,大表低峰期)
OPTIMIZE TABLE `table`;
-- InnoDB 線上整理 (5.6+)
ALTER TABLE `table` ENGINE=InnoDB;
技巧 5:mysqlhotcopy 熱備份 (僅 MyISAM)
mysqlhotcopy -u root -p'xxxx' 'db./^prefix$/' ./
# 需 Perl + DBI + DBD::mysql
技巧 6:日志體系管理
| 日志 | 配置 | 用途 | 管理 |
| 錯誤日志 | datadir/hostname.err | 崩潰、啟動錯誤 | 輪轉保留 30 天 |
| 慢查詢 | slow_query_log=1, long_query_time=1 | SQL 調優 | log_queries_not_using_indexes=1, 定期 pt-query-digest |
| Binlog | log-bin=mysql-bin, binlog_format=ROW | 主從、PITR、審計 | expire_logs_days=7, max_binlog_size=100M |
| 通用日志 | general_log=1 (慎用) | 全量審計 | 極大磁盤佔用,僅短時排查 |
Binlog 分析
mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000001 | grep -A 20 'table'
mysqlbinlog --start-datetime="..." --stop-datetime="..." mysql-bin.000001 > replay.sql
技巧 7:權限速查表(核心權限)
| 權限 | 含義 |
| ALL PRIVILEGES | 除 GRANT OPTION 外所有 |
| ALTER | ALTER TABLE |
| CREATE | CREATE TABLE |
| DELETE | DELETE |
| DROP | DROP TABLE |
| FILE | SELECT INTO OUTFILE / LOAD DATA |
| INDEX | CREATE/DROP INDEX |
| INSERT | INSERT |
| LOCK TABLES | 需 SELECT 權限 |
| PROCESS | SHOW FULL PROCESSLIST |
| RELOAD | FLUSH |
| REPLICATION SLAVE | 從庫讀 binlog |
| SELECT | SELECT |
| SHOW DATABASES | 查看所有庫 |
| SHUTDOWN | mysqladmin shutdown |
| SUPER | CHANGE MASTER, KILL, PURGE LOGS, SET GLOBAL, 突破 max_connections |
| UPDATE | UPDATE |
| GRANT OPTION | 授權他人 |
自動化運維建議
- Prometheus + mysqld_exporter + Grafana 監控看板
- pt-query-digest 定期慢查詢報告
- 自動化備份驗證 + 校驗和比對
- 參數基線巡檢 + 漂移告警
- 容量趨勢預測 + 擴容預案
七大技巧覆蓋 MySQL 運維全生命週期。**工具死、經驗活**——在實戰中總結、自動化、文檔化,從救火隊員進化為架構師。