MySQL的編譯安裝實(shí)戰(zhàn)指南
在 Linux(以 CentOS 7/Stream 8/9 為例)上源碼編譯安裝 MySQL 8.0是一個(gè)相對(duì)復(fù)雜的過(guò)程,因?yàn)樗枰罅康囊蕾?lài)庫(kù)、較高的內(nèi)存(建議 4GB 以上,否則編譯可能失?。┮约拜^新的 CMake 版本。
以下是基于最新環(huán)境整理的MySQL 8.0 源碼編譯安裝完整實(shí)戰(zhàn)指南。
?? 編譯前重要提示
- 硬件要求:編譯過(guò)程非常消耗內(nèi)存和 CPU。建議至少 2核 CPU 和 4GB 內(nèi)存。如果內(nèi)存只有 2GB,必須增加 Swap 分區(qū),否則
make過(guò)程中會(huì)被系統(tǒng)殺掉(OOM)。 - 時(shí)間成本:編譯過(guò)程可能需要 30 分鐘到 2 小時(shí),取決于機(jī)器性能。
- Boost 庫(kù):MySQL 8.0 強(qiáng)依賴(lài) Boost 庫(kù),且對(duì)版本要求嚴(yán)格。通常推薦下載包含 Boost 的源碼包(文件名帶
boost)。
第一步:系統(tǒng)環(huán)境準(zhǔn)備
1. 卸載沖突軟件
確保系統(tǒng)中沒(méi)有安裝 MariaDB 或舊版 MySQL。
# 停止服務(wù) systemctl stop mariadb systemctl disable mariadb # 卸載 yum remove -y mariadb-libs mariadb mysql mysql-libs rm -rf /etc/my.cnf /etc/mysql
2. 安裝編譯依賴(lài)工具
MySQL 8.0 編譯需要 gcc, gcc-c++, cmake, ncurses, bison, openssl 等開(kāi)發(fā)包。
yum install -y gcc gcc-c++ cmake make ncurses-devel bison openssl-devel openssl libaio-devel libtirpc-devel rpcgen libxcrypt-devel perl wget tar vim
3. 升級(jí) CMake (關(guān)鍵步驟)
CentOS 7 自帶的 CMake 版本通常過(guò)低(2.8.x),而 MySQL 8.0 需要 CMake 3.5+(建議 3.16+)。
如果 cmake --version 顯示版本低于 3.5,請(qǐng)執(zhí)行以下操作升級(jí):
# 下載較新版本的 cmake (例如 3.24.2) cd /usr/local/src wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2-linux-x86_64.tar.gz # 或者編譯安裝源碼版 cmake (如果上面的二進(jìn)制包不可用) # wget https://cmake.org/files/v3.24/cmake-3.24.2.tar.gz # 解壓二進(jìn)制包直接可用 tar -zxvf cmake-3.24.2-linux-x86_64.tar.gz mv cmake-3.24.2-linux-x86_64 cmake-3.24.2 ln -s /usr/local/src/cmake-3.24.2/bin/cmake /usr/bin/cmake ln -s /usr/local/src/cmake-3.24.2/bin/ccmake /usr/bin/ccmake # 驗(yàn)證版本 cmake --version # 應(yīng)顯示 3.24.2 或更高
4. 創(chuàng)建用戶(hù)和目錄
# 創(chuàng)建 mysql 用戶(hù)和組 groupadd mysql useradd -r -g mysql -s /bin/false mysql # 創(chuàng)建安裝目錄和數(shù)據(jù)目錄 mkdir -p /usr/local/mysql mkdir -p /data/mysql chown -R mysql:mysql /data/mysql chown -R mysql:mysql /usr/local/mysql
第二步:下載源碼包
強(qiáng)烈建議下載帶有 Boost 的源碼包(文件名包含 boost),這樣可以避免手動(dòng)下載匹配版本的 Boost 庫(kù)的麻煩。
前往官網(wǎng)或使用 wget 下載(版本號(hào)可根據(jù)需要調(diào)整,這里以 8.0.36 為例):
cd /usr/local/src # 下載帶 boost 的源碼包 (約 200MB+) wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.36.tar.gz # 解壓 tar -zxvf mysql-boost-8.0.36.tar.gz cd mysql-8.0.36
第三步:配置 CMake (核心步驟)
創(chuàng)建一個(gè) build 目錄進(jìn)行編譯(推薦 out-of-source 編譯),然后運(yùn)行 cmake 配置。
mkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql \ -DSYSCONFDIR=/etc \ -DWITH_BOOST=../boost/boost_1_81_0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DWITHOUT_MROONGA_STORAGE_ENGINE=1 \ -DWITH_DEBUG=0 \ -DWITH_SSL=system \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=0
參數(shù)解釋?zhuān)?/strong>
-DCMAKE_INSTALL_PREFIX: 安裝路徑。-DMYSQL_DATADIR: 數(shù)據(jù)文件存放路徑。-DWITH_BOOST: 指定 Boost 庫(kù)的路徑(解壓后的源碼包內(nèi)自帶,路徑需對(duì)應(yīng)實(shí)際文件夾名,如boost_1_81_0)。-DDEFAULT_CHARSET: 默認(rèn)字符集,推薦utf8mb4。-DWITH_SSL=system: 使用系統(tǒng)安裝的 OpenSSL。
注意:如果
cmake報(bào)錯(cuò),請(qǐng)仔細(xì)閱讀錯(cuò)誤信息,通常是缺少某個(gè)開(kāi)發(fā)包(如rpcgen或libtirpc),安裝后重新運(yùn)行 cmake 命令即可。
第四步:編譯與安裝
這一步最耗時(shí)。建議使用 make -j 開(kāi)啟多線程編譯(nproc 查看 CPU 核數(shù))。
# 編譯 (根據(jù) CPU 核數(shù)調(diào)整 -j 后面的數(shù)字,例如 4 核就用 -j 4) make -j $(nproc) # 安裝 make install
如果在 make 過(guò)程中卡死或報(bào)錯(cuò) Killed,說(shuō)明內(nèi)存不足,請(qǐng)立即增加 Swap 分區(qū)。
第五步:初始化與配置
1. 環(huán)境變量配置
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile source /etc/profile
2. 編寫(xiě)配置文件 /etc/my.cnf
[mysqld] basedir = /usr/local/mysql datadir = /data/mysql port = 3306 socket = /tmp/mysql.sock pid-file = /data/mysql/mysqld.pid user = mysql character-set-server = utf8mb4 collation-server = utf8mb4_general_ci skip-name-resolve sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket = /tmp/mysql.sock default-character-set = utf8mb4
3. 初始化數(shù)據(jù)庫(kù)
MySQL 8.0 推薦使用 --initialize-insecure 生成空密碼,方便首次登錄,或者使用 --initialize 生成隨機(jī)密碼。
# 確保數(shù)據(jù)目錄權(quán)限正確 chown -R mysql:mysql /data/mysql chown -R mysql:mysql /usr/local/mysql # 初始化 (不安全模式,root 無(wú)密碼) /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql # 如果要用安全模式(生成臨時(shí)密碼),請(qǐng)看日志末尾 # /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
4. 啟動(dòng)服務(wù)
編譯安裝不會(huì)自動(dòng)注冊(cè) systemd 服務(wù),需要手動(dòng)復(fù)制腳本或創(chuàng)建 service 文件。
方法 A:使用官方提供的啟動(dòng)腳本(簡(jiǎn)單)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chmod +x /etc/init.d/mysqld # 啟動(dòng) /etc/init.d/mysqld start # 設(shè)置開(kāi)機(jī)自啟 chkconfig --add mysqld chkconfig mysqld on
方法 B:使用 Systemd (推薦 CentOS 7+)創(chuàng)建 /etc/systemd/system/mysqld.service:
[Unit] Description=MySQL Server After=network.target [Service] Type=forking User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target
然后執(zhí)行:
systemctl daemon-reload systemctl start mysqld systemctl enable mysqld
第六步:登錄與安全加固
登錄數(shù)據(jù)庫(kù)
如果是 --initialize-insecure:
mysql -u root
如果是 --initialize:
grep 'temporary password' /data/mysql/error.log mysql -u root -p # 輸入上面查到的臨時(shí)密碼
修改密碼與配置首次登錄后(特別是安全初始化),必須修改密碼:
-- 修改 root 密碼 ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!'; -- 允許遠(yuǎn)程連接 (可選) CREATE USER 'root'@'%' IDENTIFIED BY 'YourStrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 退出 EXIT;
驗(yàn)證安裝
mysql -V # 輸出應(yīng)包含 "Ver 8.0.xx" netstat -tlnp | grep 3306 # 確認(rèn)端口監(jiān)聽(tīng)
常見(jiàn)問(wèn)題排查
- 內(nèi)存不足 (OOM): 編譯時(shí)進(jìn)程被殺。
- 解決:
dd if=/dev/zero of=/swapfile bs=1M count=4096 && mkswap /swapfile && swapon /swapfile(增加 4G Swap)。
- 解決:
- Boost 版本不匹配: CMake 報(bào)錯(cuò) Boost 版本不對(duì)。
- 解決: 務(wù)必下載帶
boost的源碼包,并且-DWITH_BOOST路徑要指向解壓出來(lái)的具體 boost 文件夾(如boost_1_81_0)。
- 解決: 務(wù)必下載帶
- SSL 錯(cuò)誤: 編譯找不到 SSL。
- 解決: 確保安裝了
openssl-devel,并在 CMake 中使用-DWITH_SSL=system。
- 解決: 確保安裝了
按照以上步驟,您就可以成功從源碼編譯并安裝一個(gè)定制的 MySQL 8.0 數(shù)據(jù)庫(kù)了。
到此這篇關(guān)于MySQL的編譯安裝實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)mysql編譯安裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL實(shí)現(xiàn)類(lèi)似Oracle序列的方案
今天小編就為大家分享一篇關(guān)于MySQL實(shí)現(xiàn)類(lèi)似Oracle序列的方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
MYSQL每隔10分鐘進(jìn)行分組統(tǒng)計(jì)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了如何利用MYSQL實(shí)現(xiàn)每隔10分鐘進(jìn)行分組統(tǒng)計(jì)的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。2016-12-12
mysql 發(fā)生系統(tǒng)錯(cuò)誤1067的解決方法
今天要把WEB項(xiàng)目打包成EXE,可是在數(shù)據(jù)庫(kù)上卡住了。在啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)的時(shí)候發(fā)生系統(tǒng)錯(cuò)誤 1067。2009-09-09
Mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)多字段過(guò)濾的方法
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)多字段過(guò)濾的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Mybatis mapper動(dòng)態(tài)代理的原理解析
這篇文章主要介紹了Mybatis mapper動(dòng)態(tài)代理的原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
mysql安裝報(bào)錯(cuò)unknown?variable?‘mysqlx_port=0.0‘簡(jiǎn)單解決過(guò)程
這篇文章主要給大家介紹了關(guān)于mysql安裝報(bào)錯(cuò)unknown?variable?‘mysqlx_port=0.0‘的解決過(guò)程,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-08-08

