Archery审核平台 osc、ghost配置

在这里插入图片描述

由 Percona、GitHub 公司开发的一种在线修改表结构的工具,它允许您在不中断应用程序正常运行的情况下修改表结构,同时保持数据一致性。可以对大型数据库表进行诸如添加、删除或修改索引、更改列类型等操作,而无需锁定整个表。这有助于减少应用程序的停机时间,提高数据库的可用性 。

gh-ost工作原理

  • 先连接到主库上,根据alter语句创建所需的新表;
  • 作为一个“备库”连接到其中一个真正的备库上,一边在主库上拷贝已有的数据到新表,一边从备库上拉取增量数据的binlog;
  • 然后不断的把 binlog 应用回主库;
  • cut-over是最后一步,锁住主库的源表,等待binlog 应用完毕,然后替换gh-ost表为源表。

pt-osc工作原理

  • 检查更改表是否有主键或唯一索引,是否有触发器 检查修改表的表结构,创建一个临时表,在新表上执行ALTER TABLE语句

  • 在源表上创建三个触发器分别对于INSERT UPDATE DELETE操作

  • 从源表拷贝数据到临时表,在拷贝过程中,对源表的更新操作会写入到新建表中 将临时表和源表rename(需要元数据修改锁,需要短时间锁表)

  • 删除源表和触发器,完成表结构的修改

pt-osc优缺点

  • 不可暂停
  • 交换表名的时候会有短时间的表不存在报错
  • 要在表上建触发器,是侵入式的,可能产生未知问题

gh-ost优缺点

  • 可暂停
  • 可动态修改参数
  • 对于DDL操作的灵活度掌控
  • gh-ost 已经与master 节点工作负载解耦
  • 更为稳健的切表控制:将-cut-over-lock-timeout-seconds和-default-retries
    配合使用,可以对切表进行灵活的控制。

pt-osc参数配置

[osc]
osc_print_none = false
osc_print_sql = false
osc_on = true
osc_min_table_size = 300
osc_alter_foreign_keys_method = "none"
osc_recursion_method = "processlist"
osc_max_lag = 600
osc_max_flow_ctl = -1
osc_sleep = 0.1
osc_lock_wait_timeout = 60
osc_check_alter = true
osc_check_replication_filters = true
osc_check_unique_key_change = true
osc_drop_old_table = true
osc_drop_new_table = true
osc_max_thread_running = 80
osc_max_thread_connected = 1000
osc_critical_thread_running = 80
osc_critical_thread_connected = 1000
osc_chunk_time = 1.0
osc_chunk_size_limit = 4
osc_chunk_size = 1000
osc_check_interval = 5
osc_bin_dir = "/usr/local/bin"

gh-ost参数配置

[ghost]

ghost_on = true
ghost_aliyun_rds = true
ghost_allow_on_master = true
ghost_assume_rbr = true
ghost_chunk_size = 10000
ghost_concurrent_rowcount = true
ghost_cut_over = "atomic"
ghost_cut_over_lock_timeout_seconds = 3
ghost_default_retries = 60
ghost_heartbeat_interval_millis = 500
ghost_max_lag_millis = 1500
ghost_approve_renamed_columns = true
ghost_exponential_backoff_max_interval = 64
ghost_dml_batch_size = 10
ghost_nice_ratio = 1.0

参数详解

