jueves, enero 29, 2009

Migración de Windows a Linux (3ª Parte)

4.Migración de Access a OpenOffice.org 3.0 Base sobre MySQL.

Sin duda esta ha sido mi mayor lastre durante estos años para poder pasarme a Linux y el principal motivo de escribir este tutorial. Soy Veterinario y todo mi trabajo lo llevaba con una base de datos Access, donde tenia mis clientes, visitas y la utilizaba para el envio de cartas informativas a los clientes; para esto último utilizaba OpenOffice.org 2.4 que se conectaba a Access mediante ODBC.

Durante mucho tiempo mi solución en Linux era utilizar Access mediante CrossOver Office Pro.( programa basado en wine y shareware); comence con la version 3.0, donde Access ( de Microsoft Office XP Professional) era muy inestable cuando hacia busquedas; desde la version 4 el producto fue mejorando hasta la actual versión 7 donde no me ha dado ningun problema, tenia la facilidad de ser el mismo archivo mdb (extensión de los archivos de Access) tanto para Linux como Windows.
Solo comentar que respecto a Access, CrossOver solo cubre Access del Office XP del 2002; en ningún Office posterior cubre Access; por ejemplo en la última versión cubre el Office 2007 pero solo Word, Excel, Powerpoint, y algunas opciones de Outlook.

Lógicamente esta solución no me llenaba; mi idea era pasar la base de datos a un formato libre y después ver la forma de manejarla en Linux. Respecto a los formatos libres, hay varias opciones, yo me decidi por MySQL, por estar muy documentada, con mucha información en la red y como mi base de datos es pequeña no deberia tener problemas.

4.a) Paso de Access a MySQL.

Hay muchos programas que realizan este proceso, tanto en Windows como en Linux; yo me decidí por hacerlo en Windows, teniendo en cuenta que es un formato de ese S.O. me parecio lo mas indicado. Por tanto, lo primero es instalar MySQL en windows, solo hay que bajarse el instalador de Sun y seguir el proceso.

Pero no solo era tener MySQL, sino que después tenia que comunicarme con ella de una forma fácil. Mi amigo Antonio (un saludo) había realizado el paso de Access a MySQL creando los formularios y toda la estructura con Apache + PHP en una pagina web, con un gran resultado. Por tanto lo primero que hay que hacer es instalar MySQL + Apache +PHP + phpMyAdmin; este último programa es genial y me ha servido mucho en la migración como veremos después.
Tanto para windows como Linux hay paquetes que te instalan todos estos componentes de una vez; yo me decidi por AppServ, que podeis encontrar en su web:

http://www.appservnetwork.com/

Se instala muy facilmente, y solo hay que tener en cuenta que te pedira un password para el usuario root de MySQL, este root no tiene que ver nada con el administrador de Linux; es el administrador de MySQL y su contraseña no la podemos olvidar, pues nos hará falta en todo el proceso.

Con esto tenemos Windows preparado para pasar Access a MySQL; ahora nos hace falta un programa que haga el trabajo; he probado muchos, pero al final el que mejor resultado me ha dado fue Access to MySQL de Bullzip.com (gracias Antonio), es gratuito y lo podeis encontrar en su pagina web:

http://www.bullzip.com/download.php

Y el enlace directo es:

http://www.bullzip.com/download/a2m/msa2mys_3_0_0_108.zip

Su instalación no tiene problemas, después lo ejecutas (asegurate que el servidor MySQL se esta ejecutando -----> Ejecutas Services.msc y lo inicias si no esta activo); primero debes seleccionar la base de datos Access, el archivo mdb y después la conección a MySQL, donde no debes modificar nada, solo añadir la contraseña para root de MySQL y el programa hará la migración, en mi caso sin problemas, pero si lo hubiese el programa te da la información al finalizar.
De esta manera, el programa crea la nueva base de datos en esta carpeta:

C:\AppServ\mysql\data\movedb

En mi caso como tenia tres tablas, se crean nueve archivos, pues en MySQL con el nombre de cada tabla se crean tres archivos:

clientes.frm
clientes.myd -------->debe ser clientes.MYD
clientes.myi --------->debe ser clientes.MYI
db.opt
vacunaciones8.frm
vacunaciones8.MYD
vacunaciones8.MYI

vacunaciones9.frm
vacunaciones9.MYD
vacunaciones9.MYI


