資料表遷徙資料一致性驗證

來源:互聯網
上載者:User
資料表遷移資料一致性驗證

  在遷移資料庫的時候做一些必要的驗證還是很有用的,比如說遷移前後的資料條數是否一致,資料是否一致,這個時候怎麼辦呢,驗證條數還好說,要是驗證資料是否一致呢,對於重要的資料當然要每條都不會有差錯,隨機抽樣驗證肯定是不行的,萬一遺漏了就麻煩了,而且兩張表不再同一台伺服器上。這個時候該怎麼辦呢,有一種方法:

  1. 從表中選取幾個重要欄位,比如說A、B、C,用這幾個欄位作為比對的尺規。
  2. 從原表中匯出每條資料的這三個欄位到一個檔案f1中。
  3. 從目的表中到處每條資料的這三個欄位到檔案f2中。
  4. 比對檔案f1、f2檔案中的每條資料是否相同。
  5. 得出結論

  上面這種方法是同時想出來的,也還不錯,但我覺得還有改進的餘地:

  • 首先就是不是所有欄位,仍然有可能在非主要欄位出現different。
  • 整體效率比較低

  我的想法是這樣:

  1. 對錶中的每n條資料進行拼接(直接連接起來,n取值取決於每條資料的資料量大小)。
  2. 計算這n條資料的md5值,添加到檔案f1中,直到所有資料取值完成。
  3. 對目的表也一樣,記錄的檔案f2中。
  4. 比對檔案f1、f2檔案的md5值,如果一致,ok,成功。
  5. 如果不一致,從上倒下比對每條md5值,找到第m條不一致。
  6. 得出結論,不一致的資料在m*(n-1)+1 ~ m*n之間,可以再次選擇定位。

  第二種方法的好處就是輸出檔案會在一定範圍縮小,比對方便,但是也有缺點,不能像第一種方法一樣直接通過關鍵字段定位不同資料的位置。

  下面是第二種方法效果和的具體代碼實現:

 'localhost','port' => '3306','user' => 'root','pswd' => '123456','charset' => 'utf8','tables' => array('lagou.pos','lagou.pos_innodb',),);//驗證格式if(!$link = mysql_connect($dbinfos['host'].":".$dbinfos['port'],$dbinfos['user'], $dbinfos['pswd'])){die("connect to [{$host}@{$port}] failed!!");}if(!mysql_query("set names {$dbinfos['charset']}")){die("set charset error : ".mysql_error());}foreach ($dbinfos['tables'] as $table) {if($is_count){$sql = "select count(*) as nums from {$table}";$ret = mysql_query($sql);if(!$ret){die("error : ".mysql_error());}$ret = mysql_fetch_array($ret, MYSQL_ASSOC);echo "{$table} : {$ret['nums']}\n";}if($is_md5){$path = $is_md5.DIRECTORY_SEPARATOR.$table;$sql = "select * from {$table}";$ret = mysql_query($sql);$flag = 0;$fields = '';while ($_ret = mysql_fetch_array($ret, MYSQL_NUM)) {$flag++;while($_ret){$fields .= array_pop($_ret);}if($flag % $conbine_num == 0){file_put_contents($path, md5($fields)."\n", FILE_APPEND);$fields = '';}}if($flag % $conbine_num != 0 && $flag > 0){file_put_contents($path, md5($fields)."\n", FILE_APPEND);}echo "save to file info : ".realpath($path)."\n";}}

  

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    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.