1. 獲取 RPM 包 (官方推薦 YUM 源安裝,單包安裝僅離線/特定版本用)
# 官方 YUM 源 (推薦)
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm # 8.0
# 或 5.7
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql80-community-release-el7-5.noarch.rpm
yum repolist enabled | grep mysql
yum install -y mysql-community-server # 自動解決依賴 (libaio, numactl 等)
# 離線 RPM 手動安裝 (需按依賴順序)
# common -> libs -> client -> server
rpm -ivh mysql-community-common-*.rpm
rpm -ivh mysql-community-libs-*.rpm
rpm -ivh mysql-community-client-*.rpm
rpm -ivh mysql-community-server-*.rpm
# 缺依賴時:yum localinstall -y *.rpm (自動從配置源下載依賴)
2. 服務管理與首次啟動
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
# 5.7/8.0 首次啟動會:
# 1. 初始化 data 目錄
# 2. 生成臨時 root 密碼 (寫入 error log)
# 3. SSL 證書生成
# 4. 啟動服務
3. 獲取臨時密碼並登錄修改
# 查看臨時密碼
grep 'temporary password' /var/log/mysqld.log
# 2024-01-15T10:30:00.123456Z 1 [Note] A temporary password is generated for root@localhost: XyZ#Abc123
# 登錄並修改 (必須修改,否則後續操作報錯)
mysql -uroot -p'XyZ#Abc123' --connect-expired-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStr0ngP@ss!2024';
-- 或 5.7
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStr0ngP@ss!2024');
4. 安全初始化 (mysql_secure_installation)
mysql_secure_installation
# 交互式:
# 1. Validate password plugin? Y (建議開啟)
# 2. Change root password? N (已改)
# 3. Remove anonymous users? Y
# 4. Disallow root login remotely? Y (生產必選)
# 5. Remove test database? Y
# 6. Reload privilege tables? Y
5. 核心配置調整 (/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_unicode_ci
# 內存 (假設 16G 內存)
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=8
innodb_log_file_size=1G
innodb_log_files_in_group=2
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_file_per_table=1
# 連接
max_connections=1000
thread_cache_size=100
skip_name_resolve=ON
# Binlog/GTID
log_bin=binlog
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_expire_logs_seconds=604800
sync_binlog=1
# 慢查詢
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
# 重啟生效
systemctl restart mysqld
6. 驗證安裝
mysql -uroot -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; SHOW DATABASES;"
# 輸出版本、參數生效值、默認庫 (mysql, information_schema, performance_schema, sys)
7. 常見問題排查
- SELinux 阻擋:
setenforce 0 臨時;永久 sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config 重啟。或配置 mysqld_var_lib_t 上下文。
- 防火牆:
firewall-cmd --permanent --add-port=3306/tcp --add-port=33061/tcp; firewall-cmd --reload (MGR 需 33061)。
- 缺 libaio:
yum install -y libaio。
- data 目錄權限:
chown -R mysql:mysql /var/lib/mysql。
- 端口衝突:
netstat -ntlp | grep 3306 或 ss -ntlp。