Migración de bases de datos MySQL a PostgreSQL
Primer Parte
Segunda parte
Tercera Parte
Cuarta Parte
Hola a todos…
Nuevamente me encuentro aquí colocando a su disposición la quinta entrega de este gran artículo sobre la Suite de Software Libre basada en PostgreSQL de la comunidad de desarrolladores EnterpriseDB, en esta ocasión continuamos viendo las herramientas que proporciona esta suite de software libre, ahora es el turno de presentarles el uso de una nueva aplicación llamda Migration Wizard que como su nombre lo indica permite realizar migración limpias de una base de datos implementada en MySQL a otra base de datos implementada en PostgreSQL, si así como lo leen, esta es la aspirina para aliviar el dolor de cabeza que nos produce tomar una base de datos que implementada y gestionada por el servidor de BD MySQL, y ralizar su total y segura transformación a una base de datos implementada y gestionada por el servidor de BD PostgreSQL.
Existen en el mercado y sobre todos en la Web muchas soluciones ya desarrolladas que realizan la misma operación, algunos son complejos script hechos en lenguajes de programación poco comunes para la mayoría de personas que trabajan con Windows, hablo de perls, python, ruby, bash, entre otros, también es muy cierto que la gran mayoría de aplicativos amigables que realizan esta tarea son software privativo , que poseen costosas planes de adquisición y uso, pero nunca es tarde para el mundo de la informática, cuando uno no ve la salida solo tenemos que aferrarnos a la poca luz que queda y esperar a que la chispa se encienda ya sea de nuestra parte o por parte de la gigantesca comunidad de desarrolladores de software libre.
Migration Wizard está desarrollado con el popular lenguaje de programación Java, pose una simplísima interfaz de escritorio que nos va orientando por 7 cortos pasos durante la ejecución de la Migracion.
Lo primero es iniciar la aplicación desde el menú de grupo de herramientas que se instalaron con la suite EnterpriseDB.

Se inicia la aplicación y en su primera ventana nos indica que configuremos los datos de conexión al servidor MySQL, que en este caso es la fuente de BD de la cual deseamos realizar la migración, entre los datos necesarios se pidese encuentran:
- El Servidor (HOST) donde se encuentra ejecutando el servidor MySQL, en mi caso, dicho servidor se encuentra ejecutándose en la maquina local (Localhost), lo que quiere decir que el aplicativo Migration Wizard y MySQL se encuentran ejecutándose en el mismo computador.
- El puerto de red por el servidor MySQL se encuentra atendiendo conexiones de aplicaciones clientes, interesadas en que se les realice alguna operación relacionada con alguna base de datos, por defecto MySQL utiliza el puerto 3306 para establecer conexión con los clientes que le solicitan la ejecución de alguna operación.
- El nombre de la base de datos origen (la que se desea migrar a PostgreSQL), que en nuestro caso es la base de datos quejasyreclamos, base de datos que he creado previamente para realizar un artículo sobre desarrollo de aplicaciones de escritorio con Java, el cual esta caso listo.
- El Identificador del usuario del servidor MySQL que tiene privilegios sobre la base de datos origen (quejasyreclamos en nuestro caso), he colocado el usuario root que es el administrador que crea MySQL por defecto durante el proceso de intercalación, este usuario tiene privilegios sobre todas las bases de datos implementadas sobre MySQL
- La contraseña del usuario de la base de datos Origen, en mi caso no he colocado contraseña simplemente porque no le he colocado aun contraseña al usuario root

Si proporcionamos los datos correctamente, al pulsar el botón siguiente se mostrara la ventana del segundo paso, en este paso debemos indicarle a la aplicación cuales son los datos de conexión al servidor PostgreSQL destino (sobre el cual se va a realizar la migración de la base de datos origen), los datos que se deben proporcionar son:
- El Servidor (HOST) donde se encuentra ejecutando el servidor PostgreSQL, en mi caso, dicho servidor se encuentra ejecutándose en la maquina local (Localhost), lo que quiere decir que el aplicativo Migration Wizard, el servidor MySQL y el servidor PostgreSQL están ejecutándose en el mismo computador.
- El puerto de red por el servidor PostgreSQL se encuentra atendiendo conexiones de aplicaciones clientes, interesadas en que se les realice alguna operación relacionada con alguna base de datos, por defecto PostgreSQL utiliza el puerto 5432 para establecer conexión con los clientes que le solicitan la ejecución de alguna operación.
- El nombre de la base de datos destino (sobre la que se implementara el proceso de migración de la base de datos origen), que en nuestro caso es la base de datos quejasyreclamos.
- El Identificador del usuario del servidor PostgreSQL que tiene privilegios sobre la base de datos origen (quejasyreclamos en nuestro caso), he colocado el usuario postgres que es el administrador que crea PostgreSQL por defecto durante el proceso de intercalación, este usuario tiene privilegios sobre todas las bases de datos implementadas sobre PostgreSQL
- La contraseña del usuario de la base de datos Origen, a diferencia de MySQL, PostgreSQL exige que a cada usuario creado en su sistema, se le proporcione una contraseña desde el mismo momento de su creación

