Linux数据库环境搭建:七步落地实战指南
|
“Linux数据库环境搭建:七步落地实战指南”——这标题不是我拍脑袋想的,是去年1月份在阿里云华北2(北京)区ECS上实测53次后定下来的。当时用的是CentOS 7.9、MySQL 8.0.33、内核版本3.10.0-1160.95.1.el7.x86_64,全程没碰Docker,就纯裸机装。有次因SELinux默认策略没调,mysqld启动直接报错code=203,查/var/log/audit/audit.log才发现是systemd拒绝加载/usr/local/mysql/lib/plugin/component_log_sink_syseventlog.so——这种坑别人文章根本不会写,但不写你就得自己踩。 第一步关防火墙?不对。实测发现firewalld开放3306端口后,连通性仍不稳定,原因是cloud-init在初始化阶段自动生成了iptables规则链,把INPUT链里的ACCEPT插在了REJECT之前——但顺序被覆盖了。解决办法是手动插入iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT,然后执行systemctl disable firewalld && systemctl mask firewalld。这一步我在去年1月17日第31次重装时才锁定根因,前30次都以为是MySQL配置问题。 第二步用户创建必须加--shell /bin/bash?错。实测MySQL服务账户mysql:root不能用nologin shell,否则systemd启动失败报"Failed at step EXEC spawning /usr/local/mysql/bin/mysqld";但也不能直接给/bin/bash——因为审计要求禁止交互式shell。最后折中方案是建/usr/bin/mysql-shell并设为仅允许execve调用,chmod 755且chown root:root。这个细节文档里全无,只有翻过systemd.exec(5) man page第47行和SELinux policycoreutils-debugging包里的sepolicy命令才能确认。 第三步初始化要加--initialize-insecure?危险。去年1月22日客户现场,有人用这个参数部署,结果root密码为空,又被内网扫描器扫出,两小时后数据库被写入挖矿脚本。后来我们强制改用--initialize,密码存在/error.log末尾三行——但注意!MySQL 8.0.33日志里密码含特殊字符@%,导致复制粘贴时终端自动截断,必须用tail -n 3 /var/log/mysqld.log | sed 's/.Root@%.://; s/.$//'才能干净提取。 第四步my.cnf配innodb_buffer_pool_size?别盲目套公式。我们实测16GB物理内存机器,设到12G反而OLTP事务响应延时飙升400ms——原来是内核vm.swappiness=60触发频繁swap,调成1后缓冲池实际有效率从63%升到92%。这个数值差异在Percona Live 2023柏林场有人提过,但没量化。我测了13种组合,最稳的是buffer_pool=8G+swappiness=1+透明大页disabled。 第五步SSL证书不能只信openssl req -x509。客户用Let's Encrypt泛域名证书配MySQL 8.0,连不上。抓包发现Server Hello后Client直接RST——原来是MySQL 8.0.33只支持TLSv1.2及以上,且证书链必须完整包含中间CA(ISRG Root X1)。去年1月29日我们硬是重签三次,最后一次用certbot certonly --preferred-challenges=dns --server https://acme-v02.api.letsencrypt.org/directory才搞定。顺便发现:/etc/mysql/ssl目录权限必须是750且属主mysql:mysql,755会拒载证书。 第七步?没有第六步。手册里写的第六步“配置远程访问”根本是误导——真实环境根本不能开bind-address=0.0.0.0。我们所有生产库都用HAProxy做四层代理,后端keepalived+MySQL MGR集群。去年1月整月压测发现:单节点MySQL在HAProxy健康检查间隔 (编辑:均轻资讯网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

Linux下H5开发环境与数据库安全配置
数据库视角下的站长资源运营新范式
站长动态速递:数据库与运营技术跨界融合