本文詳細記錄從依賴安裝、原始碼編譯、目錄規劃、參數配置到服務啟動與優化的完整流程,以 MySQL 5.6.12 為例,適用於 CentOS 與 Ubuntu 環境。
yum -y install wget gcc-c++ cmake make bison ncurses-devel perl unzip
sudo apt-get install -y g++ gcc make libpcre3 zlib1g libbz2-dev automake cmake perl libncurses5-dev bison
groupadd mysql useradd -r -g mysql mysql mkdir -p /data/logs/mysql /data/mysql
wget https://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz tar xf mysql-5.6.12.tar.gz cd mysql-5.6.12
執行 cmake 配置(關鍵參數說明見下):
cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/server/mysql-5.6.12 \ -DMYSQL_DATADIR=/data/mysql \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DMYSQL_USER=mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DENABLE_DOWNLOADS=1
| 參數 | 說明 |
|---|---|
| CMAKE_INSTALL_PREFIX | 安裝根目錄 |
| MYSQL_DATADIR | 資料檔存放目錄 |
| MYSQL_UNIX_ADDR | Socket 檔案路徑 |
| MYSQL_USER | 執行身分用戶 |
| DEFAULT_CHARSET | 預設字元集 |
| DEFAULT_COLLATION | 預設排序規則 |
| WITH_INNOBASE_STORAGE_ENGINE | 啟用 InnoDB |
| ENABLE_DOWNLOADS | 自動下載測試套件(如 gmock) |
常見錯誤處理:若出現 CMake Error: Problem extracting tar: gmock-1.6.0.zip,進入 source_downloads 目錄手動 unzip gmock-1.6.0.zip 後重跑 cmake,或移除 -DENABLE_DOWNLOADS=1 參數。
make && make install ln -s /usr/local/server/mysql-5.6.12 /usr/local/server/mysql chown -R mysql:mysql /usr/local/server/mysql* chown -R mysql:mysql /data/mysql /data/logs/mysql
/usr/local/server/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/server/mysql --collation-server=utf8_general_ci
若出現 TIMESTAMP with implicit DEFAULT value is deprecated 警告,後續在 my.cnf 加入 explicit_defaults_for_timestamp=true 即可解決。
cp /usr/local/server/mysql/support-files/mysql.server /etc/init.d/mysql
編輯安裝目錄下的 my.cnf(範例關鍵段落):
[mysqld] datadir = /data/mysql socket = /tmp/mysql.sock pid-file = /data/logs/mysql/mysql.pid user = mysql port = 3306 default_storage_engine = InnoDB innodb_file_per_table = 1 innodb_flush_method = O_DIRECT character-set-server=utf8 collation-server=utf8_general_ci skip-host-cache skip-name-resolve log_error = /data/logs/mysql/mysql-error.log slow_query_log = 1 long_query_time = 1 slow_query_log_file = /data/logs/mysql/mysql-slow.log explicit_defaults_for_timestamp=true max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket = /tmp/mysql.sock port = 3306
注意:被註解的參數(如 innodb_buffer_pool_size)需依實際硬體資源調整;確認 /etc/my.cnf 不存在衝突配置;啟動前再次檢查目錄權限。
service mysql start echo 'export PATH=$PATH:/usr/local/server/mysql/bin' >> /etc/profile source /etc/profile /usr/local/server/mysql/bin/mysql_secure_installation # 設定密碼、移除匿名帳號等 chkconfig mysql on # CentOS 開機自啟 # update-rc.d mysql defaults # Ubuntu
innodb_buffer_pool_size)InnoDB 最關鍵參數,建議設為實體記憶體 60%-70%(扣除 OS、其他服務、連線緩衝、Log 緩衝後)。過大導致 Swap 反而拖慢效能。
innodb_log_file_size)總大小建議能容納 1 小時寫入量,通常設定數百 MB 至數 GB。配合 innodb_log_files_in_group 使用。
key_buffer_size)僅緩存索引。可透過 SELECT SUM(INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE='MYISAM'; 或 du -sch `find /datadir -name "*.MYI"` 評估索引總大小,取較小值設定。
skip-name-resolve:跳過 DNS 解析,降低延遲。max_connections:依預期並發數設定,避免「Too many connections」。table_open_cache:建議為 max_connections 的 10 倍,上限 10000。max_connect_errors:防暴力破解,建議 2000+。open_files_limit:設大(65535)防止「too many open files」。原則:MySQL 預設值多已優化,僅調整核心參數即可;隨業務增長定期複核,避免過度優化導致不穩定。