时间:2021-07-01 10:21:17 帮助过:4人阅读
上面这种方法是同时想出来的,也还不错,但我觉得还有改进的余地:
我的想法是这样:
第二种方法的好处就是输出文件会在一定范围缩小,比对方便,但是也有缺点,不能像第一种方法一样直接通过关键字段定位不同数据的位置。
下面是第二种方法效果和的具体代码实现:
- <!--?php
- /**
- * 使用方法:
- * php -f mysql_diff.php
- yes
- dir
- 10
- *
- 是否计算条数
- 是否计算</pre-->输出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教程有兴趣的朋友有所帮助。