openEuler 22.03 部署 MySQL 5.7:从 RPM 安装到生产环境安全加固
1. 环境准备与Mariadb清理
在openEuler 22.03上部署MySQL 5.7之前,首先要确保系统环境干净。很多Linux发行版默认会预装Mariadb,这可能导致与MySQL的冲突。我遇到过不少因为残留Mariadb组件导致MySQL服务启动失败的案例,所以彻底清理非常必要。
用这个命令检查已安装的Mariadb组件:
rpm -qa | grep -i mariadb如果发现有输出结果,说明系统存在Mariadb。这时候需要用强制卸载命令清理:
rpm -qa | grep mariadb | xargs rpm -e --nodeps这里有个坑要注意:有些依赖Mariadb-libs的系统组件可能会报错。遇到这种情况时,可以先安装mysql-community-libs-compat作为替代,再删除Mariadb。实测在openEuler上,这个兼容包能完美替代Mariadb的基础库功能。
2. RPM安装MySQL 5.7
2.1 配置Yum源
MySQL官方提供了专为EL7设计的Yum源,虽然openEuler不是CentOS,但兼容性很好。我建议先在/etc/yum.repos.d/下创建专用目录:
mkdir -p /etc/yum.repos.d/mysql wget -P /etc/yum.repos.d/mysql https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh /etc/yum.repos.d/mysql/mysql57-community-release-el7-11.noarch.rpm这里有个关键步骤:处理GPG密钥验证。直接安装可能会报错,需要先删除旧密钥再导入新的:
rm /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20222.2 安装与启动服务
执行安装命令时建议加上-y参数自动确认:
dnf install -y mysql-community-server安装完成后,启动服务前建议先检查文件完整性:
rpm -V mysql-community-server如果输出为空表示文件完整。启动服务并设置开机自启:
systemctl start mysqld systemctl enable mysqld首次启动后,MySQL会生成临时密码,查看方法:
grep 'temporary password' /var/log/mysqld.log3. 安全加固配置
3.1 运行安全向导
执行mysql_secure_installation会引导完成以下安全设置:
- 修改root密码(要求包含大小写字母、数字和特殊字符)
- 删除匿名用户
- 禁止root远程登录(生产环境强烈建议)
- 移除test数据库
- 重载权限表
实际操作时,建议选择Y删除匿名用户和test库。远程root登录根据需求决定,如果有多服务器管理需求可以保留,但一定要配合强密码。
3.2 关键参数优化
编辑/etc/my.cnf时,这些参数对生产环境特别重要:
[mysqld] port=3366 # 修改默认端口增加安全性 character-set-server=utf8mb4 # 完整支持emoji等特殊字符 default-storage-engine=INNODB max_connections=1000 # 根据服务器配置调整 innodb_buffer_pool_size=4G # 建议设为物理内存的70%修改端口后要更新SELinux策略:
semanage port -a -t mysqld_port_t -p tcp 33664. 生产环境专项优化
4.1 性能调优
在my.cnf中添加这些InnoDB优化参数:
innodb_flush_log_at_trx_commit=1 # 保证ACID特性 sync_binlog=1 # 确保binlog写入磁盘 innodb_log_file_size=256M # 大事务处理更高效 query_cache_type=0 # MySQL 5.7建议关闭查询缓存4.2 监控与维护
设置慢查询日志监控性能问题:
slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=2 log_queries_not_using_indexes=1定期维护建议创建自动化脚本:
#!/bin/bash # 每周优化表 mysqlcheck -u root -p --auto-repair --optimize --all-databases # 清理旧binlog mysql -u root -p -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY)"5. 防火墙与SELinux配置
openEuler默认使用firewalld,开放MySQL端口的正确姿势:
firewall-cmd --permanent --add-port=3366/tcp firewall-cmd --reload如果使用非标准端口,还需要更新SELinux策略:
semanage port -a -t mysqld_port_t -p tcp 3366 restorecon -Rv /var/lib/mysql # 重置安全上下文6. 备份策略实施
生产环境必须配置定期备份。推荐使用mysqldump结合cron实现自动化:
# 每日全量备份脚本 0 2 * * * /usr/bin/mysqldump -u backup -p'密码' --all-databases | gzip > /backup/mysql_$(date +\%F).sql.gz # 保留30天备份 find /backup -name "*.sql.gz" -mtime +30 -delete对于大型数据库,可以考虑使用Percona XtraBackup实现热备份。
7. 日常运维命令速查
- 查看运行状态:
systemctl status mysqld - 实时监控连接数:
mysqladmin -u root -p processlist - 检查表损坏:
mysqlcheck -u root -p --check --all-databases - 安全停止服务:
mysqladmin -u root -p shutdown - 查看版本信息:
mysql -V
遇到性能问题时,可以用这个命令快速查看状态:
SHOW ENGINE INNODB STATUS\G