pt-online-schema-change和XtraBackup的
一.直接執行 alter table XXX ……
1.按照原始表(original_table)的表結構和DDL語句,新建一張不可見的臨時表。
2.在原表上加write lock,此時對原表的所有U D I DDL 都是阻塞的。
3.執行insert into tmp_table select * from oldtable;
4.rename oldtable 和 tmp_table,再drop oldtable。
5.釋放 write lock。
二.pt-online-schema-change
1.如果存在外來鍵,根據alter-foreign-keys-method引數的值,檢測外來鍵相關的表,做相應設定的處理。
2.建立一個和你要執行 alter 操作的表一樣的新的空表結構(是alter之前的結構)。
3.在新表執行alter table 語句,
4.在原表中建立觸發器(3個)三個觸發器分別對應insert,update,delete操作
5.從原表複製資料到臨時表,複製過程中透過原表上的觸發器在原表進行的寫操作都會更新到新建的臨時表。
6.Rename 原表到old表中,在把臨時表Rename為原表,預設最後將原表刪除,將原表上所建立的觸發器刪除。
限制:
1.該工具所適用的表必須是單一列的主鍵或者單一唯一鍵。
2.有外來鍵參照的表要修改則不成功,需要指定引數--alter-foreign-keys-method=auto|rebuild_constraints|drop_swap|none
3.要修改的表上不能有trigger,否則修改失敗。
報錯如下:
1.DBD::mysql::db selectall_arrayref failed: Lost connection to MySQL server during query [for Statement "SELECT table_schema, table_name FROM information_schema.key_column_usage WHERE constraint_schema='test' AND referenced_table_name='tool2'"] at /usr/bin/pt-online-schema-change line 9749.
2.You did not specify --alter-foreign-keys-method, but there are foreign keys that reference the table. Please read the tool's documentation carefully.
3.[root@mysql3-1 ~]# /usr/bin/pt-online-schema-change --alter='add column title varchar(30)' --execute D=test,t=tool3_for --set-vars innodb_lock_wait_timeout=50
The table `test`.`tool3_for` has triggers. This tool needs to create its own triggers, so the table cannot already have triggers.
pt-online-schema-change 執行結果如下:
[root@mysql3-1 ~]# /usr/bin/pt-online-schema-change --alter='add column title varchar(30)' --execute D=test,t=tool3 --set-vars innodb_lock_wait_timeout=50
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 `test`.`tool3`...
Creating new table...
Created new table test._tool3_new OK.
Altering new table...
Altered `test`.`_tool3_new` OK.
2014-02-19T22:59:26 Creating triggers...
2014-02-19T22:59:26 Created triggers OK.
2014-02-19T22:59:26 Copying approximately 2 rows...
2014-02-19T22:59:26 Copied rows OK.
2014-02-19T22:59:26 Swapping tables...
2014-02-19T22:59:26 Swapped original and new tables OK.
2014-02-19T22:59:26 Dropping old table...
2014-02-19T22:59:26 Dropped old table `test`.`_tool3_old` OK.
2014-02-19T22:59:26 Dropping triggers...
2014-02-19T22:59:26 Dropped triggers OK.
Successfully altered `test`.`tool3`.
-------------------------------------------------------------------------
--set-vars innodb_lock_wait_timeout=50 # 因為此工具設定了一些引數的預設值,此值預設是1.
Creating triggers...:三個觸發器:insert 、update、delete 。
三.解析XtraBackup備份MySQL的原理和過程:
XtraBackup在啟動的時候會記錄一個LSN(logsequence number),然後就把所有的Innodb資料檔案(共享表空間和ibd)複製出來,這樣複製出來的資料檔案是不一致的,但是XtraBackup會在後臺執行一個程式把所有對redo log file的修改記錄下來,只要有了這個資料,就能進行崩潰恢復。只所以要額外記錄下來,是因為MySQL自身的redo log file是可重用的。
如果用innobackupex 指令碼,剛才的步驟完成以後,innobackupex就會去備份MyISAM表和.frm檔案,這時要保證資料的一致性就會先鎖表了,透過FLUSH TABLES WITHREAD LOCK命令鎖表然後把檔案複製出來,再釋放掉這個鎖。
在恢復資料的時候,要經過prepare(recovery)和restore兩個步驟。在prepare結束以後,Innodb的表恢復到了複製Innodb檔案結束的時間點,這個時間點也就是鎖表複製MyISAM表的起點,所以最終資料是一致的。一般我們在恢復的時候執行兩次prepare,是因為第二次prepare會幫助我們生成redo log檔案,從而加快MySQL資料庫啟動的速度。
10701 03:29:39 innobackupex: Starting to lock all tables...
>> log scanned up to (2371742526)
>> log scanned up to (2371742526)
110701 03:29:51 innobackupex: All tables locked and flushed to disk
110701 03:29:51 innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,
innobackupex: .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV and .opt files in
上面是否需要最後備份myisam表時執行FLUSH TABLES WITHREAD LOCK 加鎖還有待原始碼考證,這是最坑爹的地方!!若果是這樣的話,全庫加全域性讀鎖,MyISM表多了對MySQL的寫入等就影響大了。
*XtraBackup 執行過程:
wKioL1ME19LTCqShAANLHOFKoOw743.jpg
wKiom1ME1_fxnT24AAL7EB1x9KA528.jpg
wKioL1ME19KQzy1EAAKtprPDUp4257.jpg
©著作權歸作者所有:來自51CTO部落格作者smart818的原創作品,如需轉載,請註明出處,否則將追究法律責任
工作原理XtraBackuppt-online-schema-chamysql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4650/viewspace-2820689/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Xtrabackup】Xtrabackup備份基礎知識
- XtraBackup工具詳解 Part 2 xtrabackup安裝
- XtraBackup工具詳解 Part 3 XtraBackup工作原理
- XtraBackup 搭建從庫的一般步驟及 XtraBackup 8.0 的注意事項
- 【Xtrabackup】Xtrabackup全備、增量備份及恢復示例
- XtraBackup工具詳解 Part 4 XtraBackup許可權及配置
- xtrabackup 2.4 的介紹與使用
- MySQL:xtrabackup備份MySql
- Xtrabackup增量備份
- RHEL安裝Xtrabackup
- MySQL8.0之XtraBackupMySql
- Xtrabackup 2.4.14使用指南
- Xtrabackup全量備份
- 從原始碼分析 XtraBackup 的備份原理原始碼
- 【MySQL】xtrabackup 2.4.12備份觸發的bugMySql
- 線上改表工具oak-online-alter-table和pt-online-schema-change的使用限制總結
- pt-online-schema-change 錯誤集 Wide characterIDE
- pt-online-schema-change使用引數說明
- pt-online-schema-change工作過程介紹
- 使用Xtrabackup遠端備份MysqlMySql
- MySQL xtrabackup for centos7.2安裝MySqlCentOS
- mysql之 xtrabackup-2.4.12 安裝MySql
- MySQL修改大表工具pt-online-schema-change原理MySql
- MySQL:pt-online-schema-change原理及注意點(未完)MySql
- Percona xtrabackup2.4版本遠端備份和搭建從庫的方法介紹
- 故障分析 | DDL 導致的 Xtrabackup 備份失敗
- 關於xtrabackup --slave-info引數的說明
- 一個 MySQL 線上 DDL 工具 — pt-online-schema-changeMySql
- xtrabackup備份mysql“ib_logfile0 is ofMySql
- pt-tools系列:xtrabackup最佳實踐
- MySQL運維實戰之備份和恢復(8.1)xtrabackup全量備份MySql運維
- MySQL 5.7使用pt-online-schema-change對大表加索引MySql索引
- 如何對xtrabackup 備份限制使用IO大小
- MySQL Backup--Xtrabackup備份限速問題MySql
- 【MySQL】Xtrabackup備份及恢復指令碼MySql指令碼
- 想了解Xtrabackup備份原理和常見問題分析,看這篇就夠了
- MySQL 5.7使用pt-online-schema-change對大表加欄位MySql
- 使用Xtrabackup完整備份中恢復單表