CentOS 上安裝 MySQL 主流有三種方式:**Yum 官方源(推薦)**、**RPM 包**、**通用二進制包**。本文覆蓋三種方式,以 MySQL 5.7/8.0 為例,含初始化、安全加固、遠程授權全流程。
# 下載並安裝官方 Yum 源包(含 5.7/8.0/Innovation)
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
# 或 5.7 專用源
# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql80-community-release-el7-5.noarch.rpm
# 查看可用子倉庫
yum repolist all | grep mysql
# 切換到 5.7(默認 8.0)
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum install -y mysql-community-server
# 依賴自動解決:mysql-community-common, libs, client 等
systemctl start mysqld
systemctl enable mysqld
# 5.7/8.0 首次啟動自動初始化 data 目錄,生成臨時 root 密碼
grep 'temporary password' /var/log/mysqld.log
# 輸出示例:2023-01-01T00:00:00.000000Z 0 [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 Yum Repository -> RPM Bundle)
# 2. 上傳至服務器,解壓
tar -xvf mysql-5.7.42-1.el7.x86_64.rpm-bundle.tar
# 3. 卸載舊版(關鍵!避免衝突)
yum remove -y mariadb-libs mysql* # CentOS 7 預裝 mariadb-libs
# 4. 按依賴順序安裝
rpm -ivh mysql-community-common-5.7.42-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.42-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.42-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.42-1.el7.x86_64.rpm
# 如有依賴缺失:yum localinstall -y *.rpm
# 5. 後續同 Yum 方式:啟動、初始化、mysql_secure_installation
# 1. 下載 Linux Generic 包
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz
# 2. 解壓部署
tar -xvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-5.7.42-linux-glibc2.12-x86_64 /usr/local/mysql
# 3. 創建用戶與目錄
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /data/mysql /var/log/mysql
chown -R mysql:mysql /usr/local/mysql /data/mysql /var/log/mysql
# 4. 配置 my.cnf(參考生產模板)
cat > /etc/my.cnf <<'EOF'
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
character-set-server = utf8mb4
default-storage-engine = INNODB
log-error = /var/log/mysql/error.log
pid-file = /var/log/mysql/mysqld.pid
innodb_buffer_pool_size = 1G
# ... 其他參數
EOF
# 5. 初始化數據目錄
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 記錄臨時密碼
# 6. 配置系統服務
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
# 7. 環境變量
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
mysql -u root -p
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON `mydb`.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# 本地
mysql -u app_user -p -h 127.0.0.1
# 遠程
mysql -u app_user -p -h server_ip
| 版本 | 狀態 | 建議場景 |
|---|---|---|
| 5.7 | EOL 2023-10 | 存量項目維護,不建議新項目 |
| 8.0 LTS | GA,長期支持至 2026+ | 新項目首選,CTE、窗口函數、JSON 增強、性能提升 |
| 8.4 LTS | 最新 LTS | 長期穩定運行項目 |
mariadb-libs,安裝 MySQL 前必須卸載caching_sha2_password,舊客戶端需指定 mysql_native_passwordvalidate_password 策略導致密碼設置失敗,臨時調整策略或用複雜密碼my.cnf、systemd/init.d 服務、logrotate