首页 数据库 mysql教程 MySQL--pt-osc的介绍与使用

MySQL--pt-osc的介绍与使用

Jul 27, 2017 am 09:21 AM
学习 工具

pt-osc之工作流程:
1、检查更改表是否有主键或唯一索引,是否有触发器
2、检查修改表的表结构,创建一个临时表,在新表上执行ALTER TABLE语句
3、在源表上创建三个触发器分别对于INSERT UPDATE DELETE操作
4、从源表拷贝数据到临时表,在拷贝过程中,对源表的更新操作会写入到新建表中
5、将临时表和源表rename(需要元数据修改锁,需要短时间锁表)
6、删除源表和触发器,完成表结构的修改。

##=====================================================##
pt-osc之工具限制
1、源表必须有主键或唯一索引,如果没有工具将停止工作
2、如果线上的复制环境过滤器操作过于复杂,工具将无法工作
3、如果开启复制延迟检查,但主从延迟时,工具将暂停数据拷贝工作
4、如果开启主服务器负载检查,但主服务器负载较高时,工具将暂停操作
5、但表使用外键时,如果未使用--alter-foreign-keys-method参数,工具将无法执行
6、只支持Innodb存储引擎表,且要求服务器上有该表1倍以上的空闲空间。

##=====================================================##
pt-osc之拷贝数据
在拷贝数据过程中,工具会把数据按照主键或唯一键进行拆分,限制每次拷贝数据的行数以保证拷贝进行不过多消耗服务器资源。为保证源表和目标表数据相同,采用LOCK IN SHARE MODE来获取要拷贝数据段的最新数据并对数据加共享锁组织其他回话修改数据,采用LOW_PRIORITY IGNORE来将数据插入到新表中, 关键字LOW_PRIORIT使得插入操作会等待其他访问该表的操作完成会再执行,关键字INGORE使得表中出现主键或唯一索引键重复时新数据被忽略而不会被插入。

对表`testdb1`.`tb1001`进行修改时的数据拷贝脚本:

## 先获取下一次拷贝数据的边界,强制索引可以有效避免执行计划出现问题
SELECT /*!40001 SQL_NO_CACHE */ `id` FROM `testdb1`.`tb1001` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '8394306')) ORDER BY `id` LIMIT 22256, 2 /*next chunk boundary*/

## 通过拷贝数据的边界限制,防止单次拷贝过多数据而长时间阻塞其他回话
INSERT LOW_PRIORITY IGNORE INTO `testdb1`.`_tb1001_new` (`id`, `c1`, `c6`) SELECT `id`, `c1`, `c6` FROM `testdb1`.`tb1001` FORCE INDEX(`PRIMARY`) WHERE ((`id` >= '8394306')) AND ((`id` <= '8416562')) LOCK IN SHARE MODE /*pt-online-schema-change 14648 copy nibble*/


##=====================================================##
pt-osc之触发器

pt-osc工具在源表上创建三个AFTER触发器分别对于INSERT UPDATE DELETE操作,DELETE触发器使用DELETE IGNORE来保证源表和新表的数据都被删除, 而INSERT和UPDATE触发器使用REPLACE INTO来保证新表数据和源表数据一致。

由于MySQL限制相同类型的触发器只能有一个,因此需要在运行前检查源表上是否有触发器,为保证删除和更新效率和方便和将源表数据进行分片处理,因此要求表上有主键或唯一索引。

##=====================================================##
pt-osc之主机性能影响

为避免过度影响主机性能,pt-osc工具通过以下几个方面来限制:
1、通过参数chunk-size和chunk-time控制每次拷贝数据大小
2、通过参数max-load来检查主机当前压力,每次chunk拷贝完成后,都会运行SHOW GLOBAL STATUS LIKE 'Threads_running' 命令检查当前正在运行的Threads数量,默认Threads_running=25,如果未指定最大值,则会取当前值的120%作为最大值,如果超过阀值则会暂停数据拷贝

##=====================================================##
pt-osc之从库复制延迟

对于复制延迟比较敏感的业务,可以通过下面参数来控制复制延迟:

--max-log
默认为1s,每个chunks拷贝完成后,会查看check-slave-lag参数所指定的从库的延迟信息,如果超过max-log的阀值,则暂停复制数据,直到复制延迟小于max-log的阀值。检查复制延迟信息依赖于SHOW SLAVE STATUS语句中返回的Seconds_Behind_Master列的值。

