本文詳細記錄在 CentOS 6.5 x86_64 環境下,從原始碼編譯安裝 MySQL 5.6.23 的完整流程,包含環境準備、依賴安裝、編譯參數調整、目錄規劃、配置檔優化、資料庫初始化與服務啟動等關鍵步驟,適合生產環境部署參考。
chkconfig iptables off service iptables stop setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
CentOS 6.5 預裝 mysql-libs-5.1.x 會與高版本衝突,需先移除:
rpm -qa | grep mysql rpm -e --nodeps mysql-libs-5.1.61-4.el6.x86_64
yum -y install gcc gcc-c++ cmake ncurses-devel perl-Data-Dumper bison
groupadd mysql useradd -r -g mysql -s /sbin/nologin -M mysql
採用 /u01/my3306 作為安裝根目錄,分離數據、日誌、臨時檔案:
mkdir -p /u01/my3306/{data,log/iblog,log/binlog,log/relaylog,run,tmp}
chown -R mysql:mysql /u01/my3306
chmod -R 755 /u01/my3306
cd /usr/local/src wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.23.tar.gz tar zxvf mysql-5.6.23.tar.gz cd mysql-5.6.23
關鍵參數說明:
- CMAKE_INSTALL_PREFIX:安裝路徑
- INSTALL_DATADIR:數據目錄
- DEFAULT_CHARSET/DEFAULT_COLLATION:預設字符集
- WITH_SSL:啟用 SSL
- MYSQL_UNIX_ADDR:Socket 檔案路徑
- SYSCONFDIR:配置檔搜尋目錄(/etc)
cmake \ -DCMAKE_INSTALL_PREFIX=/u01/my3306 \ -DINSTALL_DATADIR=/u01/my3306/data \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DWITH_SSL=yes \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DSYSCONFDIR=/etc \ -DWITH_READLINE=on
make -j$(nproc) make install
建立 /u01/my3306/my.cnf,核心優化參數如下:
[client] port=3306 socket=/u01/my3306/run/mysql.sock default-character-set=utf8 [mysql] prompt="\\u@\\h [\\d]> " [mysqld] # 基礎設定 basedir=/u01/my3306 datadir=/u01/my3306/data port=3306 server_id=101 socket=/u01/my3306/run/mysql.sock pid_file=/u01/my3306/run/mysqld.pid tmpdir=/u01/my3306/tmp user=mysql skip_name_resolve=ON explicit_defaults_for_timestamp=true max_connections=8192 max_user_connections=8000 open_files_limit=65535 max_allowed_packet=128M # InnoDB 核心優化 innodb_buffer_pool_size=128M innodb_buffer_pool_instances=8 innodb_log_file_size=1G innodb_log_files_in_group=4 innodb_log_buffer_size=64M innodb_flush_log_at_trx_commit=1 innodb_flush_method=O_DIRECT innodb_file_per_table=ON innodb_file_format=Barracuda innodb_io_capacity=1000 innodb_read_io_threads=4 innodb_write_io_threads=10 innodb_purge_threads=1 innodb_lock_wait_timeout=10 # Binlog 設定(主從複制必備) log_bin=/u01/my3306/log/binlog/binlog binlog_format=ROW binlog_cache_size=32K max_binlog_size=500M max_binlog_cache_size=2G expire_logs_days=7 sync_binlog=100 log_slave_updates=ON # 慢查詢日誌 slow_query_log=1 slow_query_log_file=/u01/my3306/log/slow.log long_query_time=1 log_queries_not_using_indexes=1 log_slow_admin_statements=1 # Relay Log relay_log=/u01/my3306/log/relaylog/relaylog relay_log_index=/u01/my3306/log/relaylog/relaylog.index # 其他 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character_set_server=utf8 collation_server=utf8_general_ci [mysqld_safe] datadir=/u01/my3306/data log_error=/u01/my3306/log/alert.log
cd /u01/my3306 rm -rf data/* log/iblog/* log/binlog/* chmod -R 777 data/ log/iblog/ log/binlog/ chmod 755 my.cnf ./scripts/mysql_install_db --defaults-file=/u01/my3306/my.cnf --datadir=/u01/my3306/data --user=mysql chmod -R 777 data/ log/iblog/ log/binlog/
echo 'export PATH=$PATH:/u01/my3306/bin' >> /root/.bash_profile source /root/.bash_profile
mysqld_safe --defaults-file=/u01/my3306/my.cnf --user=mysql &
mysql -h127.0.0.1 -uroot -e "SHOW VARIABLES LIKE '%version%'; SHOW VARIABLES LIKE '%log_bin%';"
建立初始化、啟動、登入腳本便於日常維護:
# init3306.sh rm -rf /u01/my3306/data/* /u01/my3306/log/iblog/* /u01/my3306/log/binlog/* chmod -R 777 /u01/my3306/data/ /u01/my3306/log/iblog/ /u01/my3306/log/binlog/ chmod 755 /u01/my3306/my.cnf /u01/my3306/scripts/mysql_install_db --defaults-file=/u01/my3306/my.cnf --datadir=/u01/my3306/data --user=mysql chmod -R 777 /u01/my3306/data/ /u01/my3306/log/iblog/ /u01/my3306/log/binlog/ # start3306.sh /u01/my3306/bin/mysqld_safe --defaults-file=/u01/my3306/my.cnf --user=mysql & # logon3306.sh /u01/my3306/bin/mysql -h127.0.0.1 -uroot
echo "/u01/my3306/bin/mysqld_safe --defaults-file=/u01/my3306/my.cnf --user=mysql &" >> /etc/rc.d/rc.local chmod +x /etc/rc.d/rc.local
完成上述步驟即可獲得一個高效能、生產就緒的 MySQL 5.6.23 實例。建議後續根據實際業務負載調整 innodb_buffer_pool_size、連接數等核心參數。