首页 > 其他分享 >percona-toolkit系列工具(三)之pt-osc使用介绍

percona-toolkit系列工具(三)之pt-osc使用介绍

时间:2025-01-22 19:54:45浏览次数:1  
标签:pt -- chunk lag toolkit percona osc check

一、pt-osc介绍
mysql大表DDL一直是数据库运维当中的痛点,在实际运维过程中,我们一般有三种选择: 1、原生 online ddl 2、pt-online-schema-change工具 3、ghost工具 本文我们主要介绍pt-online-schema-change工具的使用

pt-online-schema-change 的工作原理是创建要更改的表的空副本,根据需要对其进行修改,然后将原始表中的数据复制到新表中。复制完成后,它会删除原始表并用新表替换它。
数据复制过程以chunk(小块数据)的形式执行。复制期间对原始表中的任何数据修改都将反映在新表中,因为该工具会在原始表上创建触发器来更新新表中的相应行。使用触发器意味着如果表上已经定义了任何触发器,则该工具将不起作用。
当该工具将数据复制到新表后,它会使用原子操作同时重命名原始表和新表,完成后,该工具会删除原始表。
使用该工具,表必须有主键或者唯一索引

安装过程请见我另一篇博客:https://www.cnblogs.com/sunjiwei/p/18584735

二、pt-osc的使用
2.1、参数介绍
Usage: pt-online-schema-change [OPTIONS] DSN


--alter                                # 模式变更,后面跟变更的sql,例如 --alter "add column comment varchar(50),ADD INDEX index_updated_time (updated_time)",多个变更使用逗号分隔;

--[no]analyze-before-swap              #  在ddl完成后,需要rename新旧表之前是否对新表进行analyze分析,默认yes

--ask-pass                             # 连接mysql时提示输入密码, 这样就不用在命令行上输入密码了,如果不加这个参数,就要用--password 这个参数在命令杭商输入密码,默认是no,不提示输入密码

--charset=s                            # 指定字符集

--[no]check-alter                      # 解析--alter指定内容并尝试警告可能出现的意外行为,默认是yes

--[no]check-plan                       # Check query execution plans for safety ( default yes)

--[no]check-replication-filters        # 该工具会查找过滤复制的服务器选项,例如 binlog_ignore_db 和 replicate_do_db。如果发现任何此类过滤器,则会中止并显示错误。默认yes

--check-slave-lag=s                    # Pause the data copy until this replica's lag is less than --max-lag,该选项已弃用,并在未来删除,用 --check-replica-lag 代替
--check-replica-lag                    # 代替上面这个参数,会定期检查所有已知从服务器的复制延迟情况。如果检测到任何从服务器的延迟超过了设定的阈值,则暂停数据迁移操作,直到延迟恢复到可接受范围内(--max-lag)

--max-lag                              # 该参数定义了允许的最大复制延迟秒数。当 --check-replica-lag 启用时,pt-osc 会在每次健康检查期间比较当前从服务器的延迟与 --max-lag 的值。如果任何一个从服务器的延迟超过了 --max-lag,则 pt-osc 将暂停其活动,等待延迟回到可接受范围内再继续。

--check-interval=m                     # 参数用于指定在检查复制延迟(--max-lag)等健康检查之间的间隔时间(以秒为单位)。这有助于控制工具在执行过程中对服务器资源的影响,确保不会因为频繁的健康检查而给系统带来过多负担。

--[no]check-unique-key-change          # 当启用了此选项时,pt-osc 会分析 ALTER TABLE 语句,检查是否涉及唯一键或者主键的添加、删除或修改。对于涉及唯一键变更的操作,pt-osc 会更加谨慎地处理,以避免因并发插入或更新而导致的数据冲突或重复记录问题。

--chunk-index=s                        # 默认使用主键或唯一索引来分块处理数据。然而,在某些情况下,表可能没有合适的主键或唯一索引,或者你希望使用其他索引来优化分块过程。这时可以使用 --chunk-index 参数来明确指定要使用的索引。

--chunk-index-columns=i                # 参数允许用户指定分块索引中的列,以便更精确地控制 pt-osc 如何分片和处理数据。这个参数与 --chunk-index 配合使用.虽然 --chunk-index 指定了要使用的索引,但有时你可能希望更具体地控制哪些列用于分片。--chunk-index-columns 让你可以明确指出这些列

--chunk-size=z                         # Number of rows to select for each chunk copied (default 1000),就是上面分的块,每块有多少行,一般生产变更实例支援充足可以给几千到几万不等

--chunk-size-limit=f                   # --chunk-size-limit 是 --chunk-size 的上限,确保分块不会过大。比如该参数设置为1,那就是最大的块大小就等于--chunk-size,如果该参数设置为2,那就是最大的块大小等于--chunk-size * 2

--database=s               -D          # Connect to this database

--dry-run                              # 创建并修改新表,但不创建触发器、复制数据或替换原始表,该参数允许你在不实际进行任何更改的情况下测试和验证 pt-osc 的操作
--execute                              # 真正执行操作,和--dry-run  互斥

