cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DWITH_INNODB_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_unicode_ci \ -DWITH_DEBUG=0 \ -DMYSQL_MAINTAINER_MODE=0 \ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
FreeBSD 特殊參數:`-DWITH_NUMA=OFF`(舊版)、`-DWITH_LIBWRAP=OFF`
編譯前檢查:GCC ≥ 4.8 / Clang ≥ 3.3、CMake ≥ 3.0、GNU Make ≥ 3.81、記憶體 ≥ 2GB(建議 4GB+)
# 1. 初始化資料目錄 (5.7.6+ / 8.0) mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql # 產生臨時 root 密碼於 error log,必須記錄 # 2. 啟動服務 systemctl start mysqld # 3. 安全初始化 (修改 root 密碼、移除匿名用戶、禁用遠端 root、移除 test 庫) mysql_secure_installation # 4. 建立專用管理帳號 CREATE USER 'dba'@'10.0.0.%' IDENTIFIED BY 'StrongPass!'; GRANT ALL PRIVILEGES ON *.* TO 'dba'@'10.0.0.%' WITH GRANT OPTION;
[mysqld] # 基礎 basedir=/usr/local/mysql datadir=/data/mysql socket=/var/run/mysqld/mysqld.sock port=3306 server-id=1 pid-file=/var/run/mysqld/mysqld.pid # 連線 max_connections=500 max_connect_errors=100000 thread_cache_size=50 open_files_limit=65535 table_open_cache=4000 # InnoDB 核心 innodb_buffer_pool_size=5G # 物理記憶體 60-70% innodb_log_file_size=512M # 大寫入緩衝,減少 checkpoint 壓力 innodb_log_files_in_group=2 innodb_flush_log_at_trx_commit=1 # ACID 保證,極高可靠需求可改 2 innodb_flush_method=O_DIRECT # 繞過 OS cache,避免雙重緩衝 innodb_file_per_table=ON innodb_buffer_pool_instances=8 innodb_read_io_threads=8 innodb_write_io_threads=8 # 日誌 log_bin=mysql-bin binlog_format=ROW expire_logs_days=7 sync_binlog=1 # 配合 flush_log_at_trx_commit=1 保證不丟失 slow_query_log=1 slow_query_log_file=/var/log/mysql/slow.log long_query_time=1 log_queries_not_using_indexes=1 # 字元集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 安全 skip-name-resolve # 避免 DNS 解析延遲/失敗 local_infile=0 # 禁用 LOCAL INFILE sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
| 操作 | Systemd 指令 | 傳統指令 |
|---|---|---|
| 啟動 | systemctl start mysqld | /etc/init.d/mysql start |
| 停止 | systemctl stop mysqld | /etc/init.d/mysql stop |
| 重啟 | systemctl restart mysqld | /etc/init.d/mysql restart |
| 狀態 | systemctl status mysqld | /etc/init.d/mysql status |
| 開機自啟 | systemctl enable mysqld | chkconfig mysql on |
| 熱重載配置 | systemctl reload mysqld | mysqladmin reload |
管理員密碼關機:`mysqladmin -u root -p shutdown`
| 現象 | 可能原因 | 排查指令 |
|---|---|---|
| 啟動失敗:Can't create test file | datadir 權限/路徑/磁碟空間 | ls -ld /data/mysql; df -h /data |
| 連線失敗:Can't connect to socket | socket 路徑不一致/服務未啟動 | netstat -lnp | grep 3306; cat /etc/my.cnf | grep socket |
| 編譯失敗:C++ compiler not found | 缺少 g++/build-essential | yum install gcc-c++ / apt install build-essential |
| 效能差:CPU 100% 但 QPS 低 | 鎖衝突/查詢未命中索引/參數錯誤 | SHOW ENGINE INNODB STATUS; SHOW PROCESSLIST; pt-query-digest |
MySQL 生產部署「三分安裝、七分調優、十分運維」。遵循「官方 GA 版、標準化編譯、模板化配置、自動化巡檢、定期演練」五大原則,配合 Percona Toolkit、Prometheus/Grafana 監控體系,即可構建穩定、高效、可演進的資料庫基礎設施。