1. 项目概述
在CentOS7环境下安装MySQL是Linux系统管理员和开发者的基础技能之一。作为最流行的开源关系型数据库,MySQL在Web应用、企业系统和数据分析等领域有着广泛应用。CentOS7作为企业级Linux发行版,其稳定性和安全性使其成为服务器环境的常见选择。
本文将详细介绍在CentOS7系统上安装MySQL的完整流程,包括:
- 系统环境准备
- 软件源配置
- MySQL安装与初始化
- 安全加固配置
- 常见问题排查
整个过程基于官方推荐的最佳实践,同时融入了我在实际运维工作中的经验总结。无论你是刚接触Linux的新手,还是需要快速搭建测试环境的老手,都能从本文找到可直接复用的操作指南。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖检查
2.1 系统基础检查
在开始安装前,建议先确认系统基本信息:
bash复制# 查看系统版本
cat /etc/redhat-release
# 检查系统架构
uname -m
# 确认内存和存储空间
free -h
df -h
注意:MySQL 5.7至少需要2GB内存才能稳定运行,生产环境建议4GB以上。对于测试环境,可以通过添加swap空间临时解决内存不足问题。
2.2 关闭SELinux
CentOS7默认启用的SELinux可能会影响MySQL的正常运行,建议临时设置为permissive模式:
bash复制# 查看当前状态
getenforce
# 临时修改
setenforce 0
# 永久修改(需重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
2.3 清理旧版本MySQL
如果系统上存在旧版MySQL或MariaDB,应先彻底移除:
bash复制# 检查已安装的MySQL相关包
rpm -qa | grep -i mysql
# 移除现有包
yum remove -y mysql mysql-server mysql-libs
# 清理残留文件和目录
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
3. MySQL安装与配置
3.1 配置MySQL YUM源
官方推荐的安装方式是通过MySQL YUM仓库:
bash复制# 下载MySQL YUM仓库RPM包
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# 安装仓库
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
# 默认启用的是MySQL 8.0,如需安装5.7版本需修改
sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/mysql-community.repo
echo "[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql" >> /etc/yum.repos.d/mysql-community.repo
# 更新YUM缓存
yum makecache
3.2 安装MySQL服务器
执行以下命令安装MySQL 5.7:
bash复制yum install -y mysql-community-server
安装完成后检查版本:
bash复制mysqld --version
3.3 初始化MySQL
首次启动前需要进行初始化:
bash复制# 启动MySQL服务
systemctl start mysqld
# 查看临时root密码
grep 'temporary password' /var/log/mysqld.log
# 设置开机自启
systemctl enable mysqld
3.4 安全配置
使用mysql_secure_installation进行基础安全设置:
bash复制mysql_secure_installation
按照提示操作:
- 输入临时root密码
- 设置新密码(需包含大小写字母、数字和特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
4. 配置文件优化
4.1 基本配置调整
编辑/etc/my.cnf文件,添加以下配置:
ini复制[mysqld]
# 通用配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 连接设置
max_connections=200
wait_timeout=1800
interactive_timeout=1800
# 缓冲池设置(根据内存调整)
innodb_buffer_pool_size=1G
提示:生产环境应根据服务器硬件配置调整参数,特别是innodb_buffer_pool_size通常设置为可用内存的50-70%。
4.2 重启服务生效
bash复制systemctl restart mysqld
5. 用户与权限管理
5.1 创建应用用户
避免使用root账户进行操作,建议为每个应用创建独立用户:
sql复制CREATE USER 'appuser'@'%' IDENTIFIED BY 'ComplexPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
5.2 防火墙配置
如需远程访问,需开放3306端口:
bash复制firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
6. 常见问题排查
6.1 启动失败排查
如果MySQL无法启动,可按以下步骤排查:
-
检查错误日志:
bash复制tail -n 50 /var/log/mysqld.log -
常见问题:
- 端口冲突:netstat -tulnp | grep 3306
- 权限问题:chown -R mysql:mysql /var/lib/mysql
- 空间不足:df -h /var
6.2 忘记root密码
重置root密码步骤:
-
停止MySQL服务:
bash复制
systemctl stop mysqld -
以安全模式启动:
bash复制
mysqld_safe --skip-grant-tables & -
修改密码:
sql复制UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; -
重启服务:
bash复制
systemctl restart mysqld
7. 性能优化建议
7.1 基础优化参数
在/etc/my.cnf中添加以下性能相关参数:
ini复制[mysqld]
# 查询缓存(适用于读多写少场景)
query_cache_type=1
query_cache_size=64M
# InnoDB配置
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=2
innodb_flush_method=O_DIRECT
# 临时表配置
tmp_table_size=64M
max_heap_table_size=64M
7.2 定期维护
建议设置定期维护任务:
bash复制# 每天凌晨3点优化表
0 3 * * * mysqlcheck -o --all-databases
8. 备份与恢复
8.1 基础备份方法
使用mysqldump进行完整备份:
bash复制mysqldump -u root -p --all-databases > full_backup.sql
8.2 自动化备份脚本
创建/etc/cron.daily/mysql_backup:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql"
mkdir -p $BACKUP_DIR
mysqldump -u root -pPASSWORD --all-databases | gzip > $BACKUP_DIR/full_$DATE.sql.gz
find $BACKUP_DIR -type f -mtime +7 -delete
设置可执行权限:
bash复制chmod +x /etc/cron.daily/mysql_backup
9. 监控与日志
9.1 启用慢查询日志
在/etc/my.cnf中添加:
ini复制slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=2
log_queries_not_using_indexes=1
9.2 基础监控命令
常用监控命令:
sql复制-- 查看连接数
SHOW STATUS LIKE 'Threads_connected';
-- 查看运行中的查询
SHOW PROCESSLIST;
-- 查看表状态
SHOW TABLE STATUS FROM dbname;
10. 升级与迁移
10.1 小版本升级
通过YUM直接升级:
bash复制yum update mysql-community-server
systemctl restart mysqld
10.2 大版本迁移
从5.7升级到8.0的注意事项:
- 先备份所有数据
- 检查兼容性问题:
bash复制
mysqlcheck -u root -p --all-databases --check-upgrade - 修改YUM仓库配置启用8.0版本
- 执行升级操作
11. 高可用方案
11.1 主从复制配置
基本主从复制设置步骤:
-
主服务器配置:
ini复制[mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW -
从服务器配置:
ini复制[mysqld] server-id=2 relay-log=mysql-relay-bin read-only=1 -
创建复制用户:
sql复制CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -
从服务器启动复制:
sql复制CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=position; START SLAVE;
12. 安全加固
12.1 基础安全措施
- 定期更换密码
- 限制root远程访问
- 启用SSL连接
- 安装审计插件:
sql复制INSTALL PLUGIN audit_log SONAME 'audit_log.so';
12.2 安全扫描工具
使用mysql_secure_installation和第三方工具如:
- MySQL Enterprise Firewall
- Percona Toolkit安全检查
13. 容器化部署
13.1 Docker方式安装
对于需要快速部署测试环境:
bash复制docker run --name mysql57 \
-e MYSQL_ROOT_PASSWORD=yourpassword \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
-d mysql:5.7
13.2 容器与原生安装对比
| 特性 | 原生安装 | 容器化 |
|---|---|---|
| 隔离性 | 低 | 高 |
| 性能 | 最优 | 略低 |
| 部署速度 | 慢 | 快 |
| 维护复杂度 | 高 | 低 |
| 适用场景 | 生产环境 | 开发测试 |
14. 开发工具集成
14.1 常用客户端工具
- 命令行客户端:mysql -u root -p
- 图形化工具:
- MySQL Workbench
- DBeaver
- Navicat
14.2 IDE集成
在PHPStorm、VSCode等IDE中配置MySQL连接:
- 安装数据库插件
- 新建MySQL连接
- 配置连接参数(主机、端口、用户)
- 测试连接
15. 性能测试
15.1 基准测试工具
-
sysbench:
bash复制
sysbench oltp_read_write --db-driver=mysql prepare sysbench oltp_read_write --db-driver=mysql run -
mysqlslap:
bash复制
mysqlslap --concurrency=50 --iterations=10 --query=query.sql
15.2 监控指标
关键性能指标:
- QPS(每秒查询数)
- TPS(每秒事务数)
- 连接利用率
- 缓冲池命中率
16. 故障恢复
16.1 数据恢复流程
- 停止MySQL服务
- 备份当前数据文件
- 恢复备份文件
- 启动服务并验证
16.2 崩溃恢复
InnoDB自动恢复机制:
- 检查错误日志确定问题
- 尝试自动恢复
- 如失败则使用innodb_force_recovery参数
17. 最佳实践总结
经过多年运维经验,我总结了以下CentOS7下MySQL安装的最佳实践:
- 始终使用官方YUM仓库安装
- 安装后立即运行mysql_secure_installation
- 为每个应用创建独立用户和数据库
- 根据硬件配置优化my.cnf
- 设置定期备份和监控
- 保持系统补丁更新
对于生产环境,建议在安装完成后进行全面的性能测试和安全扫描,确保系统稳定可靠。测试环境可以适当放宽安全限制,但应保持与生产环境相似的配置以便问题复现。
