我找到了解決辦法,但不能從SQL直接完成,所以我決定寫如下腳本:
<?php
function tablesCheckSum($host, $database, $user, $pass) {
try {
$db = new PDO("mysql:host={$host}; dbname={$database}", $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$result = $db->query('SHOW TABLES;')->fetchAll();
// Construct tables
foreach($result as $value) {
$row = $db->query("CHECKSUM TABLE `" . $value[0] . "`")->fetch();
$tables[substr($row[0], strlen($database) + 1)] = $row[1];
}
} catch(PDOException $ex) {
print_r($ex->getMessage());
}
return $tables;
}
// Collecting all the
$db1 = tablesCheckSum('host1', 'db1', 'root', 'pass');
$db2 = tablesCheckSum('host2', 'db1', 'root', 'pass');
?>
<table>
<tr>
<td>Table Name</td>
<td>DB1 Checksum</td>
<td>DB2 Checksum</td>
<td>Matched?</td>
</tr>
<?php
foreach($db1 as $key => $value) {
?>
<tr>
<td><?php echo $key; ?></td>
<td><?php echo $value; ?></td>
<td><?php echo $db2[$key]; ?></td>
<td><?php echo ($value == $db2[$key])?'True':'False'; ?></td>
</tr>
<?php
}
?>
</table>
+1表示想法,但有可能固定大小的列可能有一個或兩個不同的值,並且表的大小仍然相同。 – invisal
我想知道是否有某種方式來生成兩個數據庫之間的校驗和值並檢查它是否相同。 – invisal
好主意。修改我的答案以獲得某種校驗和 –