Реплікація віддаленої бази даних 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 db буде лише для звітування, виконайте ETL там, щоб не впливати на MySQL-сервер. Використовуйте базу даних або схему + групу файлів, щоб полегшити роботу.
  4. Розбийте імпорт даних на кроки. Це дозволяє легко запустити імпорт там, де не вдалося та / або усунути неполадки. Підхід все або нічого швидко стає дратує.
  5. Використовуйте змінні, де це можливо, щоб допомогти віддаленому DB з планами запитів та використанням індексу. Також зверніть увагу на те, яку ізоляцію транзакцій ви знаходитесь у вікні хоста та який вплив матимуть запити "реплікації". Ви не хочете блокувати авторів у прямому ефірному режимі, якщо ви просто перетягуєте дані для звітування або використання пісочної програми.

Сподіваюся, поради допоможуть!


4

Це ж питання було вирішено на StackOverflow тут: Реплікація з MySQL в MSSQL .

Здається, є певні шляхи вирішення, але не дуже просте рішення.

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


3

Якщо під тиражуванням ви маєте на увазі доставку журналу чи щось подібне, я вважаю, що вам не пощастило. Однак ви, безумовно, можете створити базу даних MySQL як пов’язаний сервер і прокатати власну схему реплікації. Найпростіше - просто робити періодичні знімки всіх таблиць, використовуючи скорочення і вставлення операторів. Додайте складність, як диктують ваші вимоги.


Я маю на увазі, що я хочу заплановане завдання запустити та скопіювати весь вміст з msqldb на sql-сервер 2008 db раз на тиждень чи так - це можливо?
Джиммі Коллінз

1
Зауважте, що обрізання та перетягування всіх даних за кожен раз може бути дуже повільним, залежно від того, скільки задіяних даних, затримки мережі тощо. Це точно не шлях, якщо у вас є малі або повільні мережеві зв’язки між двома базами даних. Я завжди намагаюся придумати метод, який дозволить мені тягнути дельти.
AndrewSQL

1
Я згоден, дельти - це шлях. Я не знаю достатньо MySQL, щоб говорити про тригери та брудні біти рядків, але я впевнений, що щось можна було б налаштувати. На стороні SQL Server планування завдання прямо вперед.
Ларрі Смітм'є

3

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

Крім того, для реплікації "знімка" ви можете використовувати сценарій Python (або подібний) для простого підключення до обох джерел даних (використовуючи UnixODBC і FreeTDS для підключення до MS SQL), проведіть цикл таблиць SELECTна одній стороні для кожного рядка INSERTз іншого. Оскільки MSSQL має транзакції і є вашою ціллю, ви можете розпочати транзакцію, DELETEвсе з усіх таблиць, зробіть копію, COMMITі тоді вона з’явиться миттєво, що стосується підключених користувачів у цілі, не буде невідповідностей (якщо такі не існують на джерело звичайно).


Я не знав, що це можна зробити з GoldenDate. Мені доведеться прочитати більше про це; Дякую, що поділились!
AndrewSQL

Тепер oracle забезпечує підтримку цього продукту. Oracle придбав GoldenGate. Зараз цей продукт знаходиться під продуктами Oracle.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.