--new-table-name=s                     # New table name before it is swapped.

--print                                # Print SQL statements to STDOUT

--progress=time,30                     # Print progress reports to STDERR while copying rows (default time,30)
--quiet                      -q        # Do not print messages to STDOUT (和--progress 互斥)

--skip-check-slave-lag=d               # DSN to skip when checking slave lag

--slave-password=s                     # Sets the password to be used to connect tothe slaves
--slave-user=s                         # Sets the user to be used to connect to the slaves

--sleep=f                              # How long to sleep (in seconds) after copying each chunk (default 0)

--statistics                           # Print statistics about internal counters,ddl结束后打印统计信息



例如:
pt-online-schema-change h=8.153.110.179,P=3306,u=root,p='111111',D=jiwei,t=union_new --alter 'add column name varchar(10)' --chunk-size=5000 --statistics --progress=time,3 --max-lag=60 --execute

如果不在乎延迟,则可以不加--max-lag=60 参数

标签:pt,--,chunk,lag,toolkit,percona,osc,check
From: https://www.cnblogs.com/sunjiwei/p/18684367

相关文章

  • 路径规划之启发式算法之二十七:果蝇优化算法(Fruit Fly Optimization Algorithm,FOA)
            果蝇优化算法(FruitFlyOptimizationAlgorithm,FOA)是一种基于果蝇觅食行为的仿生学原理而提出的新兴群体智能优化算法。是众多群体智能算法之一,可看我的文章:仿生的群体智能算法总结之二(十种)_群体仿生智能-CSDN博客仿生的群体智能算法总结之二(十种)_群体仿生智......
  • 【转】[JavaScript] import 和 export 的用法
    转自:kimi.ai在JavaScript中,import和export是ES6(ECMAScript2015)引入的模块化语法,用于在不同的文件或模块之间共享代码。它们使得代码更加模块化、可维护,并且可以避免全局变量的污染。以下是import和export的基本用法和一些常见场景。1. export 的用法export用于......
  • 手把手教会你Disruptor的常用使用场景!(含详细代码示例)
    Disruptor常见使用场景与代码示例1.引言上期介绍到Disruptor是一个高性能的无锁并发队列,适用于需要极低延迟和高吞吐量的应用场景。它通过环形缓冲区(RingBuffer)和高效的事件处理机制,显著减少了CPU缓存失效和上下文切换的开销。今天介绍Disruptor的几个常见使用场景:事件......
  • JavaScript 自定义获取当前日期和时间的函数
    JavaScript自定义获取当前日期和时间的函数 /***获取当前的日期和时间*格式为yyyy-MM-ddHH:mm:ss.SSS*/functiongetNowDateTime(){varnow=newDate,year=now.getFullYear(),month=now.getMonth()+1......
  • Exception Handling()异常处理
    python有许多内置异常。比如我们常见的TypeError,AttributeError,ValueError等等。实际上所有的异常都源自一个基类BaseException。注意并不是Exception类。我们一般在异常处理时捕获的称之为Concreteexceptions,用Exception可以捕获所有这些Concreteexceptions。各种异常......
  • JavaScript学习笔记(1)
    html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。一、引入方式1.内部脚本将JS代码定义在HTML页面中JavaScript代码必须位于<script></script>标签之间在H......
  • Mac OS中测试App出现libcrypto1.0.0.dylib 无法找到的错误 “Image Not Found“ “Cod
    最近在升级App时,本地测试没有问题,在其他机器上测试时,出现了,"libcrypto.1.0.0.dylib" ImageNotFound,"Librarymissing"的问题。XCode出现“ImageNotFound”的错误,可能有以下几个原因:1.libcrpto.1.0.0.dylib,文件没有copy到程序包里面。需要检查程序包里是否有改文件2......
  • 2025牛客寒假算法基础集训营1 ptlks的题解
    A.茕茕孑立之影题意:给定序列,找出一个数x,满足x和数组中任意一个元素都互不为倍数关系思路x范围为1e18以内,序列元素范围为1e9以内,选大于1e9的质数即可,特判序列中有1的情况。代码点击查看代码voidsolve(){ intn; cin>>n; intf=1; for(inti=1;i<=n;i++){ cin>>a[......
  • 高性能队列Disruptor的初体验
    初探Disruptor1.概述Disruptor是一个高性能、低延迟的无锁队列替代方案,最初由LMAX公司开发,专为处理高吞吐量和低延迟的消息传递系统而设计。它利用环形缓冲区(RingBuffer)和无锁的生产者-消费者模型,大幅提升并发性能。相比传统的基于java.util.concurrent的队列(如ArrayBl......
  • 2025 年 IPTV/APTV 直播源m3u(1月21日更新)
    前言注意:仅供学术学习研究使用。⚠️长期更新,建议收藏!更新日志源不在多,而在于精。0930将直播源做了较大更新,删除了大量不可用源地址。1月21日新增IPTV源:https://iptv.hacks.tools/1月21日新增直播源网站1月1日更新确认源可用性。1016新......