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

Linux 下 MySQL 安裝部署與基礎運維全流程指南 (CentOS 7 / 8 / Rocky Linux 通用)

     編輯:MySQL 資料庫相關知識

一、安裝方式選型

方式優點缺點適用場景
官方 RPM/YUM (dnf)版本新、依賴自動解決、systemd 集成、易升級需配置官方源生產環境首選
系統默認源 (mariadb)零配置安裝版本舊、非 Oracle MySQL、功能差異測試/非關鍵業務
二進制通用包無依賴、可多版本共存、可自定義安裝路徑需手動配置 systemd、初始化、權限、啟動腳本離線環境/多實例/舊版本相容
源碼編譯極致優化、自定義特性耗時、依賴複雜、升級困難極少數特殊需求
Docker / Podman隔離、遷移快、版本鎖定、CI/CD 友好持久化/網絡/性能調優需容器化經驗雲原生/微服務/開發測試

二、官方 YUM 源安裝 MySQL 8.0 實戰 (CentOS 7/8, Rocky, Alma)

1. 配置官方源

# 下載並安裝源配置包
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm  # el7 適用 CentOS 7/Rocky 8
# 或 el8 包
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm

# 驗證源啟用
yum repolist enabled | grep mysql

2. 安裝服務端與客戶端

dnf install -y mysql-community-server mysql-community-client
# 或 yum install -y ...

3. 初始化與啟動

systemctl enable --now mysqld
# 首次啟動會自動執行 --initialize-insecure (生成隨機 root 密碼在錯誤日誌)
# 查看臨時密碼
grep 'temporary password' /var/log/mysqld.log

4. 安全初始化 (務必執行)

mysql_secure_installation
# 按提示:設置 root 強密碼、移除匿名用戶、禁止遠程 root、移除 test 庫、重載權限

三、關鍵目錄結構速查

用途默認路徑說明
數據目錄/var/lib/mysql核心資產,備份重點保護
主配置文件/etc/my.cnf或 /etc/mysql/my.cnf,包含 [mysqld] 等段
補充配置目錄/etc/my.cnf.d/模塊化配置,推薦業務配置放這裡
啟動腳本/服務/usr/lib/systemd/system/mysqld.servicesystemd 管理單元
二進制文件/usr/bin/ (mysql, mysqldump, mysqladmin...)客戶端工具
錯誤日誌/var/log/mysqld.log由 log-error 參數控制
Socket 文件/var/lib/mysql/mysql.sock本地連接用
PID 文件/var/run/mysqld/mysqld.pid進程 ID

四、核心配置模板 (/etc/my.cnf.d/custom.cnf)

[mysqld]
# 基礎
port = 3306
bind_address = 0.0.0.0
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
pid_file = /var/run/mysqld/mysqld.pid

# 字符集 (全鏈路 utf8mb4)
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
skip_character_set_client_handshake = ON

# InnoDB 核心 (按機器內存調整,假設 16G 內存)
innodb_buffer_pool_size = 10G        # 物理內存 60-70%
innodb_log_file_size = 1G            # 總 redo log 容量,大減少 checkpoint 壓力
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1   # 生產庫堅持 1,從庫可 2
innodb_flush_method = O_DIRECT       # 避免雙緩衝
innodb_file_per_table = ON
innodb_io_capacity = 2000            # SSD 建議 2000-5000,NVMe 更高
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# 連接與線程
max_connections = 2000
thread_cache_size = 64
back_log = 1024

# 日誌
log_bin = mysql-bin
binlog_format = ROW
binlog_row_image = FULL
expire_logs_days = 7
max_binlog_size = 1G
sync_binlog = 1                      # 生產庫堅持 1
log_error = /var/log/mysqld.log
slow_query_log = 1
slow_query_log_file = /var/log/slow.log
long_query_time = 1
log_queries_not_using_indexes = 0
log_slow_admin_statements = 0
log_throttle_queries_not_using_indexes = 60

# 其他
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
explicit_defaults_for_timestamp = ON
skip_name_resolve = ON               # 禁用 DNS 反解,加速連接

五、基礎運維操作速查表

操作命令
啟動/停止/重啟/狀態systemctl start|stop|restart|status mysqld
開機自啟systemctl enable mysqld
登錄mysql -u root -p (本地 Socket) / mysql -h 127.0.0.1 -P 3306 -u root -p (TCP)
修改密碼ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; FLUSH PRIVILEGES;
建庫建表CREATE DATABASE db CHARSET utf8mb4; CREATE TABLE t (id INT PRIMARY KEY) ENGINE=InnoDB;
備份 (邏輯)mysqldump -uroot -p --single-transaction --master-data=2 --routines --triggers --events --all-databases > /backup/full_$(date +%F).sql
恢復mysql -uroot -p < /backup/full_2023-10-01.sql
查看進程SHOW PROCESSLIST; / SHOW FULL PROCESSLIST;
查看主從狀態SHOW SLAVE STATUS\G / SHOW REPLICA STATUS\G (8.0.22+)
查看配置生效值SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

六、常見避坑指南

  1. SELinux:setsebool -P mysql_connect_any 1,數據目錄非默認路徑需 semanage fcontext -a -t mysqld_db_t "/new_datadir(/.*)?" + restorecon -R /new_datadir。
  2. 防火牆:firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload。
  3. 大頁內存:內存 > 64G 且高併發可開啟 large_pages=ON,需 OS 配置 HugePages。
  4. 時區:default_time_zone = '+08:00' 或系統 timedatectl set-timezone Asia/Shanghai。
  5. 定期 ANALYZE TABLE:維護統計信息,防止執行計劃劣化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved