安装文档
sudo apt install percona-toolkit
参考:https://segmentfault.com/a/1190000014924677
--user= 连接mysql的用户名
--password= 连接mysql的密码
--host= 连接mysql的地址
P=3306 连接mysql的端口号
D= 连接mysql的库名
t= 连接mysql的表名
--alter 修改表结构的语句
--execute 执行修改表结构
--charset=utf8 使用utf8编码,避免中文乱码
--no-version-check 不检查版本,在阿里云服务器中一般加入此参数,否则会报错
注意:
{xxxxx}:表示参数。
D={mine},t={quick}逗号那儿不能添加空格,之前被坑了一次。
表添加字段
pt-online-schema-change --host=localhost --user=root --password=123456 --port=3306 --no-drop-old-table --execute --charset=utf8mb4 --no-version-check --alter "add column {coin} mediumint" D={mine},t={quick}
表字段去掉默认值
pt-online-schema-change --host=localhost --user=root --password=123456 --port=3306 --no-drop-old-table --execute --charset=utf8mb4 --no-version-check --alter "alter column {coin} drop default" D={mine},t={quick}
表字段添加默认值
pt-online-schema-change --host=localhost --user=root --password=123456 --port=3306 --no-drop-old-table --execute --charset=utf8mb4 --no-version-check --alter "alter column {coin} set default {0}" D={mine},t={quick}
表字段添加索引
pt-online-schema-change --host=localhost --user=root --password=123456 --port=3306 --no-drop-old-table --execute --charset=utf8mb4 --no-version-check --alter "ADD INDEX {idx_name} (`{column}`)" D={mine},t={quick}
表删除外键
注意:修改含有外键的表结构,需要加参数:
--alter-foreign-keys-method
如何把外键引用到新表?需要特殊处理带有外键约束的表,以保证它们可以应用到新表.当重命名表的时候,外键关系会带到重命名后的表上。
该工具有两种方法,可以自动找到子表,并修改约束关系。
auto: 在rebuild_constraints和drop_swap两种处理方式中选择一个。
rebuild_constraints:使用 ALTER TABLE语句先删除外键约束,然后再添加.如果子表很大的话,会导致长时间的阻塞。
drop_swap: 执行FOREIGN_KEY_CHECKS=0,禁止外键约束,删除原表,再重命名新表。这种方式很快,也不会产生阻塞,但是有风险:
在删除原表和重命名新表的短时间内,表是不存在的,程序会返回错误。
如果重命名表出现错误,也不能回滚了.因为原表已经被删除。
none: 类似"drop_swap"的处理方式,但是它不删除原表,并且外键关系会随着重命名转到老表上面。
删除外键:DROP FOREIGN KEY _{foreign_key},注意前面加个_
pt-online-schema-change \
--host={ip} \
--user={user} \
--password={password} \
--port=3306 \
--no-drop-old-table \
--execute \
--charset=utf8mb4 \
--no-version-check \
--alter-foreign-keys-method auto \
--alter "DROP FOREIGN KEY _{foreign_key}" \
D={database},t={table}
网友评论