--check-interval
当出现复制延迟暂停复制数据后,按照check-interval指定的时间进行周期检查复制延迟,直到延迟时间低于max-log阀值,然后恢复数据拷贝

--check-slave-lag
需要检查复制延迟的从库IP
如果指定check-slave-lag参数,且从库无法正常连接或从库IO线程和SQL线程停止,会认为主从存在延迟,导致复制数据操作一直暂停。
如果未指定check-slave-lag参数,默认还是会检查从库的延迟,但复制延迟不会导致数据复制暂停。

##=====================================================##
pt-osc之chunk设置
在pt-osc的帮助文档中,关于chunk的参数有如下:

--chunk-index=s                  Prefer this index for chunking tables
--chunk-index-columns=i          Use only this many left-most columns of a --chunk-index
--chunk-size=z                   Number of rows to select for each chunk copied (default 1000)
--chunk-size-limit=f             Do not copy chunks this much larger than the desired chunk size (default 4.0)
--chunk-time=f                   Adjust the chunk size dynamically so each data-copy query takes this long to execute (default 0.5)
登录后复制

当chunk-size和chunk-time两者都未指定时,chunk-size默认值为1000,chunk-time默认值为0.5S,第一次按照chunk-size来进行数据复制,然后根据第一次复制的时间动态调整chumk-size的大小,以适应服务器的性能变化,如上一次复制1000行消耗0.1S,则下次动态调整chumk-size为5000。
如果明确指定chumk-size的值或将chunk-time指定为0,则每次都按照chunk-size复制数据。

##=====================================================##
pt-osc之alter语句限制
1、不需要包含alter table关键字,可以包含多个修改操作,使用逗号分开,如"drop clolumn c1, add column c2 int"
2、不支持rename语句来对表进行重命名操作
3、不支持对索引进行重命名操作
4、如果删除外键,需要对外键名加下划线,如删除外键fk_uid, 修改语句为"DROP FOREIGN KEY _fk_uid"
##=====================================================##
pt-osc之命令模板
## --execute表示执行
## --dry-run表示只进行模拟测试
## 表名只能使用参数t来设置,没有长参数

pt-online-schema-change \--host="127.0.0.1" \--port=3358 \--user="root" \--password="root@root" \--charset="utf8" \--max-lag=10 \--check-salve-lag=&#39;xxx.xxx.xxx.xxx&#39; \--recursion-method="hosts" \--check-interval=2 \--database="testdb1" \t="tb001" \--alter="add column c4 int" \--execute
登录后复制

pt-osc之命令输出
上面命令执行输出如下:

No slaves found.  See --recursion-method if host 171DB166 has slaves.
Will check slave lag on:
  170DB166
Operation, tries, wait:
  copy_rows, 10, 0.25
  create_triggers, 10, 1
  drop_triggers, 10, 1
  swap_tables, 10, 1
  update_foreign_keys, 10, 1
Altering `testdb1`.`tb001`...
Creating new table...
Created new table testdb1._tb001_new OK.
Altering new table...
Altered `testdb1`.`_tb001_new` OK.
2016-04-28T23:18:04 Creating triggers...
2016-04-28T23:18:04 Created triggers OK.
2016-04-28T23:18:04 Copying approximately 1 rows...
2016-04-28T23:18:04 Copied rows OK.
2016-04-28T23:18:04 Swapping tables...
2016-04-28T23:18:04 Swapped original and new tables OK.
2016-04-28T23:18:04 Dropping old table...
2016-04-28T23:18:04 Dropped old table `testdb1`.`_tb001_old` OK.
2016-04-28T23:18:04 Dropping triggers...
2016-04-28T23:18:04 Dropped triggers OK.
Successfully altered `testdb1`.`tb001`.
登录后复制

以上是MySQL--pt-osc的介绍与使用的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1248
24
数字货币app是啥软件?全球数字货币十大app盘点 数字货币app是啥软件?全球数字货币十大app盘点 Apr 30, 2025 pm 07:06 PM

随着数字货币的普及和发展,越来越多的人开始关注和使用数字货币app。这些应用程序为用户提供了便捷的管理和交易数字资产的方式。那么,数字货币app到底是什么软件呢?让我们深入了解,并盘点全球十大数字货币app。

