# 下載並安裝源配置包(以 8.0 為例)
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
# 或 Fedora 直接啟用模塊
sudo dnf module enable mysql:8.0
sudo dnf install mysql-community-server mysql-community-client
# 或舊版 yum
sudo yum install mysql-community-server mysql-community-client
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo 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 -u root -p
# 輸入上一步臨時密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 8.0 推薦 caching_sha2_password 插件
-- 兼容舊客戶端可用:
-- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass123!';
sudo mysql_secure_installation
# 交互式完成:
# - 修改 root 密碼
# - 移除匿名用戶
# - 禁止 root 遠程登錄
# - 移除 test 庫
# - 重新載入權限表
CREATE USER 'app_user'@'%' IDENTIFIED BY 'AppPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER
ON app_db.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
# 方式 1:mysqladmin
mysqladmin -u root -p password 'NewPass123!'
# 方式 2:SQL
ALTER USER 'user'@'host' IDENTIFIED BY 'NewPass123!';
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;
sudo dnf install mysql-workbench-community
# 或通用工具
sudo dnf install dbeaver-ce
應用程序菜單 → 系統工具 → MySQL Workbench / DBeaver。
/etc/my.cnf 精簡模板[mysqld]
# 基礎
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
# 連接
max_connections=500
max_connect_errors=100000
# InnoDB 核心(按內存調整)
innodb_buffer_pool_size=1G # 物理內存 60-70%
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1 # 生產建議 1
innodb_file_per_table=ON
innodb_thread_concurrency=0 # 0=自動
# 慢查詢
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=1
log_queries_not_using_indexes=1
# Binlog(主從/增量備份必開)
log_bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
修改後 sudo systemctl restart mysqld。
# 防火牆開放 3306
sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
# SELinux 允許 MySQL 讀寫非默認目錄(如掛載獨立數據盤)
sudo semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
sudo restorecon -Rv /data/mysql
# 連接測試
mysql -u app_user -p -h localhost app_db
# 狀態檢查
mysqladmin -u root -p status
# 輸出包含 Uptime、Threads、Questions、Slow queries 等
| 現象 | 原因/解決 |
|---|---|
| 無法連接:Can't connect to MySQL server | 服務未啟動、socket 路徑錯誤、防火牆攔截、bind-address=127.0.0.1 限制遠程 |
| Authentication plugin 'caching_sha2_password' cannot be loaded | 客戶端版本過舊,改用 mysql_native_password 或升級驅動 |
| 密碼策略報錯:Your password does not satisfy the current policy requirements | 調整 validate_password.policy 或使用更複雜密碼 |
| data 目錄權限錯誤 | chown -R mysql:mysql /var/lib/mysql、restorecon |
| InnoDB 表空間遷移後報錯 | 需同步遷移 ibdata1、ib_logfile*、.ibd,並保證 innodb_data_file_path 一致 |