#阿里云rds数据库标志
ghost_aliyun_rds false
#允许gh-ost直接运行在主库上。默认gh-ost连接的主库
ghost_allow_on_master true
#确认gh-ost连接的数据库实例的binlog_format=ROW的情况下,可以指定-assume-rbr,这样可以禁止从库上运行stop slave,start slave,执行gh-ost用户也不需要SUPER权限。为避免影响生产数据库,此参数建议置为true
ghost_assume_rbr true
#为gh-ost指定一个主库,格式为"ip:port"或者"hostname:port"。默认推荐gh-ost连接从库。
ghost_assume_master_host
#允许gh-ost运行在双主复制架构中,一般与-assume-master-host参数一起使用
ghost_allow_master_master false
#允许gh-ost在数据迁移(migrate)依赖的唯一键可以为NULL,默认为不允许为NULL的唯一键。如果数据迁移(migrate)依赖的唯一键允许NULL值,则可能造成数据不正确,请谨慎使用。
ghost_allow_nullable_unique_key false
#如果支持修改列名,则需设置此参数为true,否则gh-ost不会执行。
ghost_approve_renamed_columns true
#该参数如果为True(默认值),则进行row-copy之后,估算统计行数(使用explain select count(*)方式),并调整ETA时间,否则,gh-ost首先预估统计行数,然后开始row-copy。
ghost_concurrent_rowcount true
#当值为0时,当达到-critical-load,gh-ost立即退出。当值不为0时,当达到-critical-load,gh-ost会在-critical-load-interval-millis秒数后,再次进行检查,再次检查依旧达到-critical-load,gh-ost将会退出。
ghost_critical_load_interval_millis 0
#负载达到critical-load时,gh-ost在指定的时间内进入休眠状态。 它不会读/写任何来自任何服务器的任何内容。
ghost_critical_load_hibernate_seconds 0
#选择cut-over类型:atomic/two-step,atomic(默认)类型的cut-over是github的算法,two-step采用的是facebook-OSC的算法。
ghost_cut_over atomic
#在两次失败的切换尝试之间等待的时间间隔呈指数增长。等待间隔服从一个可配置的最大值(使用“指数退避最大间隔”)。
ghost_cut_over_exponential_backoff false
#在每次迭代中处理的行数量(允许范围:100-100000),默认值为1000。
ghost_chunk_size 1000
#gh-ost在cut-over阶段最大的锁等待时间,当锁超时时,gh-ost的cut-over将重试。(默认值:3)
ghost_cut_over_lock_timeout_seconds 3
#该参数针对一个有外键的表,在gh-ost创建ghost表时,并不会为ghost表创建外键。该参数很适合用于删除外键,除此之外,请谨慎使用。
ghost_discard_foreign_keys false
#各种操作在panick前重试次数。(默认为60)
ghost_default_retries 60
#在单个事务中应用DML事件的批量大小(范围1-100)(默认值为10)
ghost_dml_batch_size 10
#准确统计表行数(使用select count(*)的方式),得到更准确的预估时间。
ghost_exact_rowcount false
#使用指数退避执行各种操作时,尝试之间等待的最大秒数(默认值(64)
ghost_exponential_backoff_max_interval 64
#临时表上使用的表名前缀
ghost_force_table_names
#如果为true,则“unpostone | cut-over”交互命令必须命名迁移的表
ghost_force_named_cut_over false
#google云平台支持
ghost_gcp false
#gh-ost心跳频率值,默认为500ms。
ghost_heartbeat_interval_millis 500
#gh-ost操作之前,检查并删除已经存在的ghost表。该参数不建议使用,请手动处理原来存在的ghost表。
ghost_initially_drop_ghost_table false
#gh-ost操作之前,检查并删除已经存在的旧表。该参数不建议使用,请手动处理原来存在的ghost表。
ghost_initially_drop_old_table false
#gh-ost强制删除已经存在的socket文件。该参数不建议使用,可能会删除一个正在运行的gh-ost程序,导致DDL失败。
ghost_initially_drop_socket_file false
#主从复制最大延迟时间,当主从复制延迟时间超过该值后,gh-ost将采取节流(throttle)措施,默认值:1500ms。
ghost_max_lag_millis 1500
#每次chunk时间段的休眠时间,范围[0.0...100.0]。e.g:0:每个chunk时间段不休眠,即一个chunk接着一个chunk执行;1:每row-copy 1毫秒,则另外休眠1毫秒;0.7:每row-copy 10毫秒,则另外休眠7毫秒。
ghost_nice_ratio 0
#gh-ost开关
ghost_on true
#gh-ost操作结束后,删除旧表,默认状态是删除旧表。
ghost_ok_to_drop_table true
#当这个文件存在的时候,gh-ost的cut-over阶段将会被推迟,直到该文件被删除。
ghost_postpone_cut_over_flag_file
#跳过外键检查,默认为true
ghost_skip_foreign_key_checks true
#列出所有需要被检查主从复制延迟的从库
ghost_throttle_control_replicas
# --throttle http标志允许通过http进行限制。每100ms ghost向提供的URL发出一个HEAD请求。如果响应状态代码不是200,则在返回200响应状态代码之前,节流将启动
ghost_throttle_http
#在旧表名中使用时间戳。 这会使旧表名称具有唯一且无冲突的交叉迁移
ghost_timestamp_old_table false
#节流查询。每秒钟执行一次。当返回值=0时不需要节流,当返回值>0时,需要执行节流操作。该查询会在数据迁移(migrated)服务器上操作,所以请确保该查询是轻量级的。
ghost_throttle_query
#当该文件被创建后,gh-ost操作立即停止。该参数适合控制单个gh-ost操作。-throttle-additional-flag-file string适合控制多个gh-ost操作。
ghost_throttle_flag_file
#当该文件被创建后,gh-ost操作立即停止。该参数可以用在多个gh-ost同时操作的时候,创建一个文件,让所有的gh-ost操作停止,或者删除这个文件,让所有的gh-ost操作恢复。
ghost_throttle_additional_flag_file
#告诉gh-ost你正在运行的是一个tungsten-replication拓扑结构。
ghost_tungsten false
#检查主从复制延迟的SQL语句,默认gh-ost通过show slave status获取Seconds_behind_master作为主从延迟时间依据。如果使用pt-heartbeat工具,检查主从复制延迟的SQL语句类似于:SELECT ROUND(UNIX_TIMESTAMP() - MAX(UNIX_TIMESTAMP(ts))) AS delay FROM my_schema.heartbeat;
ghost_replication_lag_query
# 用来设置在arkit返回结果集中,对于原来OSC在执行过程的标准输出信息是不是要打印到结果集对应的错误信息列中,
# 如果设置为1,就不打印,如果设置为0,就打印。而如果出现了错误,则都会打印。默认值:OFF
osc_print_none = false
# 对应参数pt-online-schema-change中的参数--print。默认值:OFF
osc_print_sql = false
# 全局的OSC开关,默认是打开的,如果想要关闭则设置为OFF,这样就会直接修改。默认值:OFF
osc_on = false
# 这个参数实际上是一个OSC开关,如果设置为0,则全部ALTER语句都使用OSC方式,
# 如果设置为非0,则当这个表占用空间大小大于这个值时才使用OSC方式。
# 单位为M,这个表大小的计算方式是通过语句
# select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables
# where table_schema = 'dbname' and table_name = 'tablename' 来实现的。默认值:16
# [0-1048576]
osc_min_table_size = 16
# 对应参数pt-online-schema-change中的参数alter-foreign-keys-method,具体意义可以参考OSC官方手册。默认值:none
# [auto | none | rebuild_constraints | drop_swap]
osc_alter_foreign_keys_method = "none"
# 对应参数pt-online-schema-change中的参数recursion_method,具体意义可以参考OSC官方手册。默认值:processlist
# [processlist | hosts | none]
osc_recursion_method = "processlist"
# 对应参数pt-online-schema-change中的参数--max-lag。默认值:3
osc_max_lag = 3
# 类似--max-lag,检查集群暂停流量控制所花费的平均时间(仅适用于PXC 5.6及以上版本,会自动检测)
osc_max_flow_ctl = -1
# 对应参数pt-online-schema-change中的参数 --sleep 默认值:0.0
osc_sleep = 0.0
# 对应参数pt-online-schema-change中的参数 --set-vars lock_wait_timeout=?
osc_lock_wait_timeout = 60
# 对应参数pt-online-schema-change中的参数--[no]check-alter。默认值:ON
osc_check_alter = true
# 对应参数pt-online-schema-change中的参数--[no]check-replication-filters。默认值:ON
osc_check_replication_filters = true
# 对应参数pt-online-schema-change中的参数--[no]drop-old-table。默认值:ON
osc_drop_old_table = true
# 对应参数pt-online-schema-change中的参数--[no]drop-new-table。默认值:ON
osc_drop_new_table = true
# 对应参数pt-online-schema-change中的参数--max-load中的thread_running部分。默认值:80
osc_max_thread_running = 80
# 对应参数pt-online-schema-change中的参数--max-load中的thread_connected部分。默认值:1000
osc_max_thread_connected = 1000
# 对应参数pt-online-schema-change中的参数--critical-load中的thread_running部分。默认值:80
osc_critical_thread_running = 80
# 对应参数pt-online-schema-change中的参数--critical-load中的thread_connected部分。默认值:1000
osc_critical_thread_connected = 1000
# 对应参数pt-online-schema-change中的参数--chunk-time。默认值:1
osc_chunk_time = 1.0
# 对应参数pt-online-schema-change中的参数--chunk-size-limit。默认值:4
osc_chunk_size_limit = 4
# 对应参数pt-online-schema-change中的参数--chunk-size。默认值:1000
osc_chunk_size = 1000
# 对应参数pt-online-schema-change中的参数--check-interval,意义是Sleep time between checks for --max-lag。默认值:5
osc_check_interval = 5
osc_bin_dir = "/usr/local/bin"

数据库技术交流群:
在这里插入图片描述

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值