Heim > Backend-Entwicklung > PHP-Tutorial > Überprüfung der Datenkonsistenz bei der Datentabellenmigration

Überprüfung der Datenkonsistenz bei der Datentabellenmigration

WBOY
Freigeben: 2016-08-08 09:25:25
Original
1184 Leute haben es durchsucht

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:

  1. Wählen Sie einige wichtige Felder aus der Tabelle aus, z. B. A, B und C, und verwenden Sie diese Felder als Vergleichslineal.
  2. Exportieren Sie diese drei Felder jedes Datenelements aus der Originaltabelle in eine Datei f1.
  3. Übertragen Sie diese drei Felder jedes Datenelements aus der Zieltabelle in die Datei f2.
  4. Vergleichen Sie alle Daten in den Dateien f1 und f2, um festzustellen, ob sie identisch sind.
  5. Kommen Sie zum Schluss

Die obige Methode wurde gleichzeitig erdacht und ist nicht schlecht, aber ich denke, es gibt Raum für Verbesserungen:

  • Erstens kann es sein, dass nicht alle Felder in Nicht-Hauptfeldern unterschiedlich aussehen.
  • Der Gesamtwirkungsgrad ist relativ gering

Meine Gedanken sind folgende:

  1. Fügen Sie alle n Datenelemente in der Tabelle zusammen (verbinden Sie sie direkt, der Wert von n hängt von der Größe jedes Datenelements ab).
  2. Berechnen Sie die MD5-Werte dieser n Daten und fügen Sie sie zur Datei f1 hinzu, bis alle Datenwerte erhalten sind.
  3. Dasselbe gilt für die Zieltabelle, die in Datei f2 aufgezeichnet ist.
  4. Vergleichen Sie die MD5-Werte der Dateien f1 und f2. Wenn sie konsistent sind, ok, Erfolg.
  5. Wenn sie inkonsistent sind, vergleichen Sie jeden MD5-Wert von oben nach unten und ermitteln Sie den m-ten inkonsistenten Wert.
  6. Wir kommen zu dem Schluss, dass die inkonsistenten Daten zwischen m*(n-1) 1 ~ m*n liegen, und Sie können die Positionierung erneut wählen.

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";
	}
}
Nach dem Login kopieren

 

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.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage