☰
CentOS 7.9安装MySQL 8.0完整指南与优化实践
2026/10/31 15:32:22 网站建设 项目流程

1. 为什么选择CentOS安装MySQL?

在Linux服务器环境中部署数据库服务,CentOS和MySQL的组合堪称经典搭配。作为一名长期维护生产环境数据库的运维工程师,我见证了无数团队选择这个组合的合理性:

CentOS作为RHEL的社区分支,以其卓越的稳定性和长期支持周期著称。特别是在企业级应用中,CentOS 7即使停止维护后,其衍生版本(如Rocky Linux)依然延续着相同的基因。而MySQL作为最流行的开源关系型数据库,其5.7和8.0版本在事务处理、索引优化等方面表现优异。

实际部署中最常见的组合是:

  • CentOS 7 + MySQL 5.7(传统应用兼容方案)
  • CentOS 8 Stream + MySQL 8.0(追求新特性的选择)

重要提示:如果使用CentOS 8系列,需注意官方已转向Stream滚动更新模式,对生产环境而言需要更频繁的维护。本文将以CentOS 7.9为例演示安装过程,该方法同样适用于其他RHEL系发行版。

2. 环境准备与依赖检查

2.1 系统基础配置

在开始安装前,建议执行以下预处理操作(所有命令需要root权限):

# 更新系统基础包 yum update -y # 安装常用工具集 yum install -y vim wget curl net-tools lsof # 关闭防火墙(仅测试环境建议,生产环境应配置规则) systemctl stop firewalld systemctl disable firewalld # 禁用SELinux(避免权限问题) setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.2 存储空间规划

MySQL的存储需求主要取决于数据量,但基础安装需要确保:

  • /var目录至少有2GB空间(日志和临时文件)
  • 数据目录(默认/var/lib/mysql)根据业务需求预留空间

检查磁盘空间的实用命令:

df -h # 查看分区情况 lsblk # 查看块设备信息

如果使用独立数据盘,建议通过LVM管理以便后期扩容。以下是添加新磁盘的典型流程:

pvcreate /dev/sdb # 创建物理卷 vgcreate mysql_vg /dev/sdb # 创建卷组 lvcreate -L 100G -n mysql_lv mysql_vg # 创建逻辑卷 mkfs.xfs /dev/mysql_vg/mysql_lv # 格式化 mkdir /mysql_data mount /dev/mysql_vg/mysql_lv /mysql_data # 临时挂载

要使挂载永久生效,需在/etc/fstab中添加:

/dev/mapper/mysql_vg-mysql_lv /mysql_data xfs defaults 0 0

3. MySQL安装实战

3.1 官方Yum仓库配置

MySQL官方提供了专为RHEL/CentOS优化的仓库,比EPEL仓库中的版本更新更稳定:

# 下载MySQL官方的Yum仓库包 wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm # 安装仓库配置 rpm -ivh mysql80-community-release-el7-6.noarch.rpm # 检查可用版本(默认启用8.0版本) yum repolist enabled | grep mysql

如果需要安装MySQL 5.7,需修改仓库配置:

# 禁用8.0仓库 yum-config-manager --disable mysql80-community # 启用5.7仓库 yum-config-manager --enable mysql57-community

3.2 核心安装过程

执行安装命令并验证:

# 安装MySQL服务器和客户端 yum install -y mysql-community-server mysql-community-client # 验证安装版本 mysqld --version # 预期输出:mysqld Ver 8.0.33 for Linux on x86_64 (MySQL Community Server) # 启动服务并设置开机自启 systemctl start mysqld systemctl enable mysqld

首次启动时,MySQL会自动:

  1. 初始化数据目录
  2. 生成临时root密码(保存在日志中)
  3. 创建SSL证书和密钥文件

查看临时密码:

grep 'temporary password' /var/log/mysqld.log # 输出示例:2023-07-20T03:12:34.123456Z 6 [Note] A temporary password is generated for root@localhost: Jqwe+12_asdf

3.3 安全加固与初始化

使用临时密码登录并修改:

mysql -uroot -p # 输入刚才获取的临时密码 # 修改root密码(MySQL 8默认需要强密码) ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

建议运行安全向导脚本:

mysql_secure_installation

该脚本会引导完成以下安全设置:

  • 移除匿名用户
  • 禁止root远程登录
  • 删除测试数据库
  • 重载权限表