Al pulsar el botón siguiente Migration Wizard establece comunicación con el servidor PostgreSQL (si el host, puerto, usuario y contraseña son correctos) y le solicita que le permita utilizar la base de datos quejasyreclamos, el servidor PostgreSQL busca esta BD en su interior y al no encontrarla envía el siguiente mensaje de alerta, notificando que ha fallado al conextarse al la base de datos indicada por que simplemente aun no se ha creado o fue borrada, en mi caso, he hecho este paso a propósito para mostrarles el mensaje de notificación que envía PostgreSQL a cualquier cliente que desee utilizar una base de datos que no existe en sus esquemas.

El problema anterior se soluciona creando la base de datos quejasyreclamos como un esquema de base de datos más dentro del servidor PostgreSQL, existen básicamente dos formas de realizar esto, una de ellas es utilizando el cliente de consola postgres que se incluye con la instalación de PostgreSQL , pero al ser un cliente basado en comandos de consola (DOS de Windows o Bash de GNU/Linux) es muy engorrosa su operabilidad e interfaz de usuario, la otra forma consiste en utilizar cualquiera de los múltiples clientes gráficos (tipo escritorio o tipo Web) desarrollados para realizar operaciones de administración del servidor PostgreSQL u operaciones DML (Lenguaje de Manipulación de Datos, select, insert, update, delete, store_procedure y disparadores) o DDL (Lenguaje de Definición de Datos, create, alter, drop, grant, revoke, store_procedure y disparadores) sobre sus bases de datos, estas aplicaciones son mucho mas cómodas, intuitivas y fáciles de utilizar que la aplicación cliente de consola.
Al momento de seleccionar con cuál de los clientes disponibles para trabajar con PostgreSQL voy a utilizar, siempre me inclino por la opción que proporciona el proveedor o desarrollador del servidor de base de datos, como estamos hablando de PostgreSQL, su comunidad de desarrolladores ha creado casi desde sus inicios una aplicación llamada pgAdmin III, que según mi juicio y evaluación la mejor opción entre todas, las razones son muchas y creo que la gran mayoría de ellas no hay motivos para explicarlas.
Para utilizar pgAdmin III se debe seleccionar de la lista de herramientas que se instalan en el menú de PostgreSQL .

La interfaz grafica de grafica de esta aplicación es muy intuitiva, se puede configurar en casi todos los idiomas, solo es necesario tener conceptos fundamentales de bases de datos y pgAdmin III nos proporciona toda la funcionalidad necesaria para trabajar tanto con el motor de BD, que es nuestro caso es PostgreSQL, como con las propias bases de datos que este gestiona.
Un sistema completo de bases de datos está compuesto de tres partes:
- Las bases de datos: Conjunto de archivos denominados tablas, estructurados mediante un sistema estándar de almacenamiento que permite realizar operaciones de persisten (Insertar, Modificar, Eliminar y Consultar) de manera muy eficiente y estable, minimizadnos la redundancia e inconsistencia de la información que se guarda en dichos archivos. En este ejemplo la base de datos esta representada por quejasyreclamos
- El Motor de Bases de Datos: Sistema que define la reglas de trabajo, manipulación y seguridad de los archivos (tablas) y su información, ejecuta o materializa las operación que deseamos realizar en sobre las tablas, define los usuarios que pueden trabajar sobre las bases de datos y los privilegios que estos tiene n sobre ellas, entro otras cosas no menos importantes. En este ejemplo el Motor está representado por MySQL o PostgreDQL
- El Sistema Manejador de Bases de Datos: El SMBD por sus siglas en español, la cara frente al usuario (fontEnd), responsable de que mostros los usuarios podemos realizar operaciones sobre las bases de datos de forma transparente, intuitiva y segura, nos ofrece una capa avanzada de abstracción a toda la arquitectura tecnológica sobre la cual se fundamentan e implementan los sistemas de bases de datos. En este ejemplo el SMBD esta representando por pgAdmin
Existen algunos software que integran el Motor y el SMBD en un solo producto, por ejemplo Microsoft Access y Open Oficce Base, mientras que otros sistemas están basados una arquitectura llamada Cliente-Servidor, de esta manera que el Motor de Bases de Datos (juega el papel de servidor) pueda interactuar simultáneamente con un amplio numero SMBD (juegan el papel de cliente).

La primera operación que debemos realizar una vez iniciada la aplicación pgAdmin III, es establecer conexión con el Motor de Bases de Datos, normalmente para ellos necesitamos los datos de conexión al servidor PosgreSQL, tales como la IP o Nombre de Dominio del computador donde se está ejecutando el servidor, el nombre del Usuario que desea establecer conexión con el servidor y su contraseña, opcionalmente el nombre de la Base de Datos sobre la cual se desea trabajar.