******
Mientras hago este tute, estoy cogiendo los datos desde Linux y curiosamente en los nombres de los archivos anteriores, se puede comprobar un error que me volvio loco; pues con estos archivos desde windows, con el servidor Apache funcionando, se puede ver que la migración había salido perfectamente, incluido un campo MEMO que en otras ocasiones me habia dado problemas, se habia trasladado a un campo TEXT y estaba completo. Para comprobarlo entramos al programa phpmyadmin mediante esta dirección en el navegador de internet:

http://localhost/phpmyadmin/index.php

Alli tenemos que colocar como usuario root y la contraseña de MySQL; de esta forma vemos las base de datos y observamos que todo esta bien. Pero cosas curiosa, cuando hice lo mismo en linux, comprobe que la tabla clientes no aparecia; primero pense en los permisos, pero claro todas tenian el mismo, no podia ser; y así llegamos a otra gran diferencia entre Windows y Linux; mientras que para Windows la diferencia entre mayusculas y minusculas no existe (da lo mismo PACO,que paCO,que paco); Linux es Case Sensitive, osea las mayusculas y minusculas son consideradas diferentes y hay estaba el problema, los archivos de MySQL deben tener la extención en mayusculas,por lo menos el MYD y el MYI; y en este caso, como podeis ver la tabla clientes los tenia en minusculas,por eso desde Linux no la podia ver :-p.
******

4.b) Paso de las bases de datos MySQL a Linux.

Primero hay que preparar Linux para pasar la nueva base de datos. Podemos utilizar un programa que lo haga todo como el AppServ de Windows, en Linux hay varios, el mas conocido es Xamp, que podeis encontrar en:

http://www.apachefriends.org/es/xampp.html

Pero claro, estamos en Linux,( creo que los servidores es lo suyo ;-I), y como buen Debianita, solo podia hacer una cosa,instalar las cosas de forma independiente, que por otro lado puedes controlar mejor, se actualizan por repositorios y en Debian es tan fácil como poner en un terminal como root esta orden:

# aptitude install apache2 libapache2-mod-php5 php5 mysql-common mysql-server-5.0 mysql-client-5.0 phpmyadmin libapache2-mod-auth-mysql

Como veis no todo en linux es dificil,jeje. Bueno, normalmente durante la instalacion te pedira la contraseña de root para MySQL, ya sabeis apuntadla que nos va a ser falta. Si no te la pidiese deberias poner en el terminal:

#mysql -u root -p

Te pedira la contraseña y listo ya puedes salir con la orden exit.

Ahora solo queda crear nuestra base de datos con phpmyadmin. Ejecutamos en el firefox o cualquier navegador web:

http://localhost/phpmyadmin/index.php

Nos pedira usuario: root y la contraseña que hemos puesto para MySQL y entramos a la pagina inicial de PhpMyAdmin, donde vemos muchas opciones que de momento no debemos tocas. Vamos a seleccionar la entrada “Bases de datos” y en la nueva pagina que se abre, buscamos abajo una entrada que pone “Crear una nueva base de datos”, le ponemos el nombre que queramos y le damos a “Crear”. No hay que hacer nada mas, nos salimos y ahora vamos a pasar todos los archivos que teniamos en:

C:\AppServ\mysql\data\movedb\

Para encontrarlos tenemos que tener en cuenta que en linux las particiones se nombran de otra manera, en mi caso la partición C: se llama hda1 (en un disco duro ide, si fuera sata se llama sda1) y tu la puedes montar en cualquier carpeta que crees ( en linux todo son archivos, desde las particiones, la grabadora etc....); en mi caso yo lo he montado en /mnt/xp/; quedando el path hacia los archivos de windows en:

/mnt/xp/AppServ/mysql/data/movedb

Copiamos todos los archivos de esa carpeta y nos vamos a:

/var/lib/mysql/cvtucan/; donde pegamos todos los archivos

Como veis en Linux los archivos de pagina web, mysql, logs del sistema, cola de la impresora, etc... se encuentran an la carpeta /var/, en nuestro caso concreto la base de datos que hemos creado con phpmyadmin se coloca en /var/lib/mysql/, como yo la he llamado cvtucan, ha creado una carpeta con ese nombre donde debemos pegar los archivos de Windows.

Ahora podemos volver a comprobar que estan las tablas correctamente colocadas en nuestra nueva base de datos “cvtucan” con phpmyadmin. Ya sabeis que Linux es Case Sensitive, tenedlo en cuenta.

