线上order表的数据已经将近千万,需要启动一个废弃的字段,更新字段长度,并且加索引:
更新字段类型:
pt-online-schema-change --charset=utf8 --no-check-replication-filters --no-version-check --user=user --password=pass --host=host_addr P=3306,D=shop,t=order --alter "MODIFY COLUMN parent_id int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '上级id' AFTER is_separate" --execute
添加索引:
pt-online-schema-change --charset=utf8 --no-check-replication-filters --no-version-check --user=user --password=pass --host=host_addr P=3306,D=shop,t=order --alter "add INDEX parent_id(parent_id)" --execute
关于online-schema-change
是percona推出的一个针对mysql在线ddl的工具
percona是一个mysql分支维护公司,专门提供mysql技术服务的。我的理解,类似于linux的分支redhat公司
官网下载地址为:http://www.percona.com/redir/downloads/percona-toolkit/2.2.1/percona-toolkit-2.2.1.tar.gz
原理上:
在进行表结构的修改的时候,会先建立一个临时的表,然后进行原表的数据拷贝与结构修改,与此同时会在原表上建立触发器(update,insert,delete),把数据同步到临时表上,当临时表修改完毕后,最后进行一下表明的更改,所以理论上锁表的时间会很短。
注:表一定要有主键