1. 组合使用参数:
当使用 pt-online-schema-change 时,以下参数组合可能是一个常见的选择:
pt-online-schema-change --user=USERNAME --password=PASSWORD --host=HOSTNAME D=DATABASE,t=TABLE --sock=/tmp/mysql.sock --alter 'YOUR_ALTER_STATEMENT' --charset=utf8 --alter-foreign-keys-method=auto --maxload='Threads_running=35,Threads_connected=10000' --critical-load='Threads_running=200,Threads_connected=10000' --no-check-replication-filters --recursion-method=none --print --execute
其中:
--no-check-replication-filters:此参数表示不考虑复制过滤规则。
--recursion-method=none:此参数指定不使用默认方法来发现从库,必须显式指定。
--max-load:默认 Threads_running=25。一旦超过此值,pt-online-schema-change 可能会暂缓任务执行。根据实际情况,可以调整此参数。
2. 无法生效的情况:
1、表没有任何唯一性索引。
2、表本身拥有触发器。
3、表本身拥有外键(尽量避免使用 pt-online-schema-change)。
4、捕捉到 warning 级别的 MySQL 错误,例如 1264 错误。
3. 风险情况:
1、在给表增加唯一性索引时,务必确保该列没有重复数据,否则可能会导致数据丢失。可以通过 count(distinct(column_name)) 的值来判断。
2、有几率触发死锁情况。
3、消费 binlog 可能有异常,务必及时通知消费端。
4、在高负载情况下,使用 pt-online-schema-change 应特别谨慎。
4. pt-online-schema-change 强制终止清理流程:
1、终止与 pt-online-schema-change 相关的进程。
2、删除触发器(如果存在)。如果遇到 MDL 锁,需要进行 MDL 锁定位(通常是由慢查询导致的)。
3、在确认触发器已被删除后,执行 drop _table_new 操作。
请注意,在使用 pt-online-schema-change 或进行任何数据库操作时,务必先备份数据,以防万一。
网友评论