0

我有两个数据库服务器,它们在 Master 到 Master 复制过程中被复制。由于某种原因,复制停止了。现在我想比较两个服务器上的同一个数据库,以实现数据一致性。但问题是数据库有一个非常大的表。该表有 60 百万行。mysql数据大小为10GB左右。我曾尝试使用MySQL 实用程序的mysqldbcompare命令。这个工具在低数据量下工作得很好。但在这种情况下,MySQL 实用程序最终会在一个小时后断开连接。

谁能帮我解决这个问题?有没有人分析过大量的 MySQL 数据并有经验?

请告诉我最好的开始方式。我应该使用什么工具以及如何使用它,因为我需要在非常短的时间内完成这项工作。

4

1 回答 1

0

下面的脚本应该可以解决您的比较问题。它的divide and conquer algorithm,我在这里申请。此代码适用于 Windows,稍作更改将适用于任何其他操作系统。

基本上,在这里您的数据将按表导出一个文件,然后将逐个文件进行比较,即逐个表。这将减少数据大小。

mysql -h master-database -u masteruser -pmasteruser_Password masterdatabase --skip-column-names --execute='SHOW TABLES;' > tables.tmp
echo "Start!"
 while read p; do
  echo "Exporting Master" $p
  mysqldump -h master-database -u masteruser -pmasteruser_Password master_database $p > master_$p.sql
  echo "Exporting Slave" $p
  mysqldump -h slave-database -u slaveuser -pslaveuser_Password slave_database $p > slave_$p.sql
  echo "Doing Diff"
  ##I'm less familiar with this, but I believe it should work.
  mysqldiff master_$p.sql slave_$p.sql > diff_$p.sql
 done <tables.tmp

 rm tables.tmp

我希望这能解决你的问题。

于 2018-05-30T14:00:37.833 回答