sql >> Database >  >> RDS >> Mysql

Hoe te migreren van MSSQL naar MySQL

Het migreren van propriëtaire engines naar open source-engines is een trend die in de branche groeit.

Databasemigratie moet echter niet lichtvaardig worden opgevat.

Laten we in deze blog zien wat er nodig is om van Microsoft SQL Server naar MySQL Server te gaan en hoe we dit moeten doen.

Laten we dus beginnen met te bekijken wat MS SQL is en wat MySQL is.

Microsoft SQL Server is een zeer populaire RDBMS met beperkende licenties en bescheiden eigendomskosten als de database van aanzienlijke omvang is of door een aanzienlijk aantal klanten wordt gebruikt. Het biedt een zeer gebruiksvriendelijke en gemakkelijk te leren interface, wat heeft geresulteerd in een groot aantal geïnstalleerde gebruikers. Net als andere RDBMS-software is MS SQL Server gebouwd op SQL, een gestandaardiseerde programmeertaal die databasebeheerders (DBA's) en andere IT-professionals gebruiken om databases te beheren en de gegevens die ze bevatten op te vragen. SQL Server is gekoppeld aan Transact-SQL (T-SQL), een implementatie van SQL van Microsoft die een reeks eigen programmeeruitbreidingen aan de standaardtaal toevoegt.

MySQL is een door Oracle ondersteund open source relationeel databasebeheersysteem op basis van SQL.

Het is de op één na populairste database ter wereld volgens de ranglijst van db-engines en waarschijnlijk de meest aanwezige database-backend ter wereld, aangezien het de meeste internetdiensten over de hele wereld beheert.

MySQL draait op vrijwel alle platforms, inclusief Linux, UNIX en Windows. Het is een belangrijk onderdeel van een open source enterprise-stack genaamd LAMP. De MySQL Enterprise-versie wordt geleverd met ondersteuning en extra functies voor beveiliging en hoge beschikbaarheid.

https://db-engines.com/en/ranking

De combinatie van kostenbesparingen, platformcompatibiliteit en functieset van MySQL maakt het echt aantrekkelijk, en veel organisaties migreren van MS SQL Server naar dit open-sourceplatform om van deze functies te profiteren.

Waarom migreren?

Meestal zijn de kosten de eerste reden om te migreren. SQL Server is een eigen database van Microsoft. Er is een gratis SQL Server-versie genaamd Express, maar deze heeft enkele beperkingen, zoals een databaselimiet van 10 GB, een beperkte hoeveelheid CPU, een beperkte hoeveelheid RAM en meer, dus waarschijnlijk moet u de licentie betalen om deze in productie te gebruiken. U kunt de prijzen hier bekijken.

Met MySQL kun je de community-editie gratis en zonder enige beperking gebruiken.

Een andere reden kan de ondersteuning van het besturingssysteem zijn. In tegenstelling tot MS SQL Server ondersteunt MySQL een breed scala aan besturingssystemen, waaronder Linux, Windows, Mac OS, Solaris en nog veel meer.

Wat betreft installatie en configuratie, MySQL installeert sneller, heeft een kleinere footprint terwijl het toch redelijk grote databases kan beheren, en heeft minder configuratieknoppen die moeten worden aangepast dan SQL Server.

Op het gebied van hoge beschikbaarheid heeft MySQL een aantal bewezen oplossingen, waaronder replicatie, SAN's en MySQL-cluster, die, afhankelijk van het scenario, gelijk of de beste zijn voor SQL Server.

De geweldige MySQL-gemeenschap biedt veel voordelen, waaronder een geweldig ontwikkelaar en DBA-netwerk van iedereen die samenwerkt om een ​​product van hoge kwaliteit en elkaars succes te garanderen.

Wat u moet weten

Het verplaatsen van gegevens en indexstructuren naar MySQL is doorgaans geen uitdagende taak, aangezien MySQL alle belangrijke gegevenstypen, tabelontwerpen en indexstructuren ondersteunt. Hoe dan ook, er zijn enkele objecten die voor een aantal uitdagingen zullen staan. Code-gerelateerde objecten, zoals opgeslagen procedures, kunnen niet-standaard ANSI-functies gebruiken, aangezien Transact-SQL er veel heeft.

De volgende items hebben dus speciale aandacht nodig bij het migreren:

  • Vergaderingen
  • Typen
  • DDL en op instructies gebaseerde triggers (MySQL heeft op rijen gebaseerde triggers)
  • Proprietary SQL Server-functieaanroepen
  • Bepaalde gevallen van dynamische T-SQL

Op dezelfde manier hebben synoniemen en beveiligingsrollen een tijdelijke oplossing nodig, omdat ze niet rechtstreeks naar MySQL kunnen worden gemigreerd.

Datatypes waarvoor conversie vereist is

De volgende kaart kan worden gebruikt om SQL Server-gegevenstypen die niet in 1-op-1-relatie worden toegewezen, te converteren naar MySQL:

SQL-server MySQL
IDENTITEIT AUTO_INCREMENT
NTEXT, NATIONALE TEKST TEKST KARAKTER SET UTF8
SMALLDATETIME DATETIME
GELD DECIMAAL(19,4)
KLEIN GELD DECIMAAL(10,4)
UNIEK IDENTIFICEERDER BINAIR (16)
SYSNAME CHAR(256)

Hoe het te doen

Er zijn veel tools om de migratie van MS SQL Server naar MySQL uit te voeren, zoals Amazon DMS of Data Integration (Kettle), maar in dit geval gebruiken we de MySQL Workbench Migration-tool.

Deze tool is ontworpen om DBA- en ontwikkelaarstijd te besparen door visueel, aanwijzen en klikken gebruiksgemak te bieden in alle fasen van het configureren en beheren van een complex migratieproces:

  • Databasemigraties:staat migraties toe van Microsoft SQL Server, Microsoft Access, PostgreSQL, Sybase ASE, Sybase SQL Anywhere, SQLite en meer.
  • Migratieprojecten beheren:hiermee kunnen migraties worden geconfigureerd, gekopieerd, bewerkt, uitgevoerd en gepland.
  • Bron- en doelselectie:hiermee kunnen gebruikers specifieke gegevensbronnen definiëren en brongegevens analyseren voorafgaand aan de migratie.
  • Objectmigratie:stelt gebruikers in staat objecten te selecteren om te migreren, waar nodig een bron toe te wijzen aan doeltoewijzingen, migratiescripts te bewerken en het doelschema te maken.
  • Versie-upgrades:met behulp van migratie kunnen gebruikers eenvoudig databases van oudere MySQL-versies naar de nieuwste verplaatsen.

Dus laten we het doen.

Voor deze taak gaan we ervan uit dat je:

  • SQL Server geïnstalleerd met uw database om te migreren:we gebruiken de Northwind-voorbeelddatabase via MS SQL Server Express 2014 Edition.
  • MySQL Server geïnstalleerd:we hebben MySQL 5.7.25 Community Edition via CentOS.
  • Gebruikers op beide databaseservers met privileges om de taak uit te voeren:We hebben de gebruiker “sa” op SQL Server en de gebruiker “migratie” met alle privileges op MySQL.
  • MySQL Workbench geïnstalleerd met toegang tot beide databaseservers:we gebruiken MySQL Workbench 6.3.

Om het migratieproces te starten, gaat u in het hoofdscherm van MySQL Workbench naar Database-> Migratiewizard.

We moeten de vereisten controleren om te bevestigen of we de taak kunnen voortzetten. Als alles er goed uitziet, kunnen we op Start migratie drukken.

In deze stap moeten we de informatie over de brondatabase verstrekken, in dit geval SQL Server.

We zullen onze bronparameter configureren zoals je kunt zien in de vorige afbeelding:

Database System: Microsoft SQL Server
Connection Method: ODBC (Native)
Driver: SQL Server
Server: localhost 
Username: sa

Wat betreft de serverparameter, we gebruiken MySQL Workbench op het SQL Server-knooppunt, maar waarschijnlijk gebruikt u het IP-adres / de hostnaam van uw databaseserver.

Nu kunnen we de verbinding controleren met behulp van de knop Verbinding testen.

Vervolgens moeten we de doelparameters toevoegen, in dit geval MySQL Server:

Connection Method: Standard (TCP/IP)
Hostname: 192.168.100.192
Port: 3306
Username: migration

En druk op Verbinding testen om de toegevoegde informatie te bevestigen.

In de volgende stap maakt MySQL Workbench verbinding met onze SQL Server om een ​​lijst met catalogi en schema's op te halen.

Nu kiezen we de Northwind-voorbeelddatabase uit de lijst.

We kunnen kiezen hoe de reverse-engineering schema's en het object in kaart moeten worden gebracht. We gebruiken de optie Catalog.Schema.Table -> Catalog.Table, dus in onze MySQL hebben we een database met de naam Northwind en de huidige tabellen die we in onze SQL Server-database hebben.

Als alles goed is gegaan, hebben we een lijst met objecten die moeten worden gemigreerd.

In dit geval hebben we Table Objects, View Objects en Routine Objects. We selecteren alleen de tabelobjecten omdat we voor de rest van het object de overeenkomstige MySQL-equivalente code handmatig moeten controleren.

In deze stap worden de objecten van de bron geconverteerd naar MySQL-compatibele objecten.

Als alles goed is gegaan, kunnen we doorgaan door te selecteren hoe we het gemigreerde schema in het doel willen maken. We gebruiken de standaardoptie "Schema maken in doel-RDBMS".

Laten we nu eens kijken naar het proces voor het maken van een schema.

In de volgende stap kunnen we het resultaat van elke scriptuitvoering controleren en kunnen we de nieuwe database controleren die op onze MySQL-server is gemaakt.

In onze MySQL-server hebben we:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| NORTHWND           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

Op dit punt hebben we de databasestructuur, maar we hebben de gegevens nog niet. Nu selecteren we hoe we de gegevens in de MySQL-server willen kopiëren. We gebruiken de optie "Online kopie van tabelgegevens om RDBMS te targeten".

En we kunnen het kopieerproces volgen vanuit de MySQL Workbench-applicatie.

Op dit moment hebben we alle informatie gemigreerd naar onze MySQL-server.

mysql> SELECT * FROM NORTHWND.Region;
+----------+-------------------+
| RegionID | RegionDescription |
+----------+-------------------+
|        1 | Eastern           |
|        2 | Western           |
|        3 | Northern          |
|        4 | Southern          |
+----------+-------------------+
4 rows in set (0.00 sec)

In de laatste stap kunnen we het migratierapport controleren en de taak voltooien.

De migratie is voltooid!

Testen

Vóór het migratieproces moet u de applicatie en de MySQL-database testen om het gedrag met de nieuwe engine te kennen.

Het zou ook nuttig moeten zijn om een ​​benchmarktest uit te voeren om de prestaties vóór de migratie te valideren.

Er zijn enkele tips om rekening mee te houden:

  • De test moet het aantal verwachte gebruikersverbindingen simuleren.
  • De verbonden sessies moeten taken uitvoeren zoals ze op een normale dag zouden plaatsvinden.
  • U moet uw database laden met testgegevens die ongeveer de grootte hebben die u in de echte wereld van uw database verwacht.

Voor deze testtaak kunt u de tool mysqlslap gebruiken. Het is een diagnostisch programma dat is ontworpen om de belasting van de client voor een MySQL-server te emuleren en om de timing van elke fase te rapporteren.

Conclusie

Zoals we in deze blog hebben besproken, zijn er verschillende redenen waarom een ​​bedrijf kan beslissen over een databasemigratie, van een propriëtaire engine naar een open source-engine. We hebben hier een populaire use-case gezien, een migratie van SQL Server naar MySQL, en hebben een stapsgewijs voorbeeld gemaakt door een algemeen bekende MySQL-tool te gebruiken, de MySQL Workbench. We hopen dat je dit artikel nuttig vindt.


  1. Hoe PCI-compliance voor MySQL en MariaDB te bereiken met ClusterControl - The Replay

  2. Een gids voor het implementeren van TimescaleDB met Docker

  3. jQuery UI Sorteerbaar en schrijf vervolgens de volgorde in een database

  4. Problemen oplossen met langlopende query's in MS SQL Server