前置依賴安裝
sudo apt-get update
sudo apt-get install -y \
build-essential \
cmake \
libncurses5-dev \
libssl-dev \
bison \
pkg-config \
libaio-dev \
libmecab-dev \
liblz4-dev \
libzstd-dev
建立用戶與目錄
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql/{data,logs,tmp}
sudo chown -R mysql:mysql /usr/local/mysql
下載、編譯、安裝
cd /usr/src
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36.tar.gz
tar -xzf mysql-8.0.36.tar.gz
cd mysql-8.0.36
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_INNODB_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DWITH_DEBUG=0
make -j$(nproc)
sudo make install
初始化與配置
cd /usr/local/mysql
# 初始化數據目錄(8.0 產生隨機 root 密碼)
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 或不安全初始化(無密碼,僅測試用)
# sudo bin/mysqld --initialize-insecure --user=mysql ...
# 配置文件
sudo cp support-files/my-default.cnf /etc/my.cnf
# 編輯 /etc/my.cnf 填入 basedir、datadir、port、server-id 等
# 目錄權限
sudo chown -R root:mysql /usr/local/mysql
sudo chown -R mysql:mysql /usr/local/mysql/data
# 系統服務
sudo cp support-files/mysql.server /etc/init.d/mysqld
sudo chmod +x /etc/init.d/mysqld
sudo update-rc.d mysqld defaults
# 環境變數
echo 'export PATH=/usr/local/mysql/bin:$PATH' | sudo tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
啟動與驗證
sudo service mysqld start
# 查看隨機密碼(若用 --initialize)
sudo grep 'temporary password' /usr/local/mysql/data/*.err
# 登入修改密碼
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
systemd 服務管理(Ubuntu 16.04+ 推薦)
sudo tee /etc/systemd/system/mysqld.service <<'EOF'
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
TimeoutSec=300
LimitNOFILE=65535
LimitNPROC=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable mysqld
sudo systemctl start mysqld
常見編譯錯誤對策
| 錯誤 | 原因 | 解決 |
| Curses library not found | 缺 libncurses5-dev | apt-get install libncurses5-dev |
| OpenSSL not found | 缺 libssl-dev | apt-get install libssl-dev |
| Bison not found | 缺 bison | apt-get install bison |
| make 失敗 | 記憶體不足 | 增加 swap 或減少並行度 `make -j2` |
為何生產環境不建議源碼編譯
- 升級/打補丁需重新編譯,運維成本極高
- 官方二進制包經過充分測試,穩定性更有保障
- 安全漏洞修復響應滯後
- 除非有極致定制需求(如特殊指令集優化、裁剪模組),否則優先選二進制包