数据库操作的特殊风险
写操作先用 SELECT 预演
SELECT * FROM users WHERE status = 'inactive';
START TRANSACTION;
UPDATE users SET status = 'disabled' WHERE status = 'inactive';
SELECT ROW_COUNT();
-- 确认后 COMMIT,否则 ROLLBACK
即使有事务,也要检查 WHERE、影响行数、锁范围和执行时间。DDL 是否可回滚取决于数据库和具体操作,不能照搬 DML 经验。
不要手动处理数据库内部文件
不要直接移动、编辑或删除 MySQL 数据目录、redo/binlog 或 Redis 持久化文件。应使用数据库支持的备份、复制和迁移工具。
重启与升级
- 高峰期重启会中断连接并造成连接风暴。
- MySQL 升级可能改变系统表、磁盘格式或默认参数。
- Redis 重启后的数据取决于 RDB/AOF 配置及最近持久化状态。
- Node.js 每个 PM2 实例都有连接池,总连接数要乘实例数。
操作前检查备份、复制延迟、磁盘、锁、长事务、连接数和回滚。升级应先阅读官方升级路径并在副本或测试数据上演练。
Schema 兼容
推荐“扩展—迁移—收缩”:先增加兼容字段/表,部署同时兼容新旧结构的代码,回填和验证,再在后续版本删除旧结构。避免一个发布同时删除旧字段并要求所有实例瞬间切换。