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

Ubuntu 編譯安裝 MySQL 完整步驟:從依賴套件到服務啟動

     編輯:MySQL 綜合教學

Ubuntu 從原始碼編譯安裝 MySQL 實戰紀錄

雖然 apt install mysql-server 最便捷,但特定版本需求、客製化編譯參數、學習內部機制時,原始碼編譯安裝不可或缺。本文記錄 Ubuntu 20.04/22.04 編譯安裝 MySQL 8.0 完整流程。

一、準備編譯環境

# 更新套件索引
sudo apt update

# 安裝編譯工具鏈與依賴
sudo apt install -y \
  build-essential cmake \
  libncurses5-dev libssl-dev \
  libreadline-dev libaio-dev \
  libmecab-dev liblz4-dev \
  libzstd-dev libprotobuf-dev \
  protobuf-compiler \
  bison flex \
  pkg-config \
  git

二、建立專用使用者與目錄

# 系統使用者 (無登入殼層)
sudo groupadd -r mysql
sudo useradd -r -g mysql -s /bin/false -M mysql

# 目錄規劃
sudo mkdir -p /usr/local/mysql/{data,log,tmp,run}
sudo chown -R mysql:mysql /usr/local/mysql

三、取得原始碼並編譯

# 下載 (官網或 GitHub)
cd /usr/local/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

# 建構目錄 (out-of-source build)
mkdir build && cd build

# CMake 配置 (關鍵參數)
cmake .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/usr/local/mysql/data \
  -DSYSCONFDIR=/etc \
  -DWITH_INNODB=ON \
  -DWITH_PARTITION_STORAGE_ENGINE=ON \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DWITH_LZ4=system \
  -DWITH_ZSTD=system \
  -DWITH_PROTOBUF=system \
  -DENABLED_LOCAL_INFILE=ON \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DWITH_DEBUG=OFF \
  -DCMAKE_BUILD_TYPE=Release

# 編譯 (依 CPU 核心數調整 -j)
make -j$(nproc)

# 安裝
sudo make install

四、初始化資料目錄與配置檔

cd /usr/local/mysql

# 初始化 (產生臨時 root 密碼)
sudo bin/mysqld --initialize --user=mysql \
  --datadir=/usr/local/mysql/data \
  --basedir=/usr/local/mysql

# 記下輸出的臨時密碼:[Note] A temporary password is generated for root@localhost: xxxx

# 配置檔
sudo tee /etc/my.cnf <<'EOF'
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/run/mysql.sock
pid-file = /usr/local/mysql/run/mysqld.pid
log-error = /usr/local/mysql/log/error.log
slow_query_log_file = /usr/local/mysql/log/slow.log
tmpdir = /usr/local/mysql/tmp

port = 3306
bind-address = 0.0.0.0

default-storage-engine = InnoDB
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = ON

max_connections = 500
table_open_cache = 4000

[client]
socket = /usr/local/mysql/run/mysql.sock
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4
EOF

五、系統服務註冊與啟動

# 建立 systemd 服務單元
sudo tee /etc/systemd/system/mysql.service <<'EOF'
[Unit]
Description=MySQL Community 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 --defaults-file=/etc/my.cnf
PIDFile=/usr/local/mysql/run/mysqld.pid
TimeoutSec=300
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

# 重載 systemd、啟用開機自動啟動、啟動服務
sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql

# 驗證
systemctl status mysql
/usr/local/mysql/bin/mysql -u root -p  # 輸入臨時密碼,首次登入需修改密碼

六、首次登入修改密碼與安全設定

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或執行安全精靈
/usr/local/mysql/bin/mysql_secure_installation

七、常見編譯問題排查

錯誤解決
CMake 找不到 OpenSSLapt install libssl-dev、確認 pkg-config --libs openssl
mecab 缺失apt install libmecab-dev 或 -DWITH_MECAB=OFF
Boost 版本不符MySQL 8.0 內建 Boost,無需外部安裝
權限錯誤確認 datadir/log/tmp/run 擁有者為 mysql:mysql
socket 連線失敗client/my.cnf 指定正確 socket 路徑

原始碼編譯安裝耗時較長但彈性最高。生產環境建議使用官方預編譯二進位包或套件管理器,僅在特殊需求時編譯。

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