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`
##=================== ====================================
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='xxx.xxx.xxx.xxx' \--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中文網其他相關文章!

作为一名Java开发者,学习和使用Spring框架已经是一项必不可少的技能。而随着云计算和微服务的盛行,学习和使用SpringCloud成为了另一个必须要掌握的技能。SpringCloud是一个基于SpringBoot的用于快速构建分布式系统的开发工具集。它为开发者提供了一系列的组件,包括服务注册与发现、配置中心、负载均衡和断路器等,使得开发者在构建微

如何通过编写代码来学习PHP8中的文件操作技巧PHP是一种广泛应用于Web开发的脚本语言,能够方便地对文件进行操作,如读写文件、创建目录等。掌握PHP的文件操作技巧对于开发人员来说是非常重要的。本文将介绍如何通过编写代码来学习PHP8中的文件操作技巧。第一步:搭建PHP开发环境在学习PHP的文件操作技巧之前,我们首先需要搭建一个P

从零开始学习Django框架:实用教程和示例Django是一种流行的PythonWeb应用程序框架,它简化了网站的开发过程。它提供了一套强大的工具和库,帮助开发者构建高效、可扩展和安全的Web应用程序。对于初学者来说,学习Django可能会有些困难,但是通过一些实用的教程和示例,你可以快速上手并了解这个框架的核心概念和用法。本文将带你逐步学习Django框

win7系统自带有备份还原系统的功能,如果之前有给win7系统备份的话,当电脑出现系统故障的时候,我们可以尝试通过win7还原系统修复。那么win7怎么还原系统呢?下面小编就教下大家如何还原win7系统。具体的步骤如下:1、开机在进入Windows系统启动画面之前按下F8键,然后出现系统启动菜单,选择安全模式登陆即可进入。2、进入安全模式之后,点击“开始”→“所有程序”→“附件”→“系统工具”→“系统还原”。3、最后只要选择最近手动设置过的还原点以及其他自动的还原点都可以,但是最好下一步之前点击

随着Web应用程序的需求越来越高,PHP技术在开发领域中变得越来越重要。在PHP开发方面,测试是一个必要的步骤,它可以帮助开发者确保他们创建的代码在各种情况下都可靠和实用。在PHP中,一个流行的测试框架是PHPUnit。PHPUnit是一个基于Junit的测试框架,其目的是创建高质量、可维护和可重复的代码。下面是一些学习使用PHPUnit框架的基础知识和步骤

香港中文大学(深圳)吴保元教授课题组和浙江大学秦湛教授课题组联合发表了一篇后门防御领域的文章,已顺利被ICLR2022接收。近年来,后门问题受到人们的广泛关注。随着后门攻击的不断提出,提出针对一般化后门攻击的防御方法变得愈加困难。该论文提出了一个基于分割后门训练过程的后门防御方法。本文揭示了后门攻击就是一个将后门投影到特征空间的端到端监督训练方法。在此基础上,本文分割训练过程来避免后门攻击。该方法与其他后门防御方法进行了对比实验,证明了该方法的有效性。收录会议:ICLR2022文章链接:http

这个问题涉及到许多实际上并不了解核心技术并希望在SeleniumAutomation领域发展职业生涯的专业人士。编码这个术语让非程序员有点害怕,甚至不敢从自动化之类的东西开始。人们认为非程序员无法在自动化方面表现出色,但这只是在头脑中。许多值得和有能力的手动测试人员回避Selenium,只是认为它需要一些特殊技能。Selenium脚本是用多种语言设计的,例如Python、Ruby、C#、JavaScript和Java就是其中之一他们当中就有这样的人。了解了Java的受欢迎程度和未来前景,现在更倾

Laravel是一个基于PHP的开源Web应用程序框架,是当今最受欢迎的框架之一。它的设计思想是以简单、优雅的方式解决复杂的问题,为开发Web应用程序提供了丰富的工具和资源。如果你想在PHP中学习Laravel框架,下面是几个关键步骤:第一步:安装和配置Laravel在开始使用Laravel之前,您需要安装PHP和Composer。Composer是一个PH


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境