1. 为什么选择RPM方式安装MySQL
在CentOS环境下安装MySQL主要有三种主流方式:源码编译安装、YUM仓库安装和RPM包直接安装。对于大多数生产环境而言,RPM安装方式具有明显优势:
- 版本控制精确:可以直接获取特定版本的MySQL安装包,避免YUM仓库版本滞后问题
- 依赖自动处理:RPM会自动解决依赖关系,比源码编译更省心
- 安装路径规范:所有文件按Linux标准目录结构存放,便于后续管理
- 服务集成完善:自动生成systemd服务单元文件,开箱即用
提示:虽然YUM安装更简单,但企业环境通常需要特定MySQL版本,这时RPM方式就是最佳选择。Oracle官方提供的RPM包经过充分测试,稳定性有保障。
2. 准备工作与环境检查
2.1 系统兼容性确认
首先确认您的CentOS版本与MySQL的兼容性:
cat /etc/redhat-release主流MySQL版本对CentOS的支持情况:
- MySQL 8.0:建议CentOS 7.9+/8+
- MySQL 5.7:支持CentOS 7.x全系列
2.2 清理旧版MySQL
如果系统存在旧版MySQL,必须先彻底卸载:
# 检查已安装的MySQL组件 rpm -qa | grep mysql # 卸载现有包(以实际查询结果为准) sudo yum remove mysql-community-server mysql-common2.3 安装依赖库
确保系统已安装必要依赖:
sudo yum install libaio numactl openssl-devel3. 获取官方RPM安装包
3.1 访问MySQL官方仓库
推荐从MySQL官方YUM仓库获取最新稳定版:
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm3.2 选择具体版本
默认启用的是最新GA版本,如需指定版本:
# 查看可用版本 sudo yum repolist all | grep mysql # 启用指定版本仓库(例如选择5.7版本) sudo yum-config-manager --disable mysql80-community sudo yum-config-manager --enable mysql57-community4. 完整安装步骤
4.1 安装MySQL服务端
执行以下命令安装核心组件:
sudo yum install mysql-community-server安装过程会自动处理这些依赖:
- mysql-community-client
- mysql-community-common
- mysql-community-libs
4.2 初始化数据库
首次启动前必须进行初始化:
sudo mysqld --initialize --user=mysql此操作会:
- 创建数据目录/var/lib/mysql
- 生成临时root密码(注意保存)
- 建立系统表结构
4.3 启动MySQL服务
使用systemd管理服务:
sudo systemctl start mysqld sudo systemctl enable mysqld验证服务状态:
systemctl status mysqld5. 安全配置与优化
5.1 修改root密码
获取临时密码后立即修改:
sudo grep 'temporary password' /var/log/mysqld.log mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';5.2 运行安全向导
MySQL提供配置向导:
mysql_secure_installation该脚本会引导您完成:
- 移除匿名用户
- 禁止root远程登录
- 删除测试数据库
- 重载权限表
5.3 基础性能优化
编辑/etc/my.cnf添加基础配置:
[mysqld] default-storage-engine=INNODB character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci innodb_buffer_pool_size=1G # 根据内存调整6. 常见问题排查
6.1 安装失败:依赖冲突
典型报错:"Error: Package conflicts with..." 解决方案:
# 查看冲突包 rpm -qa | grep -i mariadb # 移除冲突包 sudo yum remove mariadb-libs6.2 启动失败:权限问题
错误日志位置:/var/log/mysqld.log 常见修复命令:
sudo chown -R mysql:mysql /var/lib/mysql sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?" sudo restorecon -Rv /var/lib/mysql6.3 连接失败:防火墙设置
开放3306端口:
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent sudo firewall-cmd --reload7. 生产环境建议
定期备份策略:
- 设置cron任务执行mysqldump
- 考虑使用Percona XtraBackup
监控配置:
sudo yum install mysql-community-utilities mysqladmin -uroot -p ext用户权限管理:
- 遵循最小权限原则
- 为每个应用创建独立用户
日志轮转: 配置logrotate管理MySQL日志:
sudo vi /etc/logrotate.d/mysql
我在实际运维中发现,很多连接问题其实源于字符集配置不当。建议所有新建数据库都显式指定utf8mb4字符集,避免后期迁移麻烦。另外,MySQL 8.0默认使用caching_sha2_password认证插件,如果老程序无法连接,可以在my.cnf中添加:
default_authentication_plugin=mysql_native_password