CentOS 7 預裝 MariaDB(MySQL 分支),直接安裝官方 MySQL 會因共享庫 libmysqlclient.so 衝突導致依賴解析失敗。本文記錄強制移除 MariaDB、解決 postfix 依賴、手動 RPM 安裝 MySQL 5.5、配置文件遷移、數據目錄權限與 SELinux 多重阻礙的完整突破過程。
# 查看已安裝 MariaDB 包
rpm -qa | grep mariadb
# mariadb-libs-5.5.60-1.el7_5.x86_64
# 嘗試正常移除
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64
# 錯誤:依賴檢測失敗:
# libmysqlclient.so.18()(64bit) 被 postfix-2:2.10.1-6.el7.x86_64 需要
結論: 系統郵件服務 postfix 依賴 MariaDB 提供的共享庫,正常移除會破壞 postfix。需強制移除並後續處理。
rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
風險提示: postfix 將因缺庫無法啟動。若業務依賴本地郵件發送,需後續重裝 postfix 或改用外部 SMTP。
# 基礎依賴
yum install -y libaio net-tools vim
# 手動下載 MySQL 5.5 RPM(官方歸檔或鏡像站)
# MySQL-server-5.5.62-1.el7.x86_64.rpm
# MySQL-client-5.5.62-1.el7.x86_64.rpm
rpm -ivh MySQL-server-5.5.62-1.el7.x86_64.rpm
rpm -ivh MySQL-client-5.5.62-1.el7.x86_64.rpm
注意: MySQL 5.5 官方已停止維護(EOL 2018),僅用於舊系統兼容遷移,新項目請使用 5.7/8.0。
# 複製預設配置模板
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
# 編輯關鍵參數
vim /etc/my.cnf
# [mysqld]
# datadir=/home/mysql/data
# socket=/home/mysql/data/mysql.sock
# character-set-server=utf8mb4
# innodb_buffer_pool_size=512M
# ...
# 移動數據目錄至大分區
mkdir -p /home/mysql/data
mv /var/lib/mysql/* /home/mysql/data/
chown -R mysql:mysql /home/mysql/data
chmod -R 755 /home/mysql/data
service mysql start
# ERROR! The server quit without updating PID file
# 日志:Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)
chown -R mysql:mysql /home/mysql/data
chmod -R 755 /home/mysql/data
CentOS 7 預設 SELINUX=enforcing,MySQL 進程無權訪問非標準目錄 /home/mysql/data。
# 臨時驗證:設置寬容模式
setenforce 0
service mysql start
# 若啟動成功,確認為 SELinux 問題
永久解決方案二選一:
semanage fcontext -a -t mysqld_db_t "/home/mysql/data(/.*)?"
restorecon -Rv /home/mysql/data
# 需安裝 policycoreutils-python:yum install policycoreutils-python
vim /etc/selinux/config
# SELINUX=disabled
# 重啟機器生效
reboot
service mysql start
# Starting MySQL. SUCCESS!
mysql -u root -p
# 5.5 安裝後 root 默認無密碼,直接回車進入
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPass123!');
mysql> FLUSH PRIVILEGES;
若無強制 MySQL 專有特性依賴,直接使用系統集成的 MariaDB 更省心:
# 安裝 MariaDB 完整套件
yum -y install mariadb-server mariadb mariadb-devel
# systemd 管理
systemctl start mariadb
systemctl enable mariadb
# 安全初始化
mysql_secure_installation
# 防火牆
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
# 或 iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
# 驗證
mysql -u root -p -e "SHOW DATABASES;"
優勢: 完美兼容系統依賴(postfix 等)、無 SELinux 額外配置、yum 更新維護無憂、功能高度兼容 MySQL 5.5/5.6。
CentOS 7 強行替換 MariaDB 裝 MySQL 5.5 是「硬骨頭」:--nodeps 強拆 mariadb-libs → 手動 RPM 装包 → 遷移 datadir → 權限 chown → SELinux 上下文重標記(或關閉)。每一步都可能卡住。生產環境強烈建議順勢使用 MariaDB,或升級至 MySQL 5.7/8.0 官方 YUM 源安裝(自帶兼容包自動處理依賴)。若必須用 5.5,請預留充足排錯時間並做好 postfix 替代方案。