《MYSQL數據庫MySQL中修改表結構時需要注意的一些地方》要點:
本文介紹了MYSQL數據庫MySQL中修改表結構時需要注意的一些地方,希望對您有用。如果有疑問,可以聯系我們。
MYSQL學習MySql 在修改表結構的時候可能會中斷產品的正常運行影響用戶體驗,甚至更壞的結果,丟失數據.不是所有的數據庫管理員、程序員、系統管理員都非常了解Mysql能避免這種情況.DBA會經常碰到這種生產中斷的情況,當升級腳本修改了應用層和數據庫層,或者缺乏經驗的管理員、開發在不是很了解Mysql內部工作機制的情況下修改了規范文件.
MYSQL學習真相是:
MYSQL學習Percona MySQL? 服務器開發團隊鼓勵用戶在計劃或者執行數據庫遷移的時候先和我們溝通.我們的目標是基于用戶給出的各種情況給出最佳的方案.旨在避免鎖表當用戶對非常大的表執行DDL,以確保應用能像平常一樣正常運行,同時也在努力改善響應時間或增加系統功能.最差的情況是確保那些經不起當機的系統在黃金交易時間正常運行.
MYSQL學習我們使用的大多數安裝包仍然小于Mysql5.6,這需要我們不停嘗試新的安裝環境來把數據庫遷移造成的損失降到最低.這可能需要一個能“在線修改規范定義文件”的工具來升級或者修改規范文件.Mysql5.6解決這一問題的做法是通過減少重建表和鎖表的場景,但這個方法不能覆蓋所有的可能的操作,例如當修改一列的數據類型時必然需要全表重構.Przemys?aw和 Malkowski在去年盡可能詳盡的討論了Mysql5.6運行中修改定義.
MYSQL學習
對于Mysql5.6的用戶,最好的建議是回顧一下數矩陣來熟悉在MYSQL之外執行定義的更改,好消息是我們很擅長解決這一問題.
MYSQL學習說實話,鎖表操作會經常被忽視,在操作30M大小的表時我們更傾向于直接修改,但是30G,300G的表就要考慮一下了.當使用率不高或者對鎖定時間要求不是很高的的系統來說直接操作也許更好.可是,我們常常會遇到一個需要立即執行的SQL,或者因為性能問題需要緊急增加一個索引來減少加載時間.
MYSQL學習
是否需要在系統在線期修改表定義
MYSQL學習上面提到,在線修改表定義是工作流中的一個模塊.通常是不錯的解決方案,但也會遇到不能使用的場合,例如:當某個表使用了觸發器.了解pt-osc在我們項目中的工作過程很重要,讓我們來看一下源代碼:
?
MYSQL學習?我把上面第三步到第五步高亮出來,這是鎖表可能引起系統停機的時間.但步驟六設計外鍵更新是一個循環的操作,是避免在更新關系的時候隱含地重建表.有很多方法可以確保表的完整性約束,在pt-osc的說明文檔中詳細說明了,在開始之前預覽你的表結構包括約束,并知道怎樣把修改表定義所造成的影響降到最低.
MYSQL學習
最近,我們通知了一個擁有高并發高事務量系統的用戶運行pt-osc在大型數據表上.這件事對于他們來說很平常,幾小時后我們的客服被告知該客戶遇到了最大連接數超過的問題.這個問題是如何產生的呢?當pt-osc運行到步驟五的時候會嘗試去鎖定數據并重命名原表和隱藏表,然而這不會在開啟事務的時候立即執行,因此這條線程會被排在重命名后面.這表現在用戶應用上就是系統停機.數據庫無法開啟新的連接并且所有的線程都被阻塞在重命名命令之后.
MYSQL學習?
MYSQL學習??? 5.5.3版本的說明,當開啟一個事務時會鎖定它會用到的所有表的數據(不依賴于存儲引擎),并在事務提交的時候釋放鎖.這樣做確保了在開啟事務期間不能修改表的定義.
MYSQL學習
長遠來看我們可以采用一些新的技術來避免這種情況,例如non-default pt-osc的選項,換言之就是不會刪除原表把數據換到新表.這種聯合脫離了隱藏表和觸發器,我們應該鼓勵將重命名操作變得原子化.
MYSQL學習校訂:2.2版本的percona工具新增了一個變量Ctries? 和變量Cset-vars 共同被部署,解決了各種pt-osc操作可能會鎖表的情況.pt-osc (Cset-vars)默認會設置如下的會話變量當連接到數據庫服務器的時候.
MYSQL學習???
MYSQL學習
當使用 Ctries 我們可以顆粒化地鑒別操作,嘗試次數、在嘗試的間隔等待.這種組合可以確保pt-osc在合適的時機殺掉自己的等待會話進程,確保線程堆棧的空閑,并提供給我們循環操作來獲取管理因觸發器、重命名、修改外鍵而造成的鎖.
MYSQL學習???
MYSQL學習說明文檔在這里http://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html#cmdoption-pt-online-schema-changeCtries
MYSQL學習它闡述了即便使用了諸如pt-osc之類的工具,充分了解你想解決的問題是很重要.下面的流程圖會幫助你當你了解修改了MYSQL數據庫的結構的注意事項.請仔細閱讀建議盡管有些圖上未標出,例如磁盤空間,IO加載等.
MYSQL學習
MYSQL學習選擇合適的DDL操作
MYSQL學習確保能清楚了解在修改表結構對你的系統會產生何種影響,并選擇合適的方法來使這種影響降到最低.有時這意味著需要將改動延期直到系統到了不常使用的時候或者使用能在操作期間不鎖表的工具.當你表中有觸發器的時候一般直接修改表結構.
MYSQL學習?