Sep
22
MySQL Alter Table锁表相关的....提纲?
(瞅一眼才发现四个月没写了,确实是好久没写代码了,没啥心得,不过想想好像可以写个提纲凑个数)
我们的业务主要还是用 MySQL 存储业务数据。
MySQL 一个很麻烦的问题是,alter table 的时候往往要锁表,而业务在最初设计的时候,又没法为未来的所有改动预留合适的字段,结果就是,要么另外建一张表横向扩展,要么熬到半夜,忍受锁表带来的业务中断;不过在多次实践中还是有一些心得体会,可以简单列一下。
1. alter table 是否都会锁表?
不都会,有些情况可以不锁表,例如,修改默认值,或者对 enum 类型字段增加一个 value
2. 对 enum 类型字段加 value 就不会锁表吗?
不一定,如果新增的 value 是最后一个就不会锁表,但也要注意,还是有坑(不能超过当前的bit数能表示的最大值)(为什么?)
3. 有没办法即 alter table 但又不长时间锁表?
有,percona-toolkit 有个工具能做到,原理很简单,新建一个表A的副本A',在A'上加字段,并同步数据,最后用一个 alter 语句对换两张表,但据说有BUG
4. 安利一下与 MySQL 协议基本兼容的 TiDB ,可以直接在线不锁表 alter table
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
我们的业务主要还是用 MySQL 存储业务数据。
MySQL 一个很麻烦的问题是,alter table 的时候往往要锁表,而业务在最初设计的时候,又没法为未来的所有改动预留合适的字段,结果就是,要么另外建一张表横向扩展,要么熬到半夜,忍受锁表带来的业务中断;不过在多次实践中还是有一些心得体会,可以简单列一下。
1. alter table 是否都会锁表?
不都会,有些情况可以不锁表,例如,修改默认值,或者对 enum 类型字段增加一个 value
2. 对 enum 类型字段加 value 就不会锁表吗?
不一定,如果新增的 value 是最后一个就不会锁表,但也要注意,还是有坑(不能超过当前的bit数能表示的最大值)(为什么?)
3. 有没办法即 alter table 但又不长时间锁表?
有,percona-toolkit 有个工具能做到,原理很简单,新建一个表A的副本A',在A'上加字段,并同步数据,最后用一个 alter 语句对换两张表,但据说有BUG
4. 安利一下与 MySQL 协议基本兼容的 TiDB ,可以直接在线不锁表 alter table
欢迎扫码关注:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。