在 Ubuntu 上從源碼編譯安裝 MySQL 5.0.40,記錄完整依賴解決、配置優化、權限落地流程,可作為無包管理器環境、自定義構建的參考範本。
# 更新源並安裝編譯工具鏈
sudo apt-get update
sudo apt-get install build-essential g++ gcc make automake perl
# MySQL 編譯依賴的庫
sudo apt-get install libncurses5-dev libkdev4-dev libkde4c2a
# 注:現代 Ubuntu 套件名可能為 libncurses5-dev libkf5dev-dev 等,請按 apt-cache search 結果調整
sudo groupadd mysql
sudo useradd -g mysql -s /bin/bash -d /usr/local/mysql mysql
# 安裝前綴目錄
sudo mkdir -p /usr/local/mysql
sudo chown -R mysql:mysql /usr/local/mysql
cd /usr/local/src
tar zxvf mysql-5.0.40.tar.gz
cd mysql-5.0.40
./configure --prefix=/usr/local/mysql \
--with-charset=utf8 \
--with-extra-charsets=all \
--enable-thread-safe-client \
--enable-local-infile \
--with-big-tables \
--with-readline \
--with-ssl \
--with-embedded-server \
--enable-assembler \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static
make -j$(nproc)
sudo make install
# 拷貝配置模板
sudo cp support-files/my-medium.cnf /etc/my.cnf
# 目錄歸屬
cd /usr/local/mysql
sudo chown -R mysql:mysql .
sudo chown -R root .
sudo chown -R mysql var
# 初始化系統表
sudo -u mysql bin/mysql_install_db --user=mysql
# 啟動服務
sudo -u mysql bin/mysqld_safe --user=mysql &
[mysqld]
# 基礎
datadir = /usr/local/mysql/var
socket = /tmp/mysql.sock
port = 3306
user = mysql
skip-name-resolve
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 字符集
character-set-server = utf8
collation-server = utf8_general_ci
# InnoDB 核心 (根據內存調整)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
# 連接層
max_connections = 500
table_open_cache = 2000
thread_cache_size = 32
# 慢查詢
slow_query_log = 1
slow_query_log_file = /usr/local/mysql/var/slow.log
long_query_time = 2
# 連接測試
/usr/local/mysql/bin/mysql -u root -p -e "STATUS; SHOW VARIABLES LIKE '%char%';"
# 設置 root 密碼
/usr/local/mysql/bin/mysqladmin -u root password 'strong-password'
# 安全腳本 (MySQL 5.0 內建)
/usr/local/mysql/bin/mysql_secure_installation
cat > /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 -u root -p shutdown
TimeoutSec=600
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysql
systemctl start mysql
curses.h not found → 安裝 libncurses5-dev 或創建軟鏈接 ln -s /usr/include/ncurses.h /usr/include/curses.h。libkde* 僅用於已棄用的 mysql-gui-tools,**可跳過**安裝,減少依賴。--with-mysqld-ldflags=-all-static 可能導致無法加載 UDF/插件,**生產建議移除**,改用動態鏈接。datadir 非默認路徑,需配置安全策略允許 mysqld 讀寫。編譯安裝雖靈活,但**維護成本高**(安全補丁需自行回港構建)。**無特殊定制需求,強烈建議使用官方 APT/RPM 源二進制包**。