萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Linux 安裝 MySQL 兩大方式深度解析:源碼編譯 vs 二進制包部署

安裝方式選型指引

維度源碼編譯二進制包 (Generic Linux)
定製化程度極高(功能裁剪、優化參數)固定配置
安裝耗時15-60 分鐘2-5 分鐘
依賴管理手動解決自包含,無依賴
升級維護重新編譯替換目錄+數據遷移
適用場景特殊優化需求、老舊系統、學習研究生產環境標準部署、CI/CD、容器化

方式一:源碼編譯安裝(MySQL 5.7 為例)

1. 環境準備

# CentOS/RHEL
yum install -y gcc gcc-c++ cmake ncurses-devel libaio-devel openssl-devel bison

# Ubuntu/Debian
apt-get install -y build-essential cmake libncurses5-dev libaio-dev libssl-dev bison

# 創建用戶
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql

2. 下載與編譯

cd /usr/local/src
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.42.tar.gz
tar xf mysql-5.7.42.tar.gz
cd mysql-5.7.42

# 編譯配置(生產常用優化參數)
cmake . \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.42 \
  -DMYSQL_DATADIR=/data/mysql/3306/data \
  -DSYSCONFDIR=/etc \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_general_ci \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_SSL=system \
  -DWITH_ZLIB=system \
  -DENABLED_LOCAL_INFILE=1 \
  -DWITH_BOOST=boost_1_59_0

make -j$(nproc)
make install

3. 後續配置

# 創建軟連接
ln -s /usr/local/mysql-5.7.42 /usr/local/mysql

# 目錄結構
mkdir -p /data/mysql/3306/{data,logs,tmp}
chown -R mysql:mysql /data/mysql

# 拷貝配置模板
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

# 初始化數據字典 (MySQL 5.7.6+)
/usr/local/mysql/bin/mysqld --initialize-insecure \
  --basedir=/usr/local/mysql \
  --datadir=/data/mysql/3306/data \
  --user=mysql

# SSL 憑證生成
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/3306/data

# 服務腳本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

4. 常見編譯錯誤解決

錯誤現象原因解決方案
No curses/termcap library缺 ncurses-develyum install ncurses-devel
Boost not foundMySQL 5.7 依賴 Boost-DWITH_BOOST=/path/to/boost 或下載官方帶 boost 包
CMake 版本過低需要 3.5+源碼編裝 CMake 3.18+
mysql-test 卡住運行測試套件耗時極長加參數 -DWITH_UNIT_TESTS=OFF 跳過

方式二:二進制包部署(推薦生產環境)

1. 下載解壓

# MySQL 8.0.33 為例
cd /opt
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz
tar xf mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.33-linux-glibc2.17-x86_64 /usr/local/mysql-8.0.33
ln -s /usr/local/mysql-8.0.33 /usr/local/mysql

2. 初始化與配置

# 目錄準備
mkdir -p /data/mysql/3306/{data,logs,tmp}
useradd -r -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /data/mysql /usr/local/mysql-8.0.33

# 配置文件 /etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
socket = /data/mysql/3306/mysql.sock
port = 3306
pid-file = /data/mysql/3306/mysql.pid
log-error = /data/mysql/3306/logs/error.log

# 初始化 (MySQL 8.0 生成臨時 root 密碼)
/usr/local/mysql/bin/mysqld --initialize \
  --basedir=/usr/local/mysql \
  --datadir=/data/mysql/3306/data \
  --user=mysql
# 輸出中包含:[Note] [Entryl]: A temporary password is generated for root@localhost: xxxx

# 啟動服務
/usr/local/mysql/support-files/mysql.server start

# 首次登錄修改密碼
mysql -u root -p'臨時密碼' -S /data/mysql/3306/mysql.sock
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass@123';

3. systemd 服務管理(現代 Linux 標準)

# /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
PIDFile=/data/mysql/3306/mysql.pid
TimeoutSec=300
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

# 管理命令
systemctl daemon-reload
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld

通用後續配置(兩種方式通用)

安全初始化

/usr/local/mysql/bin/mysql_secure_installation
# 依次設置:root密碼、移除匿名用戶、禁止root遠程登錄、移除test庫、刷新權限

環境變量

echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

防火牆放行

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

遷移舊數據到新安裝

# 停舊庫
systemctl stop mysqld_old

# 拷貝數據目錄(需相同大版本)
rsync -av /old/data/ /data/mysql/3306/data/
chown -R mysql:mysql /data/mysql/3306/data

# 啟新庫並升級系統表
systemctl start mysqld
/usr/local/mysql/bin/mysql_upgrade -u root -p --force
copyright © 萬盛學電腦網 all rights reserved