本教學以 MySQL 4.1.20 為例,適用於 Linux 伺服器從原始碼 tarball 編譯安裝。現代生產環境建議使用套件管理器 (apt/yum/dnf) 或官方 RPM/DEB 安裝,但原始碼編譯仍有助於理解元件結構與客製化需求。
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-4.1.20.tar.gz
# 或從官網下載 mysql-4.1.20.tar.gz
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# -r: 系統帳號、-s /bin/false: 禁止登入
tar zxvf mysql-4.1.20.tar.gz
cd mysql-4.1.20
mkdir -p /opt/mysql
./configure \
--prefix=/opt/mysql \
--with-charset=utf8 \
--with-collation=utf8_general_ci \
--with-extra-charsets=all \
--enable-thread-safe-client \
--with-big-tables \
--with-readline \
--with-ssl \
--with-embedded-server \
--localstatedir=/opt/mysql/data
make
make install
關鍵參數說明:
--prefix:安裝根目錄,統一管理便於備份遷移--with-charset=utf8:預設字符集 (現代建議 utf8mb4)--localstatedir:資料檔案目錄,分離程式與資料cd /opt/mysql
cp support-files/my-medium.cnf /etc/my.cnf # 載入中型範本配置
bin/mysql_install_db --user=mysql # 初始化 system tables
chown -R root .
chown -R mysql data
chgrp -R mysql .
bin/mysqladmin -u root password 'StrongPassw0rd!'
# 前景啟動測試
bin/mysqld_safe --user=mysql &
# 連線驗證
bin/mysql -u root -p
# 輸入密碼後應見 Welcome to the MySQL monitor...
# 方法一:rc.local (傳統)
echo "/opt/mysql/bin/mysqld_safe --user=mysql &" >> /etc/rc.local
chmod +x /etc/rc.local
# 方法二:systemd (現代 Linux 推薦)
cat > /etc/systemd/system/mysql.service <<'EOF'
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/opt/mysql/bin/mysqladmin shutdown
TimeoutSec=600
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable mysql
systemctl start mysql
[mysqld]
# 基礎
port=3306
socket=/tmp/mysql.sock
basedir=/opt/mysql
datadir=/opt/mysql/data
pid-file=/opt/mysql/data/mysql.pid
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 效能核心 (依記憶體調整,範例 4GB RAM)
key_buffer_size=256M
table_open_cache=1024
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=64M
thread_cache_size=16
query_cache_size=64M
query_cache_type=1
# InnoDB (若使用)
innodb_buffer_pool_size=2G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
# 安全與日誌
max_connect_errors=100000
slow_query_log=1
slow_query_log_file=/opt/mysql/data/slow.log
long_query_time=2
log_error=/opt/mysql/data/error.log
[client]
default-character-set=utf8mb4
port=3306
socket=/tmp/mysql.sock
| 項目 | 指令 | 預期結果 |
|---|---|---|
| 服務狀態 | systemctl status mysql 或 ps aux | grep mysqld | running / 進程存在 |
| 連線測試 | mysql -u root -p -e "SELECT VERSION();" | 顯示 4.1.20-log |
| 字符集 | mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';" | utf8mb4 相關 |
| 資料目錄權限 | ls -ld /opt/mysql/data | owner=mysql, group=mysql |
| 防火牆 | ss -tlnp | grep 3306 | LISTEN 0.0.0.0:3306 |
gcc gcc-c++ make ncurses-devel openssl-develmysql_install_db 報錯:檢查 datadir 權限、磁碟空間、/tmp 可寫入error.log,常見於 innodb_log_file_size 不匹配舊檔案 → 刪除 ib_logfile* 重啟bind-address=0.0.0.0、防火牆開放 3306、帳號 host='%'MySQL 4.1 已於 2009 年停止維護,生產環境務必升級至 5.7 / 8.0 / 8.4 LTS。升級路徑:
mysqldump --all-databases --routines --triggers --single-transaction > backup.sqlmysql < backup.sqlmysql_upgrade -u root -p原始碼編譯安裝 MySQL 能深入掌握目錄結構、編譯選項與權限模型。現代部署建議採用官方套件或容器化 (Docker/Podman),配合 Ansible、Terraform 實現基礎設施即代碼,確保可重現、可審計、可擴展。