有效的升级 MySQL 库中所有表的字段属性

背景介绍 本文基于一个 discuz 论坛表的需求描述 — 将论坛中所有表为 mediumint(8) 的字段升级为 int(10), 以存储更大的用户 id 信息; 通过批量升级字段的方式也适用于其它相关的需求. 顺便吐槽下 discuz 这么多年以来对基础表的优化接近于无, 在用户较多或访问较频繁的场景下, 基础表的结构依然缺乏比较完善的设计. 步骤 考虑到论坛运行一段时间后, 一些表会比较大, 如果业务需要持续运行的话, 不太适合直接 alter table 的方式更新表, 下文会介绍使用 percona 的工具完成修改, 所以在整个流程中分为以下步骤操作:…

Continue reading

MySQl schema 表变更版本管理

https://github.com/nomad-software/snap https://github.com/arstercz/snap 注: 笔者新启 snap 分支项目后, 做了以下改动: 修复 cli 命令行需要返回 error 信息的错误; 增加 clear 选择删除指定库的版本控制信息; 更多信息参见 snap 链接 snap 用途概述 在开发过程中, 我们经常需要对核心的库表结构进行调整, 新建表, 增删字段等都需要记录以便和线上的环境区别开, 亦可以和相关的代码对应起来方便功能的追溯. 在交叉开发的环境中, 多名开发者共同更新一个表的情况很容易引起开发和部署的混乱, 可以通过版本管理的方式避免此类问题. 1. 适用范围…

Continue reading