在我职业生涯的早期阶段,我被周围的理论和概念迷住了外键以及他们如何授权我们来维护数据完整性。然而,在实际应用中,我发现他们是非常具有挑战性的管理。我相信你是一个冠军的DBA,但是我保持距离外键。
短篇故事作为背景,这篇文章旨在解决时出现的困境利用pt-online-schema-change工具包含外键的表。
我们已经知道的一个最Percona工具使用雷竞技下载官网pt-online-schema-change是和外键pt-online-schema-change如何处理。
当利用pt-online-schema-change工具来改变一个表,如重命名原始表被替换为一个新的,重要的是要考虑外键是如何影响的。工具提供了两个选项,rebuild_constraints drop_swap,确保外键继续变更过程中引用正确的表。这里涉及的主要步骤:
- 删除并重新添加外键约束(rebuild_constraints)
- 重命名当前表T1 T1_old(颗现在指向T1_old)
- 重命名新表变化,_T1_new T1 (T1表没有任何引用)
- 改变在子表调整外键指向T1而不是T1_old。
- 删除原表和重命名新表的原始(drop_swap)
- 禁用外键检查会话(FOREIGN_KEY_CHECKS = 0)
- 删除原表
- 重命名新表_T1_new T1
值得注意的是,当使用“drop_swap”选项时,这个过程的末尾,子表的外键指向表更新。然而,这种方法有一些风险由于以下事实:
- 在短时间内下降之间的原始表和临时表重命名表改变根本不存在。
- 在发生错误时重命名操作,回滚是不可能的,因为原来的表已经被删除。这可能导致数据丢失或其他意想不到的后果。
pt-online-schema-change工具还提供了第三种选择,”汽车。“当选择“自动”,该工具之间作出决定”rebuild_constraints”和“drop_swap”基于子表的大小参与变更的过程。这允许灵活地选择适当的选项根据特定场景和受影响的子表的大小。
在这里,pt-online-schema-change知道行复制操作所花费的时间从旧表的新表。它可以估计,如果子表内可以改变-chunk-time(被认为是快速)。如果子表改变迅速,pt-online-schema-change使用rebuild_constraints;否则,使用drop_swap方法。
错误是一个人,因此我可能是错的。幸运的是,Percona雷竞技下载官网工具都是开源的。我鼓励您审查源pt-online-schema-change git的。下面是代码块描述行为,然后调用determine_alter_fk_method“汽车”。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
|
# XXX Auto-choose alter颗方法之前交换/重命名表
#其他一切将打破,因为如果drop_swap选择,然后我们
#最不重命名表或删除旧表。
如果
(
美元
alter_fk_method
情商
“汽车”
)
{
#如果设置了大部分时间,然后使用平均利率的行/ s
#从复制源自表确定的最大大小
#子表,可以改变在一块的时间。
#的极限是蒙混因素。大部分时间不会设置
#指定的用户——在cmd行块大小= N,其中
#案例马克斯子表的大小是他们指定的块大小
#乘以蒙混因素。
我的
美元
max_rows
=
美元
o
- >
得到
(
“管制”
)
吗?
美元
o
- >
得到
(
的块大小
)
*
美元
限制
:
美元
chunk_time
& &
美元
avg
_率
吗?
美元
avg_rate
*
美元
chunk_time
*
美元
限制
:
美元
o
- >
得到
(
的块大小
)
*
美元
限制
;
PTDEBUG
& &
_d
(
的最大允许子表的大小:
,
美元
max_rows
)
;
美元
alter_fk_method
=
determine_alter_fk_method
(
child_tables
=
>
美元
child_tables
,
max_rows
=
>
美元
max_rows
,
Cxn
=
>
美元
cxn
,
OptionParser
=
>
美元
o
,
)
;
|
现在,这个工具将使用drop_swap大小或更大的子表数据的行数。
我要把一些重要的事情要你的注意力,这是重建大表的约束将会放缓,除非它是“在线完成的。“在线操作不会真的需要复制的数据,而且它将更快。
文档写着:
原地算法支持当foreign_key_checks是禁用的。否则,只支持复制算法。
这已经被识别和改善3.3.1 pt-online-schema-change版本,如前所述的bug报告https://jira.雷竞技下载官网percona.com/browse/pt - 1327
因此,在我看来,虽然使用pt-online-schema-change,它既安全、高效使用“rebuild_constraints”只要工具3.3.1或更高版本。避免使用“drop_swap”,当然更有意义使用“汽车。“不要”汽车“pt-online-schema-change具有外键的表;理解选项和掌控在你的手中。说,它很容易升级到最新版本雷竞技下载官网Percona工具包。






