Как сравнить две большие базы данных с помощью утилит mysql - PullRequest
0 голосов
/ 30 мая 2018

У меня есть два сервера баз данных, которые реплицируются в процессе репликации Master на Master.По какой-то причине репликация остановилась.Теперь я хочу сравнить одну базу данных, пример на обоих серверах для согласованности данных.Но проблема в том, что база данных имеет очень большую таблицу.В таблице 60 миллионов строк.Размер данных mysql составляет около 10 ГБ.Я попытался использовать mysqldbcompare команду утилит MySQL.Этот инструмент работает очень хорошо при небольшом размере данных.Но в этом случае после часа, в конце концов, соединение прекращается утилитами MySQL.

Может кто-нибудь помочь мне в этой проблеме?Кто-нибудь анализировал большое количество данных MySQL и имеет какой-либо опыт?

Скажите, пожалуйста, лучший способ начать с.Какие инструменты я должен использовать и как это использовать, потому что мне нужно сделать это за очень короткое время.

1 Ответ

0 голосов
/ 30 мая 2018

Ниже скрипт должен решить вашу проблему сравнения.Его 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

Надеюсь, это решит вашу проблему.

...