1. 为什么选择CentOS7安装MySQL?
作为Linux发行版中的常青树,CentOS7至今仍是企业级应用的主流选择。其长期支持周期(LTS)和出色的稳定性,使其成为数据库服务的理想载体。MySQL作为最流行的开源关系型数据库,在CentOS7上的部署有着广泛的应用场景——从个人博客到电商平台的后台数据存储。
注意:虽然CentOS7默认仓库提供的是MySQL 5.7版本,但生产环境建议通过官方仓库安装最新稳定版(当前为MySQL 8.0),以获得更好的性能和安全性。
我曾在多个生产环境中部署过MySQL,发现CentOS7的SELinux和防火墙配置是最容易出问题的环节。本文将特别强调这些关键点的处理方式,避免大家重蹈覆辙。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与依赖检查
2.1 系统基础配置
首先通过SSH连接到目标服务器,执行以下命令检查系统版本:
bash复制cat /etc/redhat-release
典型输出应为:CentOS Linux release 7.9.2009 (Core)
更新系统所有包至最新版本(这步很关键,能避免许多依赖冲突):
bash复制sudo yum update -y && sudo reboot
2.2 存储空间规划
MySQL的安装目录默认在/var/lib/mysql,建议单独挂载大容量分区。通过df -h查看磁盘空间,如果使用独立分区,需要确认挂载点权限:
bash复制sudo chown -R mysql:mysql /your/mount/point
2.3 关闭冲突服务
检查是否已存在mariadb或其他MySQL实例:
bash复制rpm -qa | grep -E 'mysql|mariadb'
systemctl list-unit-files | grep -E 'mysql|mariadb'
如果存在,需要彻底卸载:
bash复制sudo yum remove mariadb* -y
sudo rm -rf /var/lib/mysql
3. 官方仓库安装MySQL 8.0
3.1 添加MySQL官方仓库
CentOS7默认仓库不包含最新MySQL,需要手动添加官方repo:
bash复制sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
验证仓库是否添加成功:
bash复制yum repolist enabled | grep "mysql.*-community.*"
3.2 选择具体版本
查看可用版本:
bash复制yum --disablerepo=\* --enablerepo='mysql*-community*' list available
如果需要安装特定版本(如5.7),修改仓库配置:
bash复制sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
3.3 执行安装命令
安装MySQL服务器和客户端:
bash复制sudo yum install -y mysql-community-server mysql-community-client
关键组件说明:
mysql-community-server: 主服务程序mysql-community-client: 命令行客户端mysql-community-libs: 共享库文件mysql-community-common: 公共文件
4. 初始配置与安全加固
4.1 启动服务并设置开机自启
bash复制sudo systemctl start mysqld
sudo systemctl enable mysqld
检查运行状态:
bash复制systemctl status mysqld -l
4.2 获取临时密码
MySQL 8.0首次启动会生成临时密码:
bash复制sudo grep 'temporary password' /var/log/mysqld.log
输出示例:[Note] A temporary password is generated for root@localhost: JqkL12!sdfa
4.3 运行安全脚本
bash复制sudo mysql_secure_installation
按提示完成以下操作:
- 输入临时密码
- 设置新密码(需包含大小写、数字和特殊字符)
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 立即生效权限表
4.4 密码策略调整(可选)
如果觉得默认密码策略太严格,可以修改:
sql复制ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
SET GLOBAL validate_password.policy=LOW;
5. 关键配置调优
5.1 编辑主配置文件
bash复制sudo vi /etc/my.cnf
基础配置示例:
ini复制[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
# 连接设置
max_connections=200
wait_timeout=300
# 内存配置(根据服务器内存调整)
innodb_buffer_pool_size=1G
key_buffer_size=256M
5.2 处理SELinux问题
如果启用SELinux,需要设置正确上下文:
bash复制sudo chcon -R -t mysqld_db_t /var/lib/mysql
sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
5.3 防火墙配置
开放3306端口:
bash复制sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
6. 创建管理用户与测试数据库
6.1 登录MySQL控制台
bash复制mysql -u root -p
6.2 创建专用管理用户
sql复制CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
6.3 测试数据库操作
sql复制CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE
);
INSERT INTO users (username, email) VALUES ('testuser', 'test@example.com');
SELECT * FROM users;
7. 日常维护与问题排查
7.1 备份与恢复
使用mysqldump进行备份:
bash复制mysqldump -u admin -p --all-databases > full_backup.sql
恢复数据库:
bash复制mysql -u admin -p < full_backup.sql
7.2 性能监控
查看运行状态:
sql复制SHOW STATUS LIKE 'Threads_connected';
SHOW ENGINE INNODB STATUS;
7.3 常见问题解决
问题1:无法启动服务
检查错误日志:
bash复制sudo tail -n 50 /var/log/mysqld.log
问题2:连接数不足
临时增加连接数:
sql复制SET GLOBAL max_connections=500;
问题3:密码过期
修改密码策略:
sql复制ALTER USER 'admin'@'%' PASSWORD EXPIRE NEVER;
8. 升级与卸载注意事项
8.1 版本升级步骤
- 备份所有数据库
- 停止MySQL服务
- 添加新版本仓库
- 执行升级命令:
bash复制sudo yum update mysql-community-server
8.2 完全卸载MySQL
bash复制sudo systemctl stop mysqld
sudo yum remove mysql-community-* -y
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf*
在实际操作中,我发现许多开发者会忽略/etc/my.cnf.d/目录下的配置文件残留,这可能导致重新安装时配置冲突。建议彻底清理所有相关文件。
