1.背景:設計了兩個數據庫:業務庫和非業務庫,兩個數據庫都設計了一主一從,程序上寫主讀從,現在有一張業務庫主表地址字段長度需要修改加長,此業務表數據定時歸檔到歸檔表,歸檔表屬於非業務庫,歸檔表數據量爲千萬級。
2.操作流程
(1)事務執行歸檔表地址字段修改。
3.事故
事務執行過程中,新寫入的數據查詢不到,導致業務上數據驗證不通過。
4.原因分析
寫庫事務執行沒問題,讀庫事務執行時,讀庫事務堵塞,並且由於兩個讀數據庫是同一個實例,導致兩個讀數據庫都讀不到數據。
根本原因是:寫庫事務是並行處理,讀庫事務是串行處理,讀庫的事務按順序執行,其他事務必須等待,當一個事務執行過長,就導致主從數據庫數據同步延遲。
5.解決方案
(1)做多個從庫
(2)修改時將流量全部切到主庫
(3)升級數據庫到mysql 8.0,可秒級修改字段
mysql 8.0