Por último, solo queda para evitar problemas de permisos, que nuestro usuario forme parte del grupo que tiene permiso para manejar las tablas MySQL. Al instalarse el servidor mysql se ha creado un grupo llamado mysql; esto lo podemos ver en Gnome, en el menú “Sistema>Administracion>Usuarios y grupos”, al iniciarse nos pedira la contraseña de root, pues es una tarea que solo puede realizar él, y en la ventana que sale podemos ver los usuarios. Ademas tenemos la opción de “Gestionar grupos”, le damos clic y vemos todos los grupos que hay; vemos que hay un grupo con nuestro mismo nombre, pero el que debemos seleccionar es el grupo mysql y le damos al botón que pone “Propiedades”, en el veremos los “Miembros del grupo”, donde debe aparecer nuestro nombre y el de root como minimo; en este caso marcamos nuestro nombre y le damos a “Aceptar” para que guarde los cambios. De esta manera somos parte del grupo mysql y podremos editar, modificar y suprimir las tablas que hemos transferido.



***Muy importante***
No esta de más asegurarnos que todos los archivos que hemos colocado en /var/lib/mysql/cvtucan/ sean propiedad del usuario y grupo mysql, y que tanto el usuario como el grupo(donde estamos nosotros) tengan permiso de Lectura, Escritura y Ejecucion. Esto se puede hacer facilmente, como ya he explicado, desde el navegador de archivos (Nautilus), seleccionando los archivos y con un clic derecho ver las propiedades.



4.c) Preparar OpenOffice.org.

Para esta parte se puede utilizar el Openoffice.org v.3.0, que aunque no esta en los repositorios de Debian Lenny, se puede descargar de su pagina web; o utilizar el OpenOffice.org v.2.4 donde también he comprobado que funciona todo lo que voy a explicar de forma correcta.

En mi caso, me apetecia probar la nueva version 3.0 asi que me la descargue desde OpenOffice.org:

http://es.openoffice.org/programa/index.html

Alli debemos coger la opción para Linux y en concreto el enlace Debs, pues es la forma de los paquetes que admiten las distribuciones Debian y todas las que estan basadas en ellas (como Ubuntu, Knoopix....), de esta manera se descarga un paquete comprimido,en mi caso:

Ooo_3.0.0_LinuxIntel_install_es_deb.tar.gz (puede que ahora haya cambiado de versión).

Antes de instalarlo es recomendable desinstalar todo sobre el OpenOffice 2.4, curiosamente el OpenOffice 3 se instala en el directorio /opt/ y podria convivir con el 2.4 que se encuentra en /usr/lib/openoffice; pero a la hora de utilizarlo me dio errores, por lo que primero debemos eliminar con Synaptic (gestor de paquetes para Debian en forma grafica) todo lo relacionado con la version 2.4.

Después debemos descomprimir el paquete tar.gz que nos hemos bajado, entramos en la carpeta OOO300_m9_native_packed-1_es.9358 y alli nos encontramos con una carpeta llamada DEBS. Lo mas comodo en este punto es llegar con un terminal a esa carpeta DEBS y ejecutar como root:

#dpkg -i *.deb

De esta manera ejecutamos todos los archivos .deb en una sola orden, pues el * es un comodín.

Ya solo queda integrarlo en el menú de Gnome o Kde, para ello entramos desde el mismo terminal a la carpeta desktop-integration que esta en la misma carpeta DEBS:

#cd desktop-integration/

Y allí instalamos el archivo deb que esta en su interior:

#dpkg -i openoffice.org3.0-debian-menus_3.0-9354_all.deb

De esta manera tenemos nuestra version 3 preparada para trabajar, aunque todavia nos falta algunos detalles:

1. Instalar Java. Para conectarnos a MySQL vamos a utilizar JDBC; que esta basada en Java; por tanto en Linux debe estar instalado Java.. Hay distribuciones como Ubuntu que la instalan directamente, pero en Debian debemos hacerlo desde Synaptic (en Gnome Sistema> Administracion> Gestor de paquetes Synaptic) o desde un terminal como root:

#aptitude install sun-java6-bin sun-java6-jre

Además debemos decirle a Debian que utilice esta maquina java por defecto, pues curiosamente hay otra predeterminada (java-gcj) que no nos interesa. Para ello debemos de ejecutar esta orden como root:

#update-alternatives --config java

Nos saldran las opciones que tenemos en el sitema. En mi caso:

