MySQL在線大表DDL操作


 在線大表DDL操作的方法:

1、主從架構輪詢修改

需要注意:  

  a、主庫會話級別的記錄binglog的參數關閉

  b、500\502錯誤異常捕捉

  c、檢查備庫的second behind master是否有延遲

  d、varchar有頁分裂的情況,盡量減少varchar的長度

2、在線工具online-schema-change需要注意:

需要注意:  

  a、超過1000w行,速度會變慢(半小時左右)

參考鏈接:http://www.it165.net/pro/html/201312/8928.html

作為DBA,我們也常常會碰到這樣的需求:需要在不影響線上業務的情況下給表添加一個字段或索引。如果是一張只有幾百或幾千條記錄的小表,這樣的需求是非常容易解決的。但如果所管理的表數據量已經上億、而且應用與數據庫交互非常頻繁,不允許停機窗口的出現,這樣的需求又該如何滿足?

大多數的alter table操作都會涉及lock-->copy to new table-->rename-->unlock的過程,鎖表時間會很長,而且alter table 的process不可被kill,一旦執行就不可回退。

在MySQL5.5和之前版本,在運行的生產環境對大表(超過數百萬紀錄)執行Alter操作是一件很困難的事情。因為將重建表和鎖表,影響用戶者的使用。

從MySQL5.6開始,Online DDL特性被引進。他增強了很多種類的Alter Table操作避免拷貝表和鎖表,在運行Alter操作的同時允許運行select,insert,update,delete語句。因此在最新版本,我們可以通過使用ALGORITHM和LOCK選項抑制文件拷貝和加鎖。

但是即使在MySQL5.6,仍然有一些Alter操作(增加/刪除列,增加/刪除主鍵,改變數據類型等)需要重建表。並不建議直接在線上使用alter table。如果線上有DDL的需求我們建議使用以下兩種方式:

1、主從架構輪詢修改

2、使用在線修改工具online-schema-change

對於第一種方式,使用的前提是,你的數據庫架構是一個集群,如果不是,也就無所謂的輪詢修改。修改的原理就是利用主從服務,在應用無感知的情況下,得到停機窗口,進行修改。今天我們着重講第二種方式,利用第三方工具實現在線大表的DDL操作。這種方式在alter操作更改表結構的時候不用鎖定表,也就是說執行alter的時候不會阻塞寫和讀取操作。

工作原理:

創建一個和你要執行alter操作的表一樣的空表結構,執行表結構修改,然后從原表中copy原始數據到表結構修改后的表,當數據copy完成以后就會將原表移走,用新表代替原表,默認動作是將原表drop掉。在copy數據的過程中,任何在原表的更新操作都會更新到新表,因為這個工具在會在原表上創建觸發器,觸發器會將在原表上更新的內容更新到新表。如果表中已經定義了觸發器這個工具就不能工作了。

注意點:

1、操作的表必須有主鍵或唯一索引否則報錯。

2、如果表有外鍵,除非使用 --alter-foreign-keys-method 指定特定的值,否則工具不予執行。

3、當業務量較大時,修改操作會等待沒有數據修改后,執行最后的rename操作。因此,在修改表結構時,應該盡量選擇在業務相對空閑時,至少修改表上的數據操作較低時,執行較為妥當。

4、由於可能存在一定的風險,在操作之前,建議對數據表進行備份,可以使得操作更安全、可靠。

5、當是主從環境,不在乎從的延遲,則需要加--recursion-method=none參數。當需要盡可能的對服務產生小的影響,則需要加上--max-load參數。

環境搭建:

安裝依賴環境

##Install DBI

wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.625.tar.gz

tar -zxvf DBI-1.625.tar.gz

cd DBI-1.625

perl Makefile.PL

make

make install

 

##Install DBD::Mysql

wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.023.tar.gz

tar -zxvf DBD-mysql-4.023.tar.gz

cd DBD-mysql-4.023

perl Makefile.PL

make

make install

 

安裝percona-toolkit:

##Install percona-toolkit

wget percona.com/get/percona-toolkit.tar.gz

tar -zxvf percona-toolkit-2.2.16.tar.gz

cd percona-toolkit-2.2.16

perl Makefile.PL

make

make install

常用操作:

添加字段

[root@rac1 bin]#  ./pt-online-schema-change -uroot  -pxxx --alter='add column col1_test int' --execute D=test,t=t_xxx_compensate

修改字段

[root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='MODIFY COLUMN col1_test TINYINT NOT NULL DEFAULT 0 ' --execute D=test,t=t_xxx_compensate              

改字段名

[root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='CHANGE COLUMN col1_test address varchar(30)' --execute D=test,t=t_xxx_compensate  

刪除字段        

[root@rac1 bin]# ./pt-online-schema-change  -uroot  -pxxx  --alter='drop  column  address ' --execute D=test,t=t_xxx_compensate  

添加索引

[root@rac1 bin]# ./pt-online-schema-change -uroot  -pxxx --alter='add key indx_test(col1_test) ' --execute D=test,t=t_xxx_compensate

刪除索引

[root@rac1 bin]# ./pt-online-schema-change -uroot  -pxxx --alter='DROP INDEX indx_test' --execute D=test,t=t_xxx_compensate

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM