CentOS 7 環境下從源碼編譯安裝 MySQL 5.7.13,記錄 cmake 依賴解決、Boost 處理、ncurses 缺失等實際遇到的坑與解法。
# 系統:CentOS 7.x
# 依賴包
yum -y install gcc gcc-c++ cmake ncurses-devel bison perl-Data-Dumper
# 或手動編譯 cmake 3.6+、bison 3.0+
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz
tar -zxvf mysql-5.7.13.tar.gz
cd mysql-5.7.13
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=gbk \
-DDEFAULT_COLLATION=gbk_chinese_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/data/mysqldb \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost
CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=
解決:CMake 參數加 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost,自動下載編譯。
Curses library not found. Please install appropriate package...
On Redhat and derivates it is ncurses-devel.
解決:
yum -y install ncurses-devel
rm CMakeCache.txt # 必須刪除緩存重新配置
cmake ...(上述參數)
make -j$(nproc) # 並行編譯,依 CPU 核心數
make install
編譯耗時 20-60 分鐘視機器效能而定。
# 建立 mysql 使用者群組
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 建立資料目錄
mkdir -p /data/mysqldb
chown -R mysql:mysql /data/mysqldb
chown -R mysql:mysql /usr/local/mysql
# 初始化資料庫(5.7 語法)
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --datadir=/data/mysqldb --basedir=/usr/local/mysql
# 複製啟動腳本
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 配置檔
cp support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 設定 basedir、datadir、port、server_id 等
# 啟動
service mysqld start
初始化輸出的隨機密碼在錯誤日誌中:
cat /data/mysqldb/*.err | grep 'temporary password'
首次登入修改:
/usr/local/mysql/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# 或 iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'NewStrongPass123!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
mysql -V
mysql -u root -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'char%';"
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysqldb
port = 3306
server_id = 1
character_set_server = utf8mb4
innodb_buffer_pool_size = 4G
innodb_log_file_size = 1G
innodb_flush_method = O_DIRECT
sync_binlog = 1
binlog_format = row
gtid_mode = on
enforce_gtid_consistency = 1
源碼編譯安裝雖耗時,但可深度定製功能模組、優化編譯選項、掌握完整依賴鏈,適合對效能與穩定性有極致要求的環境。