4. 深度配置优化

4.1 基础配置文件调整

MySQL 8的主要配置文件位于/etc/my.cnf,建议在[mysqld]段添加:

[mysqld] # 字符集设置 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 连接配置 max_connections=1000 wait_timeout=300 interactive_timeout=300 # 内存配置(根据服务器内存调整) innodb_buffer_pool_size=4G # 建议为物理内存的50-70% key_buffer_size=256M # 日志配置 slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=2 log_error=/var/log/mysql-error.log

4.2 性能优化建议

针对不同应用场景的配置建议:

OLTP事务型应用:

innodb_flush_log_at_trx_commit=1 sync_binlog=1 innodb_io_capacity=2000 innodb_io_capacity_max=4000

数据分析型应用:

innodb_buffer_pool_instances=8 innodb_read_io_threads=16 innodb_write_io_threads=16 query_cache_size=0 # MySQL 8已移除查询缓存

4.3 用户与权限管理

创建业务用户的标准流程:

-- 创建带密码策略的用户 CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'ComplexPass123!'; -- 授予最小必要权限 GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%'; -- 立即生效 FLUSH PRIVILEGES;

查看用户权限:

SHOW GRANTS FOR 'app_user'@'192.168.1.%';

5. 运维监控与排错

5.1 服务状态检查

常用监控命令:

# 查看MySQL运行状态 systemctl status mysqld # 检查活跃连接 mysqladmin -uroot -p processlist # 查看关键指标 mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" mysql -e "SHOW ENGINE INNODB STATUS\G"

5.2 日志分析技巧

MySQL主要有以下几种日志:

  1. 错误日志:/var/log/mysqld.log
  2. 慢查询日志:需在配置中指定路径
  3. 二进制日志:用于复制和时间点恢复

分析慢查询的典型方法:

# 使用mysqldumpslow工具 mysqldumpslow -s t /var/log/mysql-slow.log # 或使用pt-query-digest(需额外安装) pt-query-digest /var/log/mysql-slow.log > slow_report.txt

5.3 常见问题解决

问题1:无法启动服务检查步骤:

# 查看错误日志尾行 tail -50 /var/log/mysqld.log # 常见原因:权限问题 chown -R mysql:mysql /var/lib/mysql # 端口冲突检查 netstat -tulnp | grep 3306

问题2:忘记root密码重置方法:

# 停止MySQL服务 systemctl stop mysqld # 启动跳过权限检查 mysqld_safe --skip-grant-tables & # 无密码登录并修改 mysql -uroot UPDATE mysql.user SET authentication_string='' WHERE User='root'; FLUSH PRIVILEGES; exit; # 重启正常服务 systemctl restart mysqld

6. 生产环境进阶建议

6.1 备份策略实施

基础备份方案:

# 逻辑备份(适合小型数据库) mysqldump -uroot -p --all-databases --single-transaction > full_backup.sql # 物理备份(推荐大型数据库) systemctl stop mysqld rsync -av /var/lib/mysql /backup/mysql_data systemctl start mysqld

自动化备份脚本示例:

#!/bin/bash BACKUP_DIR="/backup/mysql" DATE=$(date +%Y%m%d) mysqldump -uroot -pMyPassword --all-databases --single-transaction | gzip > $BACKUP_DIR/full_$DATE.sql.gz find $BACKUP_DIR -type f -mtime +30 -delete

6.2 高可用方案选型

根据业务需求选择:

  1. 主从复制:简单易实现

    -- 在主库执行 CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 在从库执行 CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='ReplPass123!', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123456; START SLAVE;
  2. 组复制:MySQL 8内置的同步方案

  3. MGR(MySQL Group Replication):提供自动故障转移

6.3 版本升级路径

从MySQL 5.7升级到8.0的注意事项:

  1. 先升级到5.7的最新补丁版本
  2. 使用mysql_upgrade工具检查兼容性
  3. 注意认证插件变化(建议使用mysql_native_password)
  4. 测试所有业务SQL语句的兼容性

升级命令示例:

# 备份数据 mysqldump --all-databases > full_backup.sql # 安装新版本仓库 yum install mysql80-community-release-el7-6.noarch.rpm # 执行升级 yum update mysql-server systemctl restart mysqld mysql_upgrade -uroot -p

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询