Establecida la conexión con el servidor de bases de datos, lo que sigue es solicitar al servidor atreves del SMB que realice las operaciones que deseamos según el alcance de nuestro privilegios como usuario, lo que nos compete ahora mismo es crear una nueva base de datos sobre PostgreSQL llamada quejasyreclamos.

pgAdmin III nos muestra una interfaz en la que podemos especificar las características de esta nueva bases de datos, tales como el nombre, tipo de codificación, propietario (usuario administrador) , restricciones, numero de conexiones permitidas simultáneamente, donde el valor -1 es indefinido.

En la pestaña llamada SQL posemos ver el código fuente del lenguaje SQL (Lenguaje Estructurado de Consultas), el cual es el idioma en el que le debemos hablar al Motor de Bases de Datos.
1 2 3
| CREATE DATABASE quejasyreclamos
WITH ENCODING='UTF'
CONNECTION LIMIT=-1; |
Al guardar los cambios el SMBD construye la sentencia SQL adecuada según nuestras peticiones, se las envía al Motor de bases de datos para que este las ejecute y entregue una respuesta sobe el resultado de la operación, entonces el SMBD nos presenta esta información en un formato muy entendible.

Creada la base de datos destino, continuamos paso #3 del proceso de migración, en este paso se nos pide proporcionar el formato de las fechas y el tipo de migración que se desea realizar, que puede ser completa, solo la estructura de la bases de datos, o solo los datos de la BD.

En el paso #4 del asistente de migración nos muestra las bases de datos que se encuentran en Motor de bases de datos MySQL, permitiéndonos escoger cuales serán las bases de datos que migraremos a la base de datos destino quejasyreclamos de PostgreSQL, si elegimos más de una base de datos, el proceso de migración exportara todo el esquema de las bases de datos en un solo esquema perteneciente a la base de datos destino, en otras palabras, la base de datos destino estará formada por todos los elementos que estructuran a cada una de las bases de datos orígenes.


En el paso #5 a seleccionar la base de datos origen quejasyreclamos que es la que nos compete en este articulo, el asistente de migración nos muestra todos las tablas que conforman a esta base de datos, permitiéndonos seleccionar cuales de ellas serán las que harán parte de la migración

En el paso #6 podemos ver detalles puntuales del proceso de migración

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| Source DATABASE connectivity info...
conn =jdbc:mysql://localhost:3306/quejasyreclamos
user =root
password=******
Target DATABASE connectivity info...
conn =jdbc:edb://localhost:5432/quejasyreclamos
user =postgres
password=******
Importing mysql schema...
Creating Schema...quejasyreclamos
Migrating TABLES FOR Schema quejasyreclamos: 'personas','quejas','usuario'
Creating TABLES...
Creating TABLE: quejasyreclamos.personas
Creating TABLE: quejasyreclamos.quejas
Creating TABLE: quejasyreclamos.usuario
Created 3 TABLES.
Loading TABLE DATA IN 8 MB batches...
Loading TABLE: personas ...
Error Loading DATA INTO TABLE: personas: Value '0000-00-00' can NOT be represented AS java.sql.Date
Loading TABLE: quejas ...
TABLE DATA LOAD Summary: Total Time(s): 0.109 Total Rows: 0
Loading TABLE: usuario ...
TABLE DATA LOAD Summary: Total Time(s): 0.063 Total Rows: 0
Trying TO reload TABLE: personas through bulk inserts WITH a batch size of 1000
Error Loading DATA INTO TABLE: personas: NULL
DATA LOAD Summary: Total Time (sec): 0.172 Total Rows: 0 Total Size(MB): 0.0
Creating Constraint: PRIMARY
Creating Constraint: PRIMARY
Creating Constraint: PRIMARY
One OR more schema objects could NOT be imported during the migration process. Please review the migration output FOR more details. |
El paso #7 terminamos todo el proceso y podemos ver un mensaje de informado sobre servicio de mantenimiento o soporte del software.

Ahora para verificar si todo salió tal y como lo solicitamos, podemos volver al SMBD PgAdmin con el fin ver el esquema de la nueva bases de datos quejasyreclamos dentro del Motor PostgreSQL.

Aquí se puede apreciar que la base de datos destino quejasyreclamos de PostgreSQL pose toda la estructura de la base datos origen.

Bueno como siempre me despido deseándoles mucho tiempo para leer y vivir.
Artículos relacionados:
El mejor tutorial de MySQL y C++ en español http://mysql.conclase.net/
Una comunidad hispana de PostgreSQL http://www.postgresql.cl/
http://palomo.usach.cl/docshtml/node4.html
179 Visitas hoy