Репликация удаленной базы данных MySQL в MS SQL Server 2008

10

Я хочу скопировать содержимое базы данных MySQL в базу данных MS SQL Server 2008.

Это возможно? Кто-нибудь может наметить шаги, необходимые для достижения этой цели?

Спасибо.

Джимми Коллинз
источник

Ответы:

9

Лично я бы использовал метод MS SQL, а не метод MySQL. Почему? Хорошо, что Windows имеет 32-битные и 64-битные драйверы MySQL ODBC, готовые к работе, и настройка связанного сервера тривиальна. У меня есть много серверов MySQL, связанных с MS SQL. Кроме того, подключение к MS SQL из Linux / Unix не всегда хорошо, и вы обычно не можете использовать все функции. FreeTDS имеет ограничения; Вы можете ударить их раньше, чем позже, так почему бы просто не пропустить это. Все это предполагает, что вы используете MySQL на * nix. Если нет, то он становится немного ближе к 50/50, но я бы все же выбрал вытягивание из MS SQL, поскольку это звучит так, как будто это не «живая» база данных, поэтому нагрузка на нее для любого ETL или обработки более идеальна. Решение GoldenGate звучит интересно, но я уверен, что это не бесплатно.

Учитывая, что я настроил подобный сценарий с репликацией баз данных MySQL и Oracle на MS SQL, я приведу несколько советов, которые лучше всего сработали для меня:

  1. Если вы можете, приложите все усилия, чтобы определить, каким образом вы можете обеспечить внесение только дельта-изменений. Команды слияния могут помочь с этим. Усечение таблицы и последующая вставка всего этого снова приводит к раздуванию журнала, использованию пропускной способности сети и, как правило, просто трате времени.
  2. При работе с большим количеством данных обязательно разбивайте транзакции, чтобы не требовался массивный файл журнала. Используйте явные коммиты или контрольные точки, когда вы достигли шага, который, как вы знаете, вам не нужно будет откатывать.
  3. Если база данных MSSQL предназначена только для отчетов, то ETL работает там, чтобы не влиять на сервер MySQL. Используйте промежуточную базу данных или схему + файловую группу, чтобы упростить задачу.
  4. Разбейте импорт данных на этапы. Это облегчает повторный запуск импорта в случае его сбоя и / или устранения неполадок. Подход «все или ничего» быстро раздражает.
  5. По возможности используйте переменные, чтобы помочь удаленной базе данных с планами запросов и использованием индекса. Также обратите внимание на то, в какой степени изоляции транзакций вы находитесь на хост-компьютере, и какое влияние окажут запросы «репликации». Вы не хотите блокировать писателей на живых БД, если вы просто извлекаете данные для отчетов или использования в песочнице.

Надеюсь, что советы помогут!

AndrewSQL
источник
4

Тот же вопрос был адресован StackOverflow здесь: Репликация из MySQL в MSSQL .

Кажется, что есть некоторые обходные пути, но не очень простое решение.

Я считаю, что вам определенно следует попробовать создать пакет служб SSIS для импорта необходимых данных из базы данных MySQL в базу данных MSSQL. SSIS позволяет импортировать данные из разных источников. Тогда вы сможете планировать пакет, используя планировщик задач Windows или задания sql.

Мэриан
источник
3

Если под репликацией вы подразумеваете доставку журналов или что-то в этом роде, я считаю, что вам не повезло. Однако вы, безусловно, можете настроить базу данных MySQL в качестве связанного сервера и развернуть собственную схему репликации. Проще всего делать периодические снимки всех таблиц, используя операторы усечения и вставки. Добавьте сложность в соответствии с вашими требованиями.

Ларри Смитмиер
источник
Я имею в виду, я хочу, чтобы запланированная задача запускалась и копировала все содержимое из msqldb на базу данных sql server 2008 раз в неделю или около того - возможно ли это?
Джимми Коллинз
1
Помните, что усечение и извлечение всех данных за каждый раз может быть очень медленным в зависимости от объема данных, задержки в сети и т. Д. Это определенно не тот путь, если у вас есть небольшие или медленные сетевые соединения между двумя базами данных. Я всегда стараюсь изобрести метод, который позволит мне вытащить дельты.
AndrewSQL
1
Я согласен, дельты - это путь. Я не знаю достаточно MySQL, чтобы общаться с триггерами и грязными битами строк, но я уверен, что что-то можно настроить. На стороне SQL Server планирование задания является простым.
Ларри Смитмиер
3

Вы можете использовать GoldenGate для MySQL и MS SQL, чтобы сделать это. Вы просто установили бы продукт GoldenGate с каждой стороны, а затем приступили к гомогенной репликации.

Кроме того, для репликации «моментального снимка» можно использовать сценарий Python (или аналогичный), чтобы просто подключиться к обоим источникам данных (используя UnixODBC и FreeTDS для подключения к MS SQL), выполнить цикл по таблицам, выполняемым SELECTна одной стороне для каждой строки. INSERTс другой. Так как MSSQL имеет транзакции и является вашей целью, вы можете запустить транзакцию, DELETEвсе из всех таблиц, сделать копию, а затем, COMMITи это будет отображаться мгновенно, если речь идет о подключенных пользователях к цели, несоответствий не будет (если они не существуют). на источнике конечно).

Gaius
источник
Я не знал, что это то, что вы могли бы сделать с GoldenDate. Я должен буду прочитать больше об этом; Спасибо, что поделился!
AndrewSQL
Теперь Oracle предоставляет поддержку для этого продукта. Oracle приобрел GoldenGate. Сейчас этот продукт находится под оракулом.