您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

数据表迁移数据一致性验证

2024/3/29 5:56:30发布5次查看
在迁移数据库的时候做一些必要的验证还是很有用的,比如说迁移前后的数据条数是否一致,数据是否一致,这个时候怎么办呢,验证条数还好说,要是验证数据是否一致呢,对于重要的数据当然要每条都不会有差错,随机抽样验证肯定是不行的,万一遗漏了就麻烦了,而且两张表不再同一台服务器上。这个时候该怎么办呢,有一种方法:
从表中选取几个重要字段,比如说a、b、c,用这几个字段作为比对的标尺。从原表中导出每条数据的这三个字段到一个文件f1中。从目的表中到处每条数据的这三个字段到文件f2中。比对文件f1、f2文件中的每条数据是否相同。得出结论上面这种方法是同时想出来的,也还不错,但我觉得还有改进的余地:
首先就是不是所有字段,仍然有可能在非主要字段出现different。整体效率比较低我的想法是这样:
对表中的每n条数据进行拼接(直接连接起来,n取值取决于每条数据的数据量大小)。计算这n条数据的md5值,添加到文件f1中,直到所有数据取值完成。对目的表也一样,记录的文件f2中。比对文件f1、f2文件的md5值,如果一致,ok,成功。如果不一致,从上倒下比对每条md5值,找到第m条不一致。得出结论,不一致的数据在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; }}
以上就介绍了数据表迁移数据一致性验证,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录