CentOS 7 是伺服器部署 MySQL 的主流選擇。本文提供三種安裝方式:官方 YUM 倉庫(推薦)、RPM 套件離線安裝、官方二進制壓縮包(通用),並涵蓋初始化、安全配置、字符集設定、系統服務管理與驗證測試全流程。
# MySQL 8.0
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# MySQL 5.7
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql*-community-release-el7-*.rpm
yum install -y mysql-community-server
# 安裝過程會自動導入 GPG Key,輸入 y 確認
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
grep 'temporary password' /var/log/mysqld.log
# 輸出範例:2023-10-01T02:30:00.123456Z 1 [Note] A temporary password is generated for root@localhost: xYz#Abc123
mysql_secure_installation
# 依提示操作:
# 1. 輸入臨時密碼
# 2. 設定新密碼(需符合 validate_password 政策)
# 3. 移除匿名用戶? Y
# 4. 禁止 root 遠程登入? Y(生產建議 Y,改用專用帳號)
# 5. 移除 test 資料庫? Y
# 6. 重新載入權限表? Y
# 1. 下載 RPM Bundle(官網 Downloads → MySQL Community Server → Red Hat Enterprise Linux / Oracle Linux)
# 2. 上傳至伺服器解壓
tar -xvf mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar
# 3. 安裝核心套件(依賴順序重要)
rpm -ivh mysql-community-common-*.rpm
rpm -ivh mysql-community-client-plugins-*.rpm
rpm -ivh mysql-community-libs-*.rpm
rpm -ivh mysql-community-client-*.rpm
rpm -ivh mysql-community-server-*.rpm
# 若缺少依賴:yum install -y libaio numactl-libs
後續步驟同方式一(啟動、臨時密碼、安全初始化)。
# 1. 建立用戶與目錄
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /usr/local/mysql /data/mysql
# 2. 下載解壓
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-*.tar.xz -C /usr/local/mysql --strip-components=1
# 3. 初始化資料目錄
cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql
# 輸出會顯示臨時 root 密碼,請記錄
# 4. 配置 my.cnf
cat > /etc/my.cnf <<'EOF'
[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
port=3306
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-storage-engine=InnoDB
innodb_buffer_pool_size=1G
max_connections=500
log-error=/data/mysql/error.log
pid-file=/data/mysql/mysql.pid
EOF
# 5. 建立系統服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
# 6. 環境變數
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
# 7. 啟動
service mysqld start
在 /etc/my.cnf [mysqld] 區段:
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
[client] 區段:
default-character-set=utf8mb4
[mysql] 區段:
default-character-set=utf8mb4
mysql -uroot -p
# 建立遠程帳號
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass@123';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
並確認防火牆開放 3306:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
mysql -uapp_user -p -h 127.0.0.1 -e "SHOW DATABASES; SELECT VERSION();"
| 問題 | 原因與解決 |
|---|---|
| 忘記 root 密碼 | 停止服務 → mysqld_safe --skip-grant-tables & → 免密登入 → ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'; → 重啟 |
| ERROR 1045 (28000): Access denied | 密碼錯誤、主機不匹配、權限未刷新、skip-grant-tables 未關閉 |
| 無法遠程連線 | bind-address=0.0.0.0、防火牆、雲廠商安全組、帳號 host 非 % |
| 中文亂碼 | 確認 client/connection/results/database/table/column 皆為 utf8mb4 |
生產環境**強烈建議使用官方 YUM 倉庫安裝 MySQL 8.0** 並配合 mysql_secure_installation 完成加固。二進制包適合多版本共存或特殊路徑需求。安裝後務必:設定 utf8mb4、建立業務專用帳號、開啟防火牆/安全組、配置備份策略、接入監控體系。