MySQL日常大表的DDL操作介紹

這篇文章主要講解了“MySQL日常大表的DDL操作介紹”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“MySQL日常大表的DDL操作介紹”吧!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計,寶塔網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:寶塔等地區(qū)。寶塔做網(wǎng)站價格咨詢:18980820575


大多數(shù)的alter table操作都會涉及l(fā)ock-->copy to new table-->rename-->unlock的過程,鎖表時間會很長,而且alter table 的process不可被kill,一旦執(zhí)行就不可回退。
在MySQL5.5和之前版本,在運行的生產(chǎn)環(huán)境對大表(超過數(shù)百萬紀(jì)錄)執(zhí)行Alter操作是一件很困難的事情。因為將重建表和鎖表,影響用戶者的使用。
從MySQL5.6開始,Online DDL特性被引進。他增強了很多種類的Alter Table操作避免拷貝表和鎖表,在運行Alter操作的同時允許運行select,insert,update,delete語句。因此在最新版本,我 們可以通過使用ALGORITHM和LOCK選項抑制文件拷貝和加鎖。
但是即使在MySQL5.6,仍然有一些Alter操作(增加/刪除列,增加/刪除主鍵,改變數(shù)據(jù)類型等)需要重建表。

雖然mysql5.6對atler table操作有了很大改進,但仍有很多限制,并不建議直接在線上使用。如果線上有DDL的需求我們建議使用以下兩種方式:
1、主從架構(gòu)輪詢修改
2、使用在線修改工具online-schema-change
對于第一種方式,使用的前提是,你的數(shù)據(jù)庫架構(gòu)是一個集群,如果不是,也就無所謂的輪詢修改。修改的原理就是利用主從服務(wù),在應(yīng)用無感知的情況下,得到停機窗口,進行修改。
今天我們著重講第二種方式,利用第三方工具實現(xiàn)在線大表的DDL操作。這種方式在alter操作更改表結(jié)構(gòu)的時候不用鎖定表,也就是說執(zhí)行alter的時候不會阻塞寫和讀取操作。

工作原理:
創(chuàng)建一個和你要執(zhí)行alter操作的表一樣的空表結(jié)構(gòu),執(zhí)行表結(jié)構(gòu)修改,然后從原表中copy原始數(shù)據(jù)到表結(jié)構(gòu)修改后的表,當(dāng)數(shù)據(jù)copy完成以后就會將 原表移走,用新表代替原表,默認動作是將原表drop掉。在copy數(shù)據(jù)的過程中,任何在原表的更新操作都會更新到新表,因為這個工具在會在原表上創(chuàng)建觸 發(fā)器,觸發(fā)器會將在原表上更新的內(nèi)容更新到新表。如果表中已經(jīng)定義了觸發(fā)器這個工具就不能工作了。

注意點:
1、操作的表必須有主鍵或唯一索引否則報錯。
2、如果表有外鍵,除非使用 --alter-foreign-keys-method 指定特定的值,否則工具不予執(zhí)行。
3、當(dāng)業(yè)務(wù)量較大時,修改操作會等待沒有數(shù)據(jù)修改后,執(zhí)行最后的rename操作。因此,在修改表結(jié)構(gòu)時,應(yīng)該盡量選擇在業(yè)務(wù)相對空閑時,至少修改表上的數(shù)據(jù)操作較低時,執(zhí)行較為妥當(dāng)。
4、由于可能存在一定的風(fēng)險,在操作之前,建議對數(shù)據(jù)表進行備份,可以使得操作更安全、可靠。
5、當(dāng)是主從環(huán)境,不在乎從的延遲,則需要加--recursion-method=none參數(shù)。當(dāng)需要盡可能的對服務(wù)產(chǎn)生小的影響,則需要加上--max-load參數(shù)。

環(huán)境搭建:
安裝依賴環(huán)境
##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

感謝各位的閱讀,以上就是“MySQL日常大表的DDL操作介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對MySQL日常大表的DDL操作介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

名稱欄目:MySQL日常大表的DDL操作介紹
網(wǎng)站地址:http://bm7419.com/article2/psdooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站軟件開發(fā)、做網(wǎng)站、云服務(wù)器、移動網(wǎng)站建設(shè)、微信公眾號

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)