데이터베이스를 마이그레이션할 때 몇 가지 필요한 확인을 수행하는 것은 여전히 매우 유용합니다. 예를 들어 마이그레이션 전과 후의 데이터 항목 수가 일치하는지, 이때는 어떻게 해야 합니까? 항목 수를 확인하는 것이 더 쉽지만 데이터의 일관성이 확인되면 물론 중요한 데이터의 경우 모든 데이터에 오류가 없어야 합니다. 만약 누락된 경우에는 절대 불가능합니다. 문제가 발생할 수 있으며 두 테이블은 더 이상 동일한 서버에 있지 않습니다. 이때 어떻게 해야 할까요? 방법이 있습니다:
위의 방법도 동시에 생각해낸 방법이고 나쁘지는 않지만 개선의 여지가 있다고 생각합니다.
제 생각은 이렇습니다.
두 번째 방법의 장점은 출력 파일이 일정 범위 내로 줄어들어 비교가 쉽다는 것입니다. 그러나 첫 번째와 같이 키 필드를 통해 다른 데이터의 위치를 직접 찾을 수 없다는 단점도 있습니다. 방법.
다음은 두 번째 방법의 효과를 구체적으로 구현한 코드입니다.
<?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"; } }
위 내용은 내용의 측면을 포함하여 데이터 테이블 마이그레이션의 데이터 일관성 검증을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.