La migración de motores propietarios a motores de código abierto es una tendencia que está creciendo en la industria.
Sin embargo, la migración de la base de datos no es algo que deba tomarse a la ligera.
En este blog, veamos qué se necesita para pasar de Microsoft SQL Server a MySQL Server y cómo hacerlo.
Entonces, comencemos revisando qué es MS SQL y qué es MySQL.
Microsoft SQL Server es un RDBMS muy popular con licencias restrictivas y un costo de propiedad modesto si la base de datos es de un tamaño significativo o es utilizada por una cantidad significativa de clientes. Proporciona una interfaz muy fácil de usar y fácil de aprender, lo que ha resultado en una gran base de usuarios instalados. Al igual que otro software RDBMS, MS SQL Server se basa en SQL, un lenguaje de programación estandarizado que los administradores de bases de datos (DBA) y otros profesionales de TI utilizan para administrar bases de datos y consultar los datos que contienen. SQL Server está vinculado a Transact-SQL (T-SQL), una implementación de SQL de Microsoft que agrega un conjunto de extensiones de programación propietarias al lenguaje estándar.
MySQL es un sistema de gestión de base de datos relacional de código abierto respaldado por Oracle basado en SQL.
Es la segunda base de datos más popular del mundo según el ranking de db-engines y probablemente el backend de base de datos más presente en el planeta, ya que ejecuta la mayoría de los servicios de Internet en todo el mundo.
MySQL se ejecuta en prácticamente todas las plataformas, incluidas Linux, UNIX y Windows. Es un componente importante de una pila empresarial de código abierto llamada LAMP. La versión MySQL Enterprise viene con soporte y características adicionales para seguridad y alta disponibilidad.
https://db-engines.com/en/rankingLa combinación de ahorro de costos, compatibilidad de plataforma y conjunto de funciones de MySQL lo hace realmente atractivo, y muchas organizaciones están migrando de MS SQL Server a esta plataforma de código abierto para aprovechar estas funciones.
¿Por qué migrar?
Por lo general, la primera razón para migrar es el costo. SQL Server es una base de datos propietaria de Microsoft. Hay una versión gratuita de SQL Server llamada Express, pero tiene algunas limitaciones como 10 GB de límite de base de datos, una cantidad limitada de CPU, una cantidad limitada de RAM y más, por lo que probablemente deba pagar la licencia para usarla en producción. Puedes consultar los precios aquí.
Con MySQL, puede usar la edición comunitaria de forma gratuita y sin ninguna limitación.
Otra razón podría ser el soporte del sistema operativo. A diferencia de MS SQL Server, MySQL admite una amplia gama de sistemas operativos, incluidos Linux, Windows, Mac OS, Solaris y muchos más.
Con respecto a la instalación y la configuración, MySQL se instala más rápido, ocupa menos espacio y, al mismo tiempo, puede administrar bases de datos bastante grandes, y tiene menos perillas de configuración que necesitan ajustes que SQL Server.
En el área de alta disponibilidad, MySQL tiene una serie de soluciones comprobadas que incluyen replicación, SAN y MySQL Cluster, que igualan o mejoran a SQL Server según el escenario.
La gran comunidad de MySQL brinda muchos beneficios, incluida una gran red de desarrolladores y DBA de todos los que trabajan juntos para ayudar a garantizar un producto de alta calidad y el éxito de los demás.
Lo que debe saber
Mover datos y estructuras de índices a MySQL no suele ser una tarea desafiante, ya que MySQL admite todos los tipos de datos, diseños de tablas y estructuras de índices importantes. De todos modos, hay algunos objetos que enfrentarán algunos desafíos. Los objetos relacionados con el código, como los procedimientos almacenados, pueden usar funciones ANSI no estándar, ya que Transact-SQL tiene muchas de ellas.
Por lo tanto, los siguientes elementos necesitarán atención especial al migrar:
- Asambleas
- Tipos
- Disparadores DDL y basados en sentencias (MySQL tiene disparadores basados en filas)
- Llamadas a funciones de SQL Server propietarias
- Ciertos casos de T-SQL dinámico
Del mismo modo, los sinónimos y los roles de seguridad necesitarán una solución alternativa, ya que no se pueden migrar directamente a MySQL.
Tipos de datos que requieren conversión
El siguiente mapa se puede usar para convertir tipos de datos de SQL Server que no se asignan en una relación de 1 a 1 a MySQL:
Servidor SQL | MySQL |
---|---|
IDENTIDAD | AUTO_INCREMENTO |
NTEXT, TEXTO NACIONAL | CONJUNTO DE CARACTERES DE TEXTO UTF8 |
PEQUEÑA FECHA Y HORA | FECHA Y HORA |
DINERO | DECIMALES(19,4) |
PEQUEÑO DINERO | DECIMALES(10,4) |
IDENTIFICADOR ÚNICO | BINARIO(16) |
NOMBRE DEL SISTEMA | CARÁCTER(256) |
Cómo hacerlo
Hay muchas herramientas para realizar la migración de MS SQL Server a MySQL como Amazon DMS o Data Integration (Kettle), pero en este caso, usaremos la herramienta de migración de MySQL Workbench.
Esta herramienta está diseñada para ahorrar tiempo al DBA y al desarrollador al proporcionar una facilidad de uso visual, apuntar y hacer clic en todas las fases de configuración y administración de un proceso de migración complejo:
- Migraciones de bases de datos:permite migraciones desde Microsoft SQL Server, Microsoft Access, PostgreSQL, Sybase ASE, Sybase SQL Anywhere, SQLite y más.
- Gestionar proyectos de migración:permite configurar, copiar, editar, ejecutar y programar migraciones.
- Selección de origen y destino:permite a los usuarios definir orígenes de datos específicos y analizar los datos de origen antes de la migración.
- Migración de objetos:permite a los usuarios seleccionar objetos para migrar, asignar un origen a asignaciones de destino donde sea necesario, editar secuencias de comandos de migración y crear el esquema de destino.
- Actualizaciones de versión:mediante la migración, los usuarios pueden mover fácilmente bases de datos de versiones anteriores de MySQL a la última.
Entonces, hagámoslo.
Para esta tarea, asumimos que tiene:
- SQL Server instalado con su base de datos para migrar:Usaremos la base de datos de muestra Northwind sobre MS SQL Server Express 2014 Edition.
- Servidor MySQL instalado:Tenemos MySQL 5.7.25 Community Edition sobre CentOS.
- Usuarios en ambos servidores de bases de datos con privilegios para realizar la tarea:Tenemos el usuario “sa” en SQL Server y el usuario “migration” con todos los privilegios en MySQL.
- MySQL Workbench instalado con acceso a ambos servidores de bases de datos:Usaremos MySQL Workbench 6.3.
Para iniciar el proceso de migración, en la pantalla principal de MySQL Workbench, vaya a Base de datos-> Asistente de migración.
Deberíamos comprobar los requisitos previos para confirmar si podemos continuar con la tarea. Si todo se ve bien, podemos presionar Iniciar migración.
En este paso, debemos proporcionar la información sobre la base de datos de origen, en este caso, SQL Server.
Configuraremos nuestro parámetro fuente como puedes ver en la imagen anterior:
Database System: Microsoft SQL Server
Connection Method: ODBC (Native)
Driver: SQL Server
Server: localhost
Username: sa
Acerca del parámetro Servidor, estamos ejecutando MySQL Workbench en el nodo de SQL Server, pero probablemente usará la dirección IP/nombre de host de su servidor de base de datos.
Ahora, podemos verificar la conexión usando el botón Probar conexión.
Luego, debemos agregar los parámetros de destino, en este caso, MySQL Server:
Connection Method: Standard (TCP/IP)
Hostname: 192.168.100.192
Port: 3306
Username: migration
Y presione Probar conexión para confirmar la información agregada.
En el siguiente paso, MySQL Workbench se conectará a nuestro servidor SQL para obtener una lista de catálogos y esquemas.
Ahora, elegiremos la base de datos de ejemplo Northwind de la lista.
Podemos elegir cómo se deben mapear los esquemas y objetos de ingeniería inversa. Usaremos la opción Catalog.Schema.Table -> Catalog.Table, por lo que en nuestro MySQL, tendremos una base de datos llamada Northwind y las tablas actuales que tenemos en nuestra base de datos de SQL Server.
Si todo salió bien, tendremos una lista de objetos para migrar.
En este caso, tenemos Objetos de Tabla, Objetos de Vista y Objetos de Rutina. Solo seleccionaremos los objetos de la tabla porque para el resto del objeto debemos verificar manualmente el código equivalente de MySQL correspondiente.
En este paso, los objetos del origen se convierten en objetos compatibles con MySQL.
Si todo salió bien, podemos continuar seleccionando cómo queremos crear el esquema migrado en el destino. Usaremos la opción predeterminada "Crear esquema en RDBMS de destino".
Ahora, revisemos el proceso de creación del esquema.
En el siguiente paso, podemos verificar el resultado de la ejecución de cada script y podemos verificar la nueva base de datos creada en nuestro servidor MySQL.
En nuestro servidor MySQL, tenemos:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| NORTHWND |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
En este punto, tendremos la estructura de la base de datos, pero aún no tenemos los datos. Ahora, seleccionaremos cómo queremos copiar los datos en el servidor MySQL. Usaremos la opción "Copia en línea de los datos de la tabla para apuntar a RDBMS".
Y podemos monitorear el proceso de copia desde la aplicación MySQL Workbench.
En este punto, tenemos toda la información migrada a nuestro servidor MySQL.
mysql> SELECT * FROM NORTHWND.Region;
+----------+-------------------+
| RegionID | RegionDescription |
+----------+-------------------+
| 1 | Eastern |
| 2 | Western |
| 3 | Northern |
| 4 | Southern |
+----------+-------------------+
4 rows in set (0.00 sec)
En el último paso, podemos consultar el informe de migración y finalizar la tarea.
¡La migración está lista!
Pruebas
Antes del proceso de migración, debe probar la aplicación y la base de datos MySQL para conocer el comportamiento con el nuevo motor.
También debería ser útil realizar una prueba comparativa para validar el rendimiento antes de la migración.
Hay algunos consejos a tener en cuenta:
- La prueba debe simular la cantidad de conexiones de usuarios que se esperan.
- Las sesiones conectadas deben realizar tareas como lo harían durante un día normal.
- Debe cargar su base de datos con datos de prueba que tengan aproximadamente el tamaño que espera que tenga su base de datos en el mundo real.
Para esta tarea de prueba, puede utilizar la herramienta mysqlslap. Es un programa de diagnóstico diseñado para emular la carga del cliente para un servidor MySQL y para informar el tiempo de cada etapa.
Conclusión
Como hemos revisado en este blog, hay varias razones que pueden hacer que una empresa decida migrar una base de datos, pasando de un motor propietario a uno de código abierto. Hemos visto aquí un caso de uso popular, una migración de SQL Server a MySQL, e hicimos un ejemplo paso a paso utilizando una herramienta de MySQL ampliamente conocida, MySQL Workbench. Esperamos que este artículo le resulte útil.