站長資訊網
        最全最豐富的資訊網站

        MySQL數據庫線上修改表結構的方法

        本篇文章給大家帶來了關于mysql的相關知識,MySQL有一個把鎖,叫做MDL元數據鎖,當對表修改的時候,會自動給表加上這把鎖,也就是不需要自己顯式使用,下面介紹一下MySQL數據庫線上修改表結構的方法,希望對大家有幫助。

        MySQL數據庫線上修改表結構的方法

        推薦學習:mysql視頻教程

        一、MDL元數據鎖

        在修改表結構之前,先來看下可能存在的問題。

        1、什么是MDL鎖

        MySQL有一個把鎖,叫做MDL元數據鎖,當對表修改的時候,會自動給表加上這把鎖,也就是不需要自己顯式使用。

        • 當對表做增刪改查的時候,加的是MDL讀鎖
        • 當對表結構做變更修改的時候,加的是MDL寫鎖

        讀與讀之間不互斥,讀與寫,寫與寫之間互斥,因此

        • 當有一個線程對表執行增刪蓋茶的時候,會阻塞掉別的線程對表結構修改的請求
        • 當有一個線程對表結構修改的時候,會阻塞掉別的線程對表增刪改查的請求

        2、MDL鎖的問題

        并且MDL一旦上鎖之后,只有當前請求的事務提交才會釋放,如果是一個長事務,或者是線上數據量很大,修改表結構默認上了MDL寫鎖,會很耗時一直阻塞掉后邊其他請求。

        想象一種場景,A(select),B(alter), C(select),D(select)…..分別為按照順序對MySQL同一張表的請求,這些請求會形成一個隊列。
        當A(select)獲取表的MDL讀鎖之后,就會阻塞掉B(alter),因為B要加的是MDL寫鎖,B被阻塞掉之后,就會導致后邊等待隊列中的其他請求都被阻塞掉,最終造成Mysql的可用連接耗盡,請求超時等問題。

        二、如何線上修改MySQL表結構

        鑒于以上MDL鎖,得知對表做alter修改結構很會阻塞掉其他的正常請求,所以修改操作要放在非業務高峰期來做,一般是放到凌晨2-4點。

        具體步驟:

        • 對表加讀寫鎖,使得此時表只讀、
        • 復制原表的物理結構
        • 修改新表的物理結構,包括增加新字段或者修改其他表結構
        • 把表結構導入新表,數據同步完成,鎖住中間表,刪除原表
        • 將新表rename為原表名
        • 釋放鎖

        以上方案的問題是,數據量很大的時候,數據都導入需要時間,這個過程中,服務是不可訪問的。

        改進:

        MySQL數據庫線上修改表結構的方法

        新建一張表 A_new,其比原表多了幾個字段,通過數據訂閱的方式訂閱原表A,把線上的表A中的數據同步到這個新建的表A_new中,這個過程會一直持續,并且這個過程中表A是可以增刪改查的,總有一個時刻,這兩張表的數據是完全同步的,數據上是沒有任何差異的,這個時候把原表表名A給修改掉,把新表A_new修改為原表A,這個操作是一個短暫操作,可以瞬間完成,不會有很大影響。
        優缺點:

        • 好處是同步的過程不會影響原有的業務正常。
        • 缺點是過程中需要額外一倍的存儲空間去存儲這個新表,當rename完成之后,可以把老表刪掉。

        推薦學習:mysql視頻教程

        前端(vue)入門到精通課程:立即學習

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲国产精品婷婷久久| 精品久久久久一区二区三区| 欧美亚洲国产精品第一页| 亚洲国模精品一区| 97精品国产高清自在线看超| 久久久久人妻一区精品性色av| 精品无码综合一区| 国产成人精品久久| 国产精品久久国产精品99盘 | 国产精品igao视频| 国产精品无码午夜福利| 亚洲精品无码99在线观看 | 欧美精品亚洲精品日韩精品| 久久亚洲国产欧洲精品一| 久久精品夜夜夜夜夜久久| 亚洲精品综合久久| 亚洲精品欧美二区三区中文字幕| 国产精品亚洲一区二区在线观看| 精品亚洲综合久久中文字幕| 国产精品熟女一区二区| 四虎影视永久在线观看精品| 日产国产精品亚洲系列| 国产在线精品一区二区三区不卡| 国产精品美女久久久久av爽| 亚洲国产精品免费视频| 九九热精品在线| 久久99国产精品久久99果冻传媒| 国产精品视频a播放| 99久久精品毛片免费播放| av国内精品久久久久影院| 国产精品无码成人午夜电影| 国内精品人妻无码久久久影院| 欧美精品中文字幕亚洲专区| 少妇人妻无码精品视频| 久久亚洲欧美国产精品| 久久精品aⅴ无码中文字字幕不卡| 久久香蕉国产线看观看精品yw| 精品成在人线AV无码免费看 | 亚洲爆乳无码精品AAA片蜜桃| 欧美在线精品永久免费播放| 久久精品一区二区影院|