程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 數據表遷移數據一致性驗證,遷移數據一致性驗證

數據表遷移數據一致性驗證,遷移數據一致性驗證

編輯:關於PHP編程

數據表遷移數據一致性驗證,遷移數據一致性驗證


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

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

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

  我的想法是這樣:

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

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

<?php /** * 使用方法: * php -f mysql_diff.php yes dir 10 * 是否計算條數 是否計算輸出d5並保存到文件 合並數據的級別 * */ if(php_sapi_name() != 'cli') { die("請在CLI模式下運行"); } array_shift($argv); if(empty($argv)) { die("at letase contain one info"); } $is_count = array_shift($argv); $is_md5 = empty($argv) ? false : array_shift($argv); $conbine_num = empty($argv) ? 1 : intval(array_shift($argv)); if($is_md5 && !is_dir($is_md5) && !mkdir($is_md5, 777, true)) { die("error info : md5 info must be input to a file"); } $dbinfos = array( 'host' => '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"; } }

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved