現在假設乙個場景:假設乙個系統已經執行一段時間,資料量已經很大,這時候系統公升級,有張表需要增加個字段,但是併發量白天晚上都很大,請問怎麼修改表結構?
修改表結構會導致表鎖,資料量大修改資料很長,導致大量使用者阻塞,無法訪問該如何解決?
首先建立乙個和你要執行的alter操作的表一樣的空的表結構。
執行我們賦予的表結構的修改,然後copy原表中的資料到新錶裡面。
在原表上建立乙個觸發器在資料copy的過程中,將原表的更新資料的操作全部更新到新的表中來。
copy完成之後,用rename table 新錶代替原表,預設刪除原表。
但是上述的過程是不是過於麻煩,並且手動進行修改易導致錯誤,這在生成環境下是不能容忍的,這裡我們就可以使用pt-online-schema-change
工具類處理了。
ppm install dbi 依賴
ppm install dbd::mysql 安裝mysql驅動依賴
完成上述步驟,我們就可以進行修改表的資料結構,上述最後兩步安裝相應的依賴,就是在我們按照好perl環境之後,在 cmd 中執行完成即可。
那麼如何修改表的結構呢?如下:
pt-online-schema-change h=資料庫url位址,u=賬號,p=密碼,d=資料庫名,t=表名--alter "執行語句" --execute
例如把本地test資料庫中的user表中的name欄位型別改為varchar(200),執行命令如下:
perl f:\test\pt-online-schema-change h=127.0.0.1,u=root,p=123456,d=test,t=user--alter "modify name varchar(200) not null default '' " --execute
mysql 處理資料量較大的表
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。mysql處理資料量較大的資料,可以採用元資料表的形式,使用元資料表來記錄表名,查詢時先查詢元資料表,根據元資料表找到要查詢的資料表,然後執行查詢。尤其是對於分表的情況是很有效的。乙個表,無論是垂直拆分還是水平拆分...
海量資料(資料量比較大時)的處理分析
海量資料 資料量比較大時 的處理分析 海量資料處理問題是一項艱鉅而複雜的任務。原因有以下幾個方面 一 資料量過大,資料中什麼情況都可能存在。如果說有10條資料,那麼大不了每條去逐一檢查,人為處理,如果有上百條資料,也可以考慮,如果資料上到千萬級別,甚至過億,那不是手工能解決的了,必須通過工具或者程式...
海量資料(資料量比較大時)的處理分析
海量資料處理問題是一項艱鉅而複雜的任務。原因有以下幾個方面 一 資料量過大,資料中什麼情況都可能存在。如果說有10條資料,那麼大不了每條去逐一檢查,人為處理,如果有上百條資料,也可以考慮,如果資料上到千萬級別,甚至過億,那不是手工能解決的了,必須通過工具或者程式進行處理,尤其海量的資料中,什麼情況都...