У меня есть два сервера баз данных, которые реплицируются в процессе репликации Master to Master. По какой-то причине репликация прекратилась. Теперь я хочу сравнить ту же базу данных, ПРИМЕР на обоих серверах для согласованности данных. Но проблема в том, что в базе данных имеется очень большая таблица. Стол имеет 60 миллион рядов. Размер данных mysql составляет 10 ГБ. Я попытался использовать команду mysqldbcompare для утилит MySQL. Эти инструменты очень хорошо работают при низком размере данных. Но в этом случае после часа подключения в конечном итоге удаляются утилиты MySQL.
Может ли кто-нибудь помочь мне в этой проблеме? Кто-нибудь анализирует большое количество данных MySQL и имеет какой-либо опыт?
Скажите, пожалуйста, лучший способ начать. Какие инструменты следует использовать и как их использовать, потому что мне нужно сделать это за очень короткое время.
Ниже сценарий должен решить вашу проблему сравнения. Его 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
Надеюсь, это решит вашу проблему.