量化交易所排行榜2025 数字货币量化交易APP前十名推荐 量化交易所排行榜2025 数字货币量化交易APP前十名推荐 Apr 30, 2025 pm 07:24 PM

交易所内置量化工具包括:1. Binance(币安):提供Binance Futures量化模块,低手续费,支持AI辅助交易。2. OKX(欧易):支持多账户管理和智能订单路由,提供机构级风控。独立量化策略平台有:3. 3Commas:拖拽式策略生成器,适用于多平台对冲套利。4. Quadency:专业级算法策略库,支持自定义风险阈值。5. Pionex:内置16 预设策略,低交易手续费。垂直领域工具包括:6. Cryptohopper:云端量化平台,支持150 技术指标。7. Bitsgap:

数字货币app是正规的吗?全球正规合法虚拟币交易app前十 数字货币app是正规的吗?全球正规合法虚拟币交易app前十 Apr 30, 2025 pm 07:09 PM

推荐的加密货币交易平台包括:1. Binance:全球最大交易量,支持1400 币种,FCA、MAS认证。2. OKX:技术实力强,支持400 币种,香港证监会批准。3. Coinbase:美国最大合规平台,适合新手,SEC和FinCEN监管。4. Kraken:欧洲老牌,ISO 27001认证,持美国MSB及英国FCA牌照。5. Gate.io:币种最全(800 ),低交易费,获多国牌照。6. Huobi Global:老牌平台,提供多种服务,持日本FSA及香港TCSP牌照。7. KuCoin

数字货币app有前途吗 苹果手机数字货币交易平台app下载TOP10 数字货币app有前途吗 苹果手机数字货币交易平台app下载TOP10 Apr 30, 2025 pm 07:00 PM

数字货币App的前景广阔,具体体现在:1. 技术创新驱动功能升级,通过DeFi与NFT融合及AI与大数据应用提升用户体验;2. 监管合规化趋势,全球框架完善及AML、KYC要求趋严;3. 功能多元化与服务拓展,整合借贷、理财等服务并优化用户体验;4. 用户基数与全球化扩张,预计2025年用户规模突破10亿。

火币之前的火信和OKX现在的pay有什么核心区别? 火币之前的火信和OKX现在的pay有什么核心区别? Apr 30, 2025 pm 06:33 PM

火信和OKX Pay都不直接支持法币支付。火信主要用于数字资产管理和交易,用户需通过火币交易所兑换法币;OKX Pay专注于数字资产支付和转账,用户需通过OKX平台兑换法币。

2025年十大正规虚拟币交易所app排名(数字货币交易平台app榜单) 2025年十大正规虚拟币交易所app排名(数字货币交易平台app榜单) Apr 30, 2025 pm 05:39 PM

2025年十大正规虚拟币交易所app排名:1. OKX,2. Binance,3. 火币,4. Coinbase,5. Kraken,6. Bitfinex,7. KuCoin,8. Gemini,9. Bitstamp,10. Poloniex,各自在安全性、用户体验、交易手续费、流动性、币种丰富度、专业工具、合规性、隐私保护、杠杆交易、国际化程度、客户服务等方面表现突出。

香港数字货币交易所app如何下载 十大数字货币交易所APP盘点 香港数字货币交易所app如何下载 十大数字货币交易所APP盘点 Apr 30, 2025 pm 07:12 PM

下载香港数字货币交易所APP的方法包括:1. 选择合规平台,如OSL、HashKey或Binance HK等;2. 通过官方渠道下载,iOS用户在App Store下载,Android用户通过Google Play或官网下载;3. 注册并验证身份,使用香港手机号或邮箱,上传身份和地址证明;4. 设置安全措施,启用双重身份验证并定期检查账户活动。

币圈中的三巨头是哪些?虚拟币主流交易所APP前十名推荐 币圈中的三巨头是哪些?虚拟币主流交易所APP前十名推荐 Apr 30, 2025 pm 06:27 PM

在币圈中,所谓的三巨头通常指的是三种最具影响力和广泛使用的加密货币。这些加密货币在市场上占据了重要的地位,并在交易量和市值方面都表现出色。同时,虚拟币主流交易所APP也是投资者和交易者进行加密货币交易的重要工具。本文将详细介绍币圈中的三巨头以及推荐前十名的虚拟币主流交易所APP。

See all articles