Перенос только табличных данных из MSSQL в MySQL - PullRequest
0 голосов
/ 28 апреля 2019

Была поставлена ​​задача переместить базу данных с первым кодом из MSSQL в MySQL.После нескольких часов кунг-фу я смог получить основной проект asp.net для правильного развертывания всех миграций на mysql.Теперь мне нужно перенести данные в существующие таблицы mssql.Я видел сообщения, в которых упоминается MySQL Migration Toolkit, но, похоже, он старый.Также пытался сделать это с MySQL Workbench и DBLoad Data Loader, но безуспешно.

Структура таблицы довольно проста с инкрементными целочисленными ключами + обычная хрень с каркасом идентификации ядра asp.net (GUID).Просто нужно поддерживать это во время миграции.Каков наилучший способ переноса данных сейчас, когда в MySQL настроена структура таблиц?Будем очень благодарны за любые рекомендации!

Обновление: Еще некоторые подробности ... Я попытался выполнить прямой перенос базы данных из MSSQL в MySQL, используя MySQL WorkBench и DBLoader.Но сбой в таблицах удостоверений ASP.net большое время плюс другие проблемы..net core api сделал огромный дамп в нескольких местах, так что идея отсутствует.

С этого момента я перенес контроллер api в mysql, а затем мне пришлось исправить множество проблем, связанных с тем, что mssql fks слишкомlong и несколько других вопросов.

Так что на данный момент контроллер работает на MySQL.Мне просто нужно выгрузить все данные в MySQL и сохранить согласованность FK.

У меня было несколько мыслей, таких как экспорт CSV> импорт и / или попытка нескольких других вещей.Любые рекомендации?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вы можете использовать мастер экспорта данных, встроенный в SqlServer Management Studio (задача -> Экспорт данных) или используйте пакет SSIS для переноса данных.

0 голосов
/ 29 апреля 2019

Попробовал MySQL Workbench, DBLoad с DBLoad.com и т. Д. Для прямой миграции данных, и все они потерпели неудачу.

Так что в итоге мы нашли "решение" ...

Во-первых, я изменил проект ASP.net Core:

        //services.AddDbContext<ApplicationDbContext>(options =>
        //    options.UseSqlServer(
        //        Configuration.GetConnectionString("DefaultConnection")));

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseMySql(
                Configuration.GetConnectionString("DefaultConnection")));

Затем пошел в консоль диспетчера пакетов и запустил: update-database

Это создало все таблицы в MySQL.

Затем открыл Microsoft SQL Management Studio. Щелкните правой кнопкой мыши по базе данных Задачи> Создать сценарии. Сохранение всего в один файл с расширенными параметрами Схема и выбранные данные.

Затем открыл скрипт db в Notepad ++ и применил следующие правки, используя «Заменить с расширенным режимом поиска»:

GO -> blank
[dbo]. -> blank
[ -> blank
] -> blank
)\r\n -> );\r\n
\r\n' -> '
DateTime2 -> DATETIME

После внесения изменений в Notepad ++ я удалил все связанные с SET, ALTER и CREATE вещи из текстового файла, а затем скопировал все строки вставки в MySQL Workbench в порядке , чтобы убедиться, что внешние ключи были уже заполнены до того, как данные этой таблицы были вставлены. Слава богу, что не было хранимых процедур, чтобы иметь дело с Какая боль в туке!

Также отметим, что приложение размещено на Azure. Потратил пару часов, борясь с API, не подключаясь к базе данных. Сначала это было неочевидным, поскольку приложение было фальшивым, выдавая Почтальону ошибку 404 Когда я впервые попытался подключить контроллеры API к базе данных MySQL, я ввел строку подключения к базе данных в конфигурацию службы приложений Azure. Это не сработало вообще, хотя запуск приложения локально работал нормально. Закончилось поиском другого поста на этом сайте, где упоминалось, что нужно избавиться от строки подключения к базе данных из окна «Служба приложений»> «Конфигурация». После этого работал как чемпион. Все данные с автоматически увеличиваемыми ключами связаны без проблем.

Я очень доволен результатами и надеюсь, что мне больше никогда не придется проходить этот процесс! Всегда приятно знать, что приложение теперь работает в полностью открытой инфраструктуре. Надеюсь, это кому-нибудь поможет. Удачи.

...