Hay 3 alternativas que proveen `java'.

Selección Alternativa
-----------------------------------------------
1 /usr/bin/gij-4.3
*+ 2 /usr/lib/jvm/java-gcj/jre/bin/java
3 /usr/lib/jvm/java-6-sun/jre/bin/java

Pulse para mantener el valor por omisión [*] o pulse un número de selección:_

En este caso deberiamos poner 3 y darle a Intro. Si repites el comando veremos como el asterisco esta en al java correcto.

Selección Alternativa
-----------------------------------------------
1 /usr/bin/gij-4.3
+ 2 /usr/lib/jvm/java-gcj/jre/bin/java
* 3 /usr/lib/jvm/java-6-sun/jre/bin/java


2.Instalar el conector de Java para MySQL

Este conector no viene integrado en OpenOffice, hay que descargarlo e instalarlo. Para ello nos vamos a la pagina de MySQL:

http://dev.mysql.com/downloads/connector/j/5.1.html

En este caso nos descargamos la ultima versión, mysql-connector-java-5.1.7.tar.gz.
Lo descomprimos y veremos en su interior el archivo mysql-connector-java-5.1.7-bin.jar, que como vemos por la extensión .jar es un ejecutable de java.

Ahora queda integrarlo con el OpenOffice, para ello abrimos cualquiera de sus programas y nos vamos al menú “Herramientas>Opciones” y una vez nos salga la ventana de opciones nos vamos al menú "OpenOffice.org> Java", y nos saldra las “Opciones de Java” a su derecha:



Debe estar marcado la opción de “Usar un entorno de ejecucion de Java” y en el recuadro interior la maquina java de Sun que hemos instalado. Además en los botones de la derecha vemos “Class Path”, debemos dar clic allí y en ventana que nos salga, le daremos a elegir archivo y buscaremos el archivo .jar que hemos descomprimido:



Ahora solo queda aceptar y tenemos el OpenOffice preparado.

4.d) Crear la base de datos en OpenOffice.org Base.

Por fin acabamos, ya solo queda crear la base de datos en Base, para después poder empezar a crear formularios y consultas; que son las dos formas que yo utilizo normalmente para interactuar con MySQL.

Ejecutamos OO Base desde el menu de Gnome: “Aplicaciones>Oficina>OpenOffice.org 3.0 Base” y nos saldra un asistente para bases de datos:



Seleccionamos “Conectar con una base de datos existente” y en el menú desplegable que tenemos abajo seleccionamos “MySQL” y le damos a “Siguiente”.


Pasamos a “Configurar conexión de MySQL” donde seleccionamos “Conectar utilizando JDBC”, y le damos a “Siguiente”


Llegamos a la entrada “Configurar conexión de JDBC”, aquí debemos colocar el “Nombre de la base de datos” que hicimos con phpmyAdmin, en mi caso cvtucan, y en la “Dirección URL del servidor”, como es nuestra propia maquina colocamos localhost, respecto al “Número de puerto” el predeterminado nos sirve (3306), no hay que ponerlo y en la “Clase de controlador MySQL JDBC” también debe estar colocado,pues es lo que hicimos anteriormente con el conector, de todos modos por si no sale, el nombre que debe aparecer es “com.mysql.jdbc.Driver”. Le damos a Siguiente.

En el apartado “Configurar autenticacion del usuario” solo debemos indicar que necesitaremos contraseña para acceder a MySQL y por último pasamos a “Guardar y continuar” donde pondremos un nombre a la base de datos que hemos creado y le damos a Finalizar.
De esta manera hemos creado una base de datos de OpenOffice, que en mi caso se llama cvtucan.odb, que sera la encargada de comunicarse con MySQL y donde podemos crear formularios, consultas e incluso otras tablas.

4.e) Problemas

De momentos muy pocos, logicamente estuve un tiempo de transición preparandolo todo, hasta que vi que funcionaba y pude migrar mi trabajo totalmente a MySQL.


Por último comentar que con Base también se pueden crear bases de datos muy completas y para empezar puede ser muy interesante. Por si alguien le interesa he encontrado un gran tutorial sobre su manejo realizado por Álvaro E. Prieto Ramos:

http://tutorialopenofficebase.wordpress.com/

Un saludo
[Juan Jose]

3 comentarios:

ifanlo dijo...

¡Excelente guía!

Muchas felicidades, y gracias por la aportación.

Anónimo dijo...

Excelente articulo.

Algo me sigue fallando pues no consigo conectar con la base de datos remota de rafa mediante openoffice.

Por cierto... probando en local, las búsquedas usando php son muchísimo más rápidas que usando openoffice.

Animate y aprende php/mysql :))

P.D. Recuerdos de renato :P

TM3 dijo...

Esta interesante tu aporte, gracias.