细节
-
新功能
-
状态: Done">完成
-
媒介
-
解决方法: 固定
-
3.0.2
-
没有一个
-
没有一个
描述
目前pt-online-schema-change不能运行,如果表已经有AFTER触发器。但它可以,如果添加一个选项,指示工具执行以下操作(参见伪代码):
添加触发器的工作流程如下(根据我们自己使用基于触发器的工具的经验):
- 锁定问题表(标准mysql锁表写入)
- 取出现有的触发码,称之为第1块
- 将触发代码记录到临时文件中,以避免pt-osc故障时触发定义丢失
- 生成pt-osc的触发代码,称之为block 2
- 删除现有触发器
- 创建一个带有块1和块2的新触发器,将它们包装在/* block 1 START */ comments中,如果这样更容易解析的话
- 重复其他事件(覆盖所有的ins,upd,del)
- 打开表
要删除触发器,则相反: - 用写锁锁定表
- 拉出触发代码并解析出块1
- 放下扳机
- 仅使用块1中的代码创建触发器
- 重复其他事件
- 打开表
不要将此选项设为默认值,并添加如果工具或MySQL服务器在执行过程中被杀死,数据库可能处于不一致状态的警告。
启动:[https://bugs.launchpad.net/percona-雷竞技下载官网toolkit/ +错误/ 1491133
]
参数的接受标准:
场景——preserve-triggers特性需要删除旧的表和触发器,并重新创建它们为新表格由于不可能有重复的触发器名称,旧的表和触发器必须删除并重新创建。特性:——preserve和——no-drop-old-table params当指定——preserve-triggers参数时,并且指定——no-drop-old-table时,则以错误消息退出。特性:——preserve triggers和——no-swap-tables params当指定——preserve-triggers参数时,并且指定——no-swap-tables时,则以错误消息退出。当指定了——preserve-triggers参数并且指定了——no-drop-triggers时,则返回错误消息退出