如何快速對比MySQL兩個不同執行個體上的資料並找出差異

來源:互聯網
上載者:User

如何快速對比MySQL兩個不同執行個體上的資料並找出差異

在MySQL營運中,研發同事想對比下兩個不同執行個體上的資料並找出差異,除主鍵外還需要對比每一個欄位,如何做呢?

第一種方案,寫程式將兩個執行個體上的每一行資料取出來進行對比,理論可行,但是對比時間較長。

第二種方案,對每一行資料所有欄位合并起來,取checksum值,再按照checksum值對比,看著可行,嘗試下。

首先要合并所有欄位的值,選用MySQL提供的CONCAT函數,如果CONCAT函數中包含NULL值,會導致最終結果為NULL,因此需要使用IFNULL函數來替換NULL值,如:

CONCAT(IFNULL(C1,''),IFNULL(C2,''))

加入表有很多行,手動拼個指令碼比較累,別急,可以使用information_schema.COLUMNS來處理:

## 擷取列名的拼接串SELECTGROUP_CONCAT('IFNULL(',COLUMN_NAME,','''')')FROM information_schema.COLUMNS WHERE TABLE_NAME='table_name';

假設我們有測試表:

CREATE TABLE t_test01(    id INT AUTO_INCREMENT PRIMARY KEY,    C1 INT,    C2 INT)

我們便可以拼接出下面的SQL:

SELECTid,MD5(CONCAT(IFNULL(id,''),IFNULL(c1,''),IFNULL(c2,''),)) AS md5_valueFROM t_test01

在兩個執行個體上執行下,然後把結果使用beyond compare對比下,就很容易找出不相同的行以及主鍵ID

對於資料量較大的表,執行出來的結果集也很大,對比起來比較費勁,那就先嘗試縮小結果集,可以將多行記錄的md5值合并起來求MD5值,如果最後MD5值相同,則這些行相同,如果不同,則證明存在差異,再按照這些行進行逐行對比。

假設我們按照1000行一組來進行對比,如果需要將分組後的結果合并,需要使用GROUP_CONCAT函數,注意在GROUP_CONCAT函數中添加排序保證合并資料的順序, SQL如下:

SELECTmin(id) as min_id,max(id) as max_id,count(1) as row_count,MD5(GROUP_CONCAT(MD5(CONCAT(IFNULL(id,''),IFNULL(c1,''),IFNULL(c2,''),)) ORDER BY id))AS md5_valueFROM t_test01GROUP BY (id div 1000)

執行結果為:

min_id    max_id    row_count    md5_value0        999        1000         7d49def23611f610849ef559677fec0c1000     1999       1000         95d61931aa5d3b48f1e38b3550daee082000     2999       1000         b02612548fae8a4455418365b3ae611a3000     3999       1000         fe798602ab9dd1c69b36a0da568b6dbb 

當差異資料較少時,即使需要對比上千萬資料,我們可以輕鬆根據根據min_id和max_id來快速定位到哪1000條資料裡存在差異,再進行逐行MD5值對比,最終找到差異行。

最終對比圖:

##=====================================================================##

PS:

在使用GROUP_CONCAT時,需要配置MySQL變數group_concat_max_len,預設值為1024,超出部分會被階段。

參考連結:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.