首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

CentOS 7 下 MySQL 5.6 原始碼編譯安裝與效能優化全流程實戰

     編輯:MySQL 綜合教學

環境與版本資訊

  • OS:CentOS 6.5 / 7.x (通用)
  • MySQL:5.6.19 原始碼包 mysql-5.6.19.tar.gz
  • 安裝前綴:/doiido/server/mysql
  • 數據目錄:/doiido/mysql/data

第一階段:系統層面準備

1. 防火牆開放 3306

# CentOS 6 (iptables)
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
/etc/rc.d/init.d/iptables save

# CentOS 7 (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

2. 安裝編譯依賴

yum -y install gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel cmake perl lsof bison

3. 移除系統自帶 MariaDB/MySQL

rpm -qa | grep -i mysql
rpm -e --allmatches --nodeps mysql-libs-5.1.71-1.el6.x86_64  # 視實際包名調整

4. 建立用戶與目錄結構


groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql
mkdir -p /doiido/mysql/data
chown -R mysql:mysql /doiido/mysql

第二階段:原始碼編譯安裝 (CMake)


cd /doiido/soft
tar -zxvf mysql-5.6.19.tar.gz
cd mysql-5.6.19

cmake \
-DCMAKE_INSTALL_PREFIX=/doiido/server/mysql \
-DMYSQL_DATADIR=/doiido/mysql/data \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DSYSCONFDIR=/etc \
-DWITH_SSL=yes \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=on \
-DCMAKE_C_FLAGS="-O3" \
-DCMAKE_CXX_FLAGS="-O3"

make -j$(nproc) && make install

關鍵編譯參數說明

參數作用
-DCMAKE_C_FLAGS="-O3"啟用最高級別編譯器優化 (針對 CPU 指令集)
-DWITH_SSL=yes啟用 SSL 加密連接支援
-DDEFAULT_CHARSET=utf8預設字符集 (新專案建議 utf8mb4)
-DWITH_INNOBASE_STORAGE_ENGINE=1編譯 InnoDB (5.6 內建,此參數確保啟用)

第三階段:安裝後配置與啟動

1. 權限與軟連結


chown -R mysql:mysql /doiido/server/mysql
ln -s /doiido/server/mysql/lib/lib* /usr/lib/
ln -s /doiido/server/mysql/bin/mysql /usr/bin/mysql

2. 配置文件 /etc/my.cnf


[mysqld]
character-set-server = utf8
default-storage-engine = InnoDB
basedir = /doiido/server/mysql
datadir = /doiido/mysql/data
log-error = /doiido/mysql/mysql_error.log
pid-file = /doiido/mysql/mysql.pid
max_allowed_packet = 32M
explicit_defaults_for_timestamp = true
innodb_buffer_pool_size = 1G  # 視記憶體 60-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1

3. 初始化數據目錄 (5.6 專用)


/doiido/server/mysql/scripts/mysql_install_db \
  --basedir=/doiido/server/mysql \
  --datadir=/doiido/mysql/data \
  --user=mysql

4. 註冊系統服務


cp /doiido/server/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
# 編輯 /etc/init.d/mysqld 確認 basedir/datadir 路徑正確
chkconfig --add mysqld
chkconfig --level 345 mysqld on
service mysqld start

第四階段:效能優化 - Google Perftools (tcmalloc)

原理

tcmalloc (Thread-Caching Malloc) 針對多線程高併發分配優化,減少 malloc/free 鎖爭用,MySQL 作為典型多線程應用受益顯著。

安裝步驟


# 1. libunwind (64位必裝,tcmalloc 依賴)
cd /doiido/soft
tar zxvf libunwind-1.1.tar.gz
cd libunwind-1.1
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC && make CFLAGS=-fPIC install

# 2. gperftools (tcmalloc 所在包)
cd /doiido/soft
tar zxvf gperftools-2.2.tar.gz
cd gperftools-2.2
./configure && make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig

啟用 tcmalloc


# 編輯 MySQL 啟動腳本
vi /doiido/server/mysql/bin/mysqld_safe
# 在 "# executing mysqld_safe" 下方添加:
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so

service mysqld restart

驗證生效


/usr/sbin/lsof -n | grep tcmalloc
# 輸出包含 mysqld 進程映射 libtcmalloc.so 即成功

效能優化效果驗證建議

  1. sysbench OLTP 測試對比 tcmalloc 前後 QPS/TPS
  2. 監控 innodb_buffer_pool_pages_free、Threads_running、Innodb_row_lock_time_avg
  3. 關注 malloc 相關內存碎片率下降

遷移建議: MySQL 5.6 已停止維護 (EOL 2021/02),新部署**強烈建議 MySQL 8.0 或 Percona Server 8.0**,原生支援更多優化特性 (即時 DDL、隱藏索引、CTE、窗口函數、更好的成本模型),且社區活躍、安全更新及時。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved