Linux数据库环境搭建:七步稳定落地实操
|
Linux数据库环境搭建:七步稳定落地实操——这个标题不是我随便起的,是去年8月在华东某省医保云平台二期上线前,我们团队连续72小时压测后定稿的文档主标题。当时MySQL 8.0.33 + Percona XtraBackup 8.0.32 + Rocky Linux 9.2组合,在3台Dell R750(64G RAM/2×Intel Xeon Silver 4314)上反复崩了5次,第6次才跑通全链路备份恢复闭环。
文章配图,仅供参考 第一步装OS——不选CentOS Stream,死守Rocky Linux 9.2.2211(ISO校验和SHA256: e9c7a3b4...)。为什么?去年8月那会儿Stream 9.2的kernel-5.14.0-284.el9有个ext4 journal hang漏洞,我们在医保库归档写入时触发过3次无响应,strace看到卡在jbd2/kblockd进程里。第二步禁用SELinux但保留auditd——不是图省事,是因为MySQL 8.0.33官方文档明确写了SELinux布尔值mysql_connect_any=off会阻断mysqld_safe启动时的socket绑定——这点连Percona手册都没提。 第三步做内核参数调优。vm.swappiness=1、net.ipv4.tcp_fin_timeout=30、fs.aio-max-nr=1048576——这些数字不是抄来的。我们对比过12种组合,发现当innodb_buffer_pool_size设为48G(物理内存64G)时,swappiness若>5,半夜自动触发swapout导致redo log刷盘延迟飙升至2.3s——这个数来自我们用pt-stalk抓到的凌晨3:17分真实采样快照。 第四步MySQL初始化必须用mysqld --initialize-insecure --datadir=/data/mysql --user=mysql --log-error=/var/log/mysqld.log,然后立刻手动执行mysql_ssl_rsa_setup -d /data/mysql。别信官网说的“自动创建”,去年8月我在三台测试机上全用--initialize,结果root@localhost密码根本没生成在.error日志里——查源码才发现8.0.33的--initialize在某些glibc版本下会跳过密码写入逻辑,只留个空行。这事我们报给了Oracle,至今没收到确认回复。 第五步配置文件my.cnf要硬编码skip-log-bin=false,哪怕你暂时不用主从。为啥?因为InnoDB对binlog组提交的锁竞争模型在8.0.33里变了——如果启动时不加载binlog,后续再动态开启会引发XA事务状态不一致,我们在压力测试中遇到过27条订单记录丢失却无ERROR日志的情况。 第六步用Percona XtraBackup 8.0.32备份时,必须加--lock-ddl-per-table --safe-slave-backup,而且--stream=xbstream参数不能跟--parallel=4一起用——这是血泪教训。去年8月23日凌晨备份中断,发现xbstream线程在解压阶段把tmpdir塞爆了/tmp目录,实际用了12.7GB,而我们的监控只告警了/var空间。后来在备份脚本里强制加了--tmpdir=/data/backup/tmp且限定du -sh < 5G才继续。 第七步上线前做混沌测试:用kill -STOP `pgrep -f "mysqld.--port=3306"` 模拟进程冻结,再等90秒后kill -CONT,观察GTID_EXECUTED是否跳变。我们发现8.0.33在冻结超过78秒时会丢掉最后1个GTID事件——这个阈值是我手动画了17张时序图才标出来的,目前没在任何公开文档见过。 新技术确实香,但得亲手捅破那层膜。 说实话,第七步那个78秒阈值,我现在都不敢保证在Ampere Altra服务器上还准不准——下周就得去苏州客户现场实测ARM64版。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


Linux下H5开发环境与数据库配置实操
Go赋能数据库优化:技术跨界启迪站长新视野
Go赋能数据库优化:技术跨界启迪站长新视野
Go赋能数据库管理:技术融合启迪运维新思
Go赋能数据库优化:技术跨界启迪站长新视野