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

  

  在迁移数据库的时候做一些必要的验证还是很有用的,比如说迁移前后的数据条数是否一致,数据是否一致,这个时候怎么办呢,验证条数还好,说要是验证数据是否一致呢,对于重要的数据当然要每条都不会有差错,随机抽样验证肯定是不行的,万一遗漏了就麻烦了,而且两张表不再同一台服务器上。这个时候该怎么办呢,有一种方法:   

  
      <李>   从表中选取几个重要字段,比如说A, B, C,用这几个字段作为比对的标尺。   李   <李>   从原表中导出每条数据的这三个字段到一个文件f1中。   李   <李>   从目的表中到处每条数据的这三个字段到文件f2中。   李   <李>   比对文件f1, f2文件中的每条数据是否相同。   李   <李>   得出结论   李   
  

  上面这种方法是同时想出来的,也还不错,但我觉得还有改进的余地:   

  
      <李>   首先就是不是所有字段,仍然有可能在非主要字段出现不同。   李   <李>   整体效率比较低   李   
  

  我的想法是这样:   

  
      <李>   对表中的每n条数据进行拼接(直接连接起来,n取值取决于每条数据的数据量大小)。   李   <李>   计算这n条数据的md5值,添加到文件f1中,直到所有数据取值完成。   李   <李>   对目的表也一样,记录的文件f2中。   李   <李>   比对文件f1, f2文件的md5值,如果一致,好,成功。   李   <李>   如果不一致,从上倒下比对每条md5值,找到第m条不一致。   李   <李>   得出结论,不一致的数据在m * (n - 1) + 1 ~ m * n之间,可以再次选择定位。   李   
  

  第二种方法的好处就是输出文件会在一定范围缩小,比对方便,但是也有缺点,不能像第一种方法一样直接通过关键字段定位不同数据的位置。   

  

  下面是第二种方法效果和的具体代码实现:   

  

  数据表迁移数据一致性验证”>
  </p>
  
  
  
  吗?
  
  
  
  
  
  
  1
  
  
  2
  
  
  3.
  
  
  4
  
  
  5
  
  
  6
  
  
  7
  
  
  8
  
  
  9
  
  
  10
  
  
  11
  
  
  12
  
  
  13
  
  
  14
  
  
  15
  
  
  16
  
  
  17
  
  
  18
  
  
  19
  
  
  20.
  
  
  21
  
  
  22
  
  
  23
  
  
  24
  
  
  25
  
  
  26
  
  
  27
  
  
  28
  
  
  29
  
  
  30.
  
  
  31
  
  
  32
  
  
  33
  
  
  34
  
  
  35
  
  
  36
  
  
  37
  
  
  38
  
  
  39
  
  
  40
  
  
  41
  
  
  42
  
  
  43
  
  
  44
  
  
  45
  
  
  46
  
  
  47
  
  
  48
  
  
  49
  
  
  50
  
  
  51
  
  
  52
  
  
  53
  
  
  54
  
  
  55
  
  
  56
  
  
  57
  
  
  58
  
  
  59
  
  
  60
  
  
  61
  
  
  62
  
  
  63
  
  
  64
  
  
  65
  
  
  66
  
  
  67
  
  
  68
  
  
  69
  
  
  70
  
  
  71
  
  
  72
  
  
  73
  
  
  74
  
  
  75
  
  
  76
  
  
  77
  
  
  78
  
  
  79
  
  
  80
  
  
  81
  
  
  82
  
  
  83
  
  
  84
  
  
  85
  
  
  86
  
  
  87
  
  
  88
  
  
  89
  
  
  90
  
  
  
  
  
  php & lt; ! ?/* *
  
  
  ,*使用方法:
  
  
  ,* php - f mysql_diff.php ,yes ,,,,,,,,,,,dir ,,,,,,,,,,,,,,,,,,,,,,,10
  
  
  ,*,,,,,,,,,,,,,,,,,,,,,,,,是否计算条数,是否计算输出d5并保存到文件,合并数据的级别
  
  
  ,*
  
  
  ,*/如果(php_sapi_name () !=癱li”)
  
  
  {
  
  
  ,,,死(“请在CLI模式下运行”);
  
  
  }
  
  
  ,
  
  
  array_shift ($ argv);
  
  
  如果(空($ argv))
  
  
  {
  
  
  ,,,死(“letase包含一个信息”);
  
  
  }
  
  
  ,
  
  
  $ is_count=array_shift ($ argv);
  
  
  $ is_md5=空($ argv) ?假:array_shift ($ argv);
  
  
  $ conbine_num=空($ argv) ?1:intval中(array_shift ($ argv));
  
  
  如果(is_md5美元,,! is_dir (is_md5美元),,! mkdir (is_md5 777美元,真))
  
  
  {
  
  
  ,,,死(“错误信息:md5信息必须输入到文件”);
  
  
  }
  
  
  $ dbinfo=阵列(
  
  
  ,,,'主机'=比;“localhost”,
  
  
  ,,,“端口”=比;“3306”,
  
  
  ,,,“用户”=比;“根”,
  
  
  ,,,的pswd=比;“123456”,
  
  
  ,,,“字符集”=比;“use utf8”,
  
  
  ,,,“表”=比;阵列(
  
  
  ,,,,,,,“lagou.pos”,
  
  
  ,,,,,,,“lagou.pos_innodb”,
  
  
  ,,,),
  
  
  );
  
  
  ,//验证格式
  
  
  如果(!(链接=mysql_connect美元dbinfo['主机']。“:”。美元dbinfo(“港口”),美元dbinfo(“用户”),美元dbinfo [' pswd ']))
  
  
  {
  
  
  ,,,死(“连接到[{$主机}@{$港口}]失败! !”);
  
  
  }
  
  
  ,
  
  
  如果(!mysql_query(“名字{$ dbinfo[“字符集”]}数据表迁移数据一致性验证