CentOS 7 預裝 MariaDB 導致 MySQL 官方 RPM 衝突,且 SELinux 預設開啟阻擋服務啟動。本文記錄從卸載 MariaDB 到 MySQL 5.6/5.7 RPM 安裝、服務啟動、密碼初始化、遠程授權的完整避坑流程。
# 1. 查看已安裝包
rpm -qa | grep mariadb
# 輸出示例:
# mariadb-libs-5.5.35-3.el7.x86_64
# mariadb-5.5.35-3.el7.x86_64
# mariadb-server-5.5.35-3.el7.x86_64
# 2. 強制卸載(忽略依賴)
rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64
rpm -e --nodeps mariadb-5.5.35-3.el7.x86_64
rpm -e --nodeps mariadb-server-5.5.35-3.el7.x86_64
⚠️ 卸載 mariadb-libs 會連帶移除 postfix 等依賴郵件服務,若需保留郵件功能,改用 yum swap mariadb-libs mysql-community-libs(需配置 MySQL Yum Repo)。
下載三包(以 5.6.22 為例):
MySQL-client-advanced-5.6.22-1.el7.x86_64.rpmMySQL-devel-advanced-5.6.22-1.el7.x86_64.rpm(開發庫,非必裝)MySQL-server-advanced-5.6.22-1.el7.x86_64.rpm# 安裝
rpm -ivh MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-advanced-5.6.22-1.el7.x86_64.rpm
rpm -ivh MySQL-server-advanced-5.6.22-1.el7.x86_64.rpm
現象:service mysql start 報 ERROR! The server quit without updating PID file。
根因:SELinux Enforcing 模式阻擋 mysqld 讀寫資料目錄。
# 永久關閉(需重啟)
vi /etc/selinux/config
# SELINUX=enforcing → SELINUX=disabled
reboot
# 或臨時放行(不重啟)
setenforce 0
# 需配合 semanage fcontext / restorecon 設定正確上下文
建議生產環境**配置正確策略而非關閉**,但開發/測試環境直接 disabled 最省事。
# 啟動
service mysql start
# 或 systemctl start mysqld
# 5.7+ 首次啟動會生成隨機臨時密碼,位於錯誤日誌
grep 'temporary password' /var/log/mysqld.log
# 登入修改
mysql -uroot -p'臨時密碼'
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
# 1. 停止服務
service mysql stop
# 2. 跳過授權表啟動(後台)
mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# 3. 免密登入
mysql -uroot
# 4. 重置密碼(5.7+ 用 authentication_string)
UPDATE mysql.user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root';
FLUSH PRIVILEGES;
# 5. 正常重啟
service mysql restart
現象:Host '192.168.1.3' is not allowed to connect
mysql -uroot -p
-- 5.7+ 推薦 CREATE USER + GRANT
CREATE USER 'root'@'%' IDENTIFIED BY 'NewPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 或修改現有用戶 Host
UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
⚠️ 生產環境**禁止 root 遠程**,應建立專用業務用戶、限制來源 IP、啟用 SSL。
# firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
遵循上述流程,可在 CentOS 7 上乾淨部署 MySQL 官方版,規避 90% 的初始化坑點。