麒麟V10 SP3系统下MySQL 8.0的部署与安全加固实战
1. 麒麟V10 SP3系统下MySQL 8.0部署全流程
在国产操作系统麒麟V10 SP3上部署MySQL 8.0,整个过程可以分为环境准备、软件安装、服务配置三个主要阶段。我最近在项目中实际部署过多次,总结出一套稳定可靠的安装流程,下面就把详细步骤分享给大家。
首先需要检查系统是否已经存在其他数据库软件。麒麟系统默认可能会安装MariaDB,这与MySQL会产生冲突。执行以下命令查看:
rpm -qa | grep mariadb rpm -qa | grep mysql如果发现有相关软件包,需要先进行卸载。我遇到过不少因为旧版本没卸载干净导致安装失败的情况,所以这一步很重要:
sudo yum remove mariadb-server mariadb mariadb-common sudo yum remove mysql mysql-server接下来创建专门的安装目录,这样便于管理安装文件。我习惯在/opt目录下创建mysql文件夹:
sudo mkdir /opt/mysql将下载好的MySQL安装包解压到这个目录。这里有个小技巧,使用-v参数可以看到解压过程,方便排查问题:
sudo tar -xvf mysql-8.0.41-1.el8.x86_64.rpm-bundle.tar -C /opt/mysql/进入安装目录后,你会看到多个rpm包。安装顺序很关键,我遇到过因为顺序不对导致的依赖错误。正确的安装顺序应该是:
cd /opt/mysql sudo rpm -ivh mysql-community-common-8.0.41-1.el8.x86_64.rpm sudo rpm -ivh mysql-community-client-plugins-8.0.41-1.el8.x86_64.rpm sudo rpm -ivh mysql-community-libs-8.0.41-1.el8.x86_64.rpm sudo rpm -ivh mysql-community-client-8.0.41-1.el8.x86_64.rpm sudo rpm -ivh mysql-community-icu-data-files-8.0.41-1.el8.x86_64.rpm sudo rpm -ivh mysql-community-server-8.0.41-1.el8.x86_64.rpm安装完成后,就可以启动MySQL服务了。这里建议先检查服务状态,确保一切正常:
sudo systemctl start mysqld sudo systemctl status mysqld第一次启动时,MySQL会自动生成一个临时密码。这个密码存放在日志文件中,可以通过以下命令查看:
sudo grep 'temporary password' /var/log/mysqld.log使用这个临时密码登录后,第一件事就是修改root密码。MySQL 8.0有密码强度要求,我建议设置包含大小写字母、数字和特殊字符的复杂密码:
mysql -uroot -p alter user user() identified by 'YourNewStrongPassword123!';2. MySQL 8.0关键安全配置实战
安装完成只是第一步,要让MySQL真正安全可用,还需要进行一系列安全加固。这部分内容很多DBA都会忽略,但恰恰是最重要的环节。
2.1 密码策略强化
MySQL 8.0默认启用了密码验证组件,这是很好的安全特性。但我们可以进一步调整策略:
# 查看当前密码策略 SHOW VARIABLES LIKE 'validate_password%'; # 修改密码策略(根据实际需求调整) SET GLOBAL validate_password.length = 12; SET GLOBAL validate_password.mixed_case_count = 1; SET GLOBAL validate_password.number_count = 1; SET GLOBAL validate_password.special_char_count = 1; SET GLOBAL validate_password.policy = MEDIUM;建议将这些配置写入my.cnf文件,使其永久生效。我遇到过因为没持久化配置,重启后策略恢复默认导致的安全问题。
2.2 远程访问控制
很多项目需要远程连接MySQL,但直接开放root远程访问风险很大。正确的做法是:
-- 创建专用管理账号 CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongAdminPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; -- 限制root只能本地访问 UPDATE mysql.user SET host='localhost' WHERE user='root'; FLUSH PRIVILEGES;如果只需要特定IP访问,可以将'%'换成具体IP地址。在实际项目中,我还会配置防火墙规则,只允许应用服务器IP连接数据库端口。
2.3 服务自启动与日志配置
生产环境需要确保MySQL服务能随系统自动启动:
sudo systemctl enable mysqld日志配置也很关键,建议在my.cnf中添加以下配置:
[mysqld] log-error=/var/log/mysqld.log slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=2 log_bin=mysql-bin这样配置后,既能记录错误日志,也能捕获执行缓慢的SQL语句,便于后续性能优化。
3. 性能调优与生产环境建议
MySQL安装配置完成后,还需要根据实际业务需求进行性能调优。以下是我在多个项目中总结的经验。
3.1 内存参数配置
麒麟V10 SP3系统上,MySQL内存配置需要根据服务器实际内存大小调整。对于8GB内存的服务器,建议配置:
[mysqld] innodb_buffer_pool_size=4G innodb_log_file_size=256M innodb_log_buffer_size=16M key_buffer_size=256M query_cache_size=0注意MySQL 8.0已经移除了query cache,所以不需要配置query_cache_size参数。innodb_buffer_pool_size一般设置为物理内存的50%-70%。
3.2 连接数设置
默认的连接数配置可能无法满足高并发需求:
-- 查看当前连接数设置 SHOW VARIABLES LIKE 'max_connections'; -- 建议设置 SET GLOBAL max_connections=500; SET GLOBAL thread_cache_size=50;同时建议配置连接超时时间,避免长时间空闲连接占用资源:
[mysqld] wait_timeout=300 interactive_timeout=3003.3 定期维护建议
生产环境MySQL需要定期维护,我通常设置以下定时任务:
# 每天凌晨备份数据库 0 2 * * * /usr/bin/mysqldump -uadmin -pYourPassword --all-databases | gzip > /backup/mysql_$(date +\%Y\%m\%d).sql.gz # 每周优化表 0 3 * * 0 mysqlcheck -uadmin -pYourPassword --optimize --all-databases4. 常见问题排查与解决
在实际部署过程中,可能会遇到各种问题。这里分享几个我遇到过的典型问题及解决方法。
4.1 安装依赖问题
在麒麟系统上安装时,可能会缺少依赖包。常见的解决方法:
# 安装所需依赖 sudo yum install libaio numactl # 如果遇到其他依赖问题,可以尝试 sudo yum provides */libssl.so.1.14.2 服务启动失败
如果MySQL服务启动失败,首先检查错误日志:
sudo tail -n 50 /var/log/mysqld.log常见问题包括:
- 数据目录权限不正确
- 配置文件语法错误
- 端口被占用
4.3 连接速度慢
如果发现连接MySQL速度很慢,可以尝试以下解决方案:
[mysqld] skip-name-resolve这个配置可以避免MySQL进行DNS反向解析,通常能显著提高连接速度。
