Heim >Backend-Entwicklung >PHP-Tutorial >Überprüfung der Datenkonsistenz bei der Datentabellenmigration
Es ist immer noch sehr nützlich, bei der Migration der Datenbank einige notwendige Überprüfungen durchzuführen. Beispielsweise, ob die Anzahl der Datenelemente vor und nach der Migration konsistent ist und ob die Daten konsistent sind Es ist einfacher, die Anzahl der Elemente zu überprüfen, aber wenn überprüft wird, ob die Daten konsistent sind, muss natürlich jedes Datenelement fehlerfrei sein. Eine zufällige Stichprobenüberprüfung ist definitiv nicht möglich wird problematisch sein und die beiden Tabellen befinden sich nicht mehr auf demselben Server. Was ist zu diesem Zeitpunkt zu tun? Es gibt einen Weg:
Die obige Methode wurde gleichzeitig erdacht und ist nicht schlecht, aber ich denke, es gibt Raum für Verbesserungen:
Meine Gedanken sind folgende:
Der Vorteil der zweiten Methode besteht darin, dass die Ausgabedatei auf einen bestimmten Bereich reduziert wird, was den Vergleich erleichtert. Sie hat jedoch auch Nachteile. Sie kann den Speicherort verschiedener Daten nicht direkt über Schlüsselfelder lokalisieren Verfahren.
Das Folgende ist die spezifische Code-Implementierung des Effekts der zweiten Methode:
<?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"; } }
Das Obige stellt die Datenkonsistenzüberprüfung der Datentabellenmigration vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.