首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

CentOS 7/8 安裝 MySQL 8.0 並開啟遠程訪問完整指南:yum 源配置、安全加固、防火牆策略

     編輯:MySQL 資料庫相關知識

CentOS 系統通過官方 Yum 源安裝 MySQL 8.0 是生產環境推薦方式:自動解決依賴、支援滾動更新、SELinux 友好。本文記錄從源配置、安裝、初始化、遠程授權、防火牆放行、安全基線加固的完整流程。

一、配置官方 Yum 源

# 下載並安裝 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

二、安裝 MySQL 服務端與客戶端

yum install -y mysql-community-server mysql-community-client

三、啟動服務與初始化

systemctl enable --now mysqld
systemctl status mysqld

獲取臨時 Root 密碼

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

首次登入修改密碼 (密碼策略要求:大小寫+數字+特殊符號+長度≥8)

mysql -uroot -p'XyZ#Abc123' --connect-expired-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongRootPass123!';
FLUSH PRIVILEGES;

四、開啟遠程訪問授權

方案 A:創建專用遠程用戶 (推薦,最小權限)

CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongAppPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

方案 B:授權 Root 遠程 (僅限受信網段,生產禁用 %)

CREATE USER 'root'@'10.0.0.%' IDENTIFIED BY 'StrongRootPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

五、防火牆放行 3306 端口

firewalld (CentOS 7/8 預設)

# 永久開放
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 (舊版/精簡環境)

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

六、SELinux 策略 (關鍵步驟,否則遠程連接被攔截)

# 檢查狀態
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)

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/Debian 系統差異補充

# 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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved