這篇文章主要講解了“日常大表的DDL操作介紹”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“MySQL日常大表的DDL操作介紹”吧!
大多數的alter table操作都會(huì )涉及l(fā)ock-->copy to new table-->rename-->unlock的過(guò)程,鎖表時(shí)間會(huì )很長(cháng),而且alter table 的process不可被kill,一旦執行就不可回退。
在MySQL5.5和之前版本,在運行的生產(chǎn)環(huán)境對大表(超過(guò)數百萬(wàn)紀錄)執行Alter操作是一件很困難的事情。因為將重建表和鎖表,影響用戶(hù)者的使用。
從MySQL5.6開(kāi)始,Online DDL特性被引進(jìn)。他增強了很多種類(lèi)的Alter
Table操作避免拷貝表和鎖表,在運行Alter操作的同時(shí)允許運行select,insert,update,delete語(yǔ)句。因此在最新版本,我
們可以通過(guò)使用ALGORITHM和LOCK選項抑制文件拷貝和加鎖。
但是即使在MySQL5.6,仍然有一些Alter操作(增加/刪除列,增加/刪除主鍵,改變數據類(lèi)型等)需要重建表。
雖然mysql5.6對atler table操作有了很大改進(jìn),但仍有很多限制,并不建議直接在線(xiàn)上使用。如果線(xiàn)上有DDL的需求我們建議使用以下兩種方式:
1、主從架構輪詢(xún)修改
2、使用在線(xiàn)修改工具online-schema-change
對于第一種方式,使用的前提是,你的數據庫架構是一個(gè)集群,如果不是,也就無(wú)所謂的輪詢(xún)修改。修改的原理就是利用主從服務(wù),在應用無(wú)感知的情況下,得到停機窗口,進(jìn)行修改。
今天我們著(zhù)重講第二種方式,利用第三方工具實(shí)現在線(xiàn)大表的DDL操作。這種方式在alter操作更改表結構的時(shí)候不用鎖定表,也就是說(shuō)執行alter的時(shí)候不會(huì )阻塞寫(xiě)和讀取操作。
工作原理:
創(chuàng )建一個(gè)和你要執行alter操作的表一樣的空表結構,執行表結構修改,然后從原表中copy原始數據到表結構修改后的表,當數據copy完成以后就會(huì )將
原表移走,用新表代替原表,默認動(dòng)作是將原表drop掉。在copy數據的過(guò)程中,任何在原表的更新操作都會(huì )更新到新表,因為這個(gè)工具在會(huì )在原表上創(chuàng )建觸
發(fā)器,觸發(fā)器會(huì )將在原表上更新的內容更新到新表。如果表中已經(jīng)定義了觸發(fā)器這個(gè)工具就不能工作了。
注意點(diǎn):
1、操作的表必須有主鍵或唯一索引否則報錯。
2、如果表有外鍵,除非使用 --alter-foreign-keys-method 指定特定的值,否則工具不予執行。
3、當業(yè)務(wù)量較大時(shí),修改操作會(huì )等待沒(méi)有數據修改后,執行最后的rename操作。因此,在修改表結構時(shí),應該盡量選擇在業(yè)務(wù)相對空閑時(shí),至少修改表上的數據操作較低時(shí),執行較為妥當。
4、由于可能存在一定的風(fēng)險,在操作之前,建議對數據表進(jìn)行備份,可以使得操作更安全、可靠。
5、當是主從環(huán)境,不在乎從的延遲,則需要加--recursion-method=none參數。當需要盡可能的對服務(wù)產(chǎn)生小的影響,則需要加上--max-load參數。
環(huán)境搭建:
安裝依賴(lài)環(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
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站