MySQL在5.7版本对于online ddl支持的并不是非常优化,比如说将大表int字段类型修改成bigint或者对大表进行字符编码的改造。对于业务来说都是需要停业去处理的,对于高速发展的互联网行业来说,时间就是金钱,所以合理的应用pt-osc工具可以让你的工作效率得到有效的提升
1.pt-osc介绍
1.1 pt-osc原理
- 如果存在外键,根据alter-foreign-keys-method参数的值,检测外键相关的表,做相应设置的处理。没有使用 --alter-foreign-keys-method 指定特定的值,该工具不予执行
- 创建一个新的表,表结构为修改后的数据表,用于从源数据表向新表中导入数据。
- 创建触发器,用于记录从拷贝数据开始之后,对源数据表继续进行数据修改的操作记录下来,用于数据拷贝结束后,执行这些操作,保证数据不会丢失。如果表中已经定义了触发器这个工具就不能工作了。
- 拷贝数据,从源数据表中拷贝数据到新表中。
- 修改外键相关的子表,根据修改后的数据,修改外键关联的子表。
- rename源数据表为old表,把新表rename为源表名,并将old表删除。
1.2 关键参数介绍
--user:
-u,连接的用户名
--password:
-p,连接的密码
--database:
-D,连接的数据库
--port
-P,连接数据库的端口
--host:
-h,连接的主机地址
--socket:
-S,连接的套接字文件
--ask-pass 隐式输入连接MySQL的密码
--charset 指定修改的字符集
--defaults-file
-F,读取