CentOS 系統通過官方 Yum 源安裝 MySQL 8.0 是生產環境推薦方式:自動解決依賴、支援滾動更新、SELinux 友好。本文記錄從源配置、安裝、初始化、遠程授權、防火牆放行、安全基線加固的完整流程。
# 下載並安裝 RPM 源包 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm # CentOS 7 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-3.noarch.rpm # CentOS 8 # 驗證源啟用 yum repolist enabled | grep mysql
yum install -y mysql-community-server mysql-community-client
systemctl enable --now mysqld systemctl status mysqld
grep 'temporary password' /var/log/mysqld.log # 輸出示例: 2024-01-15T06:30:00.123456Z 0 [Note] [MY-010454] A temporary password is generated for root@localhost: XyZ#Abc123
mysql -uroot -p'XyZ#Abc123' --connect-expired-password ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongRootPass123!'; FLUSH PRIVILEGES;
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongAppPass123!'; GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%'; FLUSH PRIVILEGES;
CREATE USER 'root'@'10.0.0.%' IDENTIFIED BY 'StrongRootPass123!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%' WITH GRANT OPTION; FLUSH PRIVILEGES;
# 永久開放 firewall-cmd --permanent --add-port=3306/tcp # 或限制來源 IP firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="3306" accept' firewall-cmd --reload # 驗證 firewall-cmd --list-all
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT service iptables save
# 檢查狀態 getenforce sestatus # 允許 MySQL 網絡連接 setsebool -P mysql_connect_any 1 # 若自定義 datadir,需設置上下文 semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?" restorecon -Rv /data/mysql
/etc/my.cnf[mysqld] # 基礎 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock port=3306 pid-file=/var/run/mysqld/mysqld.pid # 字符集 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci # 遠程連接 bind-address=0.0.0.0 # 監聽所有網卡 skip-name-resolve # 跳過 DNS 反解,加快連接 # 日誌 log-error=/var/log/mysqld.log slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=1 log_queries_not_using_indexes=1 # InnoDB 核心 (按實際內存調整) innodb_buffer_pool_size=4G # 物理內存 60-75% innodb_log_file_size=1G innodb_log_buffer_size=256M innodb_flush_log_at_trx_commit=1 innodb_file_per_table=1 # 安全 local_infile=0 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
mysql_secure_installation # 交互式完成: # 1. 設置驗證插件 (建議否,使用原生) # 2. 修改 Root 密碼 (已完成) # 3. 移除匿名用戶 (Y) # 4. 禁止 Root 遠程登入 (Y,使用專用用戶) # 5. 移除 test 資料庫 (Y) # 6. 重新載入權限表 (Y)
# 客戶端測試 mysql -h 服务器IP -u app_user -p -e "SELECT VERSION();" # 網絡測試 telnet 服务器IP 3306 nc -zv 服务器IP 3306
# Ubuntu 20.04/22.04 apt update && apt install -y mysql-server # 配置文件: /etc/mysql/mysql.conf.d/mysqld.cnf # 關鍵修改: bind-address = 0.0.0.0 systemctl restart mysql