Exportar Bases de Datos de Access (MDB) a MySQL (I)

por | 20 febrero 2009
En algún momento de nuestras precarias vidas, decidimos que las obsoletas BB.DD de Access que andan rodando por los discos duros se convierten en un peligro, todo el mundo puede abrirlas, editarlas, y guardarlas, y cuando tenemos en nuestra tarea, convertirlas a MySQL, ¿habría algún método para hacerlo? Aquí te presentamos a cual mejor. 3 opciones para elegir.
02 Oct 2008 | Javier Orovengua
 Metodología básicaBásicamente se pueden dividir los métodos en directos e indirectos. Los métodos directos abren los archivos .DBF o .MDB, se conectan a la base de datos MySQL y transfieren sus contenidos a través de esa confección. Los métodos indirectos generan uno o más archivos temporales, en base a los que posteriormente se crearán las tablas de la base de datos y/o insertarán los registros.
En el caso de métodos indirectos, para cada archivo .dbf o tabla Access, estos son los pasos básicos que han de tomarse para migrar: Generar un archivo ASCII con las instrucciones SQL para la creación de la/s tablas/s. Exportar desde el archivo .MDB o archivos .DBF a un/unos archivo/s ASCII con: a) las instrucciones SQL para insertar datos en las tablas o b) los datos puros, delimitados por comas/tabulaciones, etc. Ejecutar el archivo con las instrucciones SQL de creación de tablas. Ejecutar el archivo ASCII con instrucciones SQL de inserción, o IMPORTAR archivo ASCII con datos puros usando el comando sql LOAD DATA INFILE. Entorno de trabajoPara los propósitos de este texto, vamos a definir algunos aspectos del ambiente donde trabajar:
  • Una estación con Windows y Linux instalados.
  • En la partición Linux, tener instalado un editor ASCII y la base de datos MySQL como mínimo, con el hostame configurado como localhost (bueh...) y con acceso a la partición windows, para este caso, tener acceso a c:/ en el directorio /mnt/windows).
  • En la partición Windows tener instalado Microsoft Access versión 97 como mínimo. Los archivos temporales de conversión se grabarán en el directorio c:/temp ( /mnt/windows/temp desde linux).
  • Una base de datos, en ambos formatos .DBF y .MDB, en este caso conteniendo los datos de una colección de libros. Los archivos residirán en el directorio c:data.
  • Para usar la herramienta dbtools, es necesario contar con DOS estaciones conectadas en red, una con Windows y DBTools instalados y otra con Linux y MySQL instalados.
  • Es recomendable acceder a la base de datos como un usuario común con privilegios bien acotados, o en todo caso tener disponible varios usuarios tipo dependiendo del trabajo (tipo dba para acceso total, común para entrada de datos o listados por ejemplo), pero NUNCA como root, porque este usuario tiene todos los privilegios en el sistema, incluso para dañarlo seriamente.
Conversión sin herramientas específicas (o con herramientas nativas, o lo que sea bah...)Hay buenas razones para no depender de herramientas especializadas de conversión (la más sencilla de las cuales es no disponer de ellas , sin olvidar el masoquismo), como por ejemplo la necesidad de adaptar las tablas a las características de la nueva base de datos. En mi caso en particular, siempre he tenido que generar la estructura con algún conversor y modificar o agregar sentencias sql para aprovechar alguna característica ausente o diferente en la base de datos original. Generar estructura con editor de textoEn última instancia he tenido que arreglarme creando las sentencias con cualquier editor ASCII:
CREATE DATABASE libros; CREATE TABLE autores( idautor INT NOT NULL, nombre CHAR (50), apellidos CHAR (50), PRIMARY KEY (idautor) ); CREATE TABLE autorlib( idautorlib INT NOT NULL, idautor INT, idlibro INT, PRIMARY KEY (idautorlibro) ); CREATE TABLE libros( idlibro INT NOT NULL, cargo CHAR (50), idtema INT, copyright SMALLINT, númisbn CHAR (50), páginas SMALLINT, PRIMARY KEY (idlibro) ); CREATE TABLE temas( idtema INT NOT NULL, desctema CHAR (50), PRIMARY KEY (idtema) );
Luego de guardarlo como libros.sql, genero la base de datos pasando libros.sql por la consola mysql:
mysql < /mnt/windows/temp/libros.sql
Con esto ya tenemos creada la base de datos LIBROS con sus tablas. Esta estructura nos servirá para convertir desde cualquier formato. Exportar tablas desde AccessDespués, volviendo a Windows, desde Access, por cada tabla se usa la opción "Archivo / Guardar como o exportar... / En un archivo o una base de datos externo", en la ventana de diálogo, en la opción "Guardar como tipo:" seleccionar "Archivos de texto" En la ventana "..." seleccionando el botón "Avanzado..." se pueden configurar estas opciones de exportación sin pasar por los sucesivos pasos del asistente:
Formato de archivo: Delimitado Delimitador de campo: , Cualificador de texto: " Orden de la fecha: DMA
Un poco confuso todo no? No es para tanto, probando con el programa todo se ve más claro. Luego de este paso deberíamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt Exportar tablas desde xBasePrácticamente cualquier dialecto xBase soporta el comando COPY TO (archivo) DELIMITED Para nuestro caso:
USE libros COPY TO libros.txt DELIMITED USE autores COPY TO autores.txt DELIMITED USE autorlib COPY TO autorlib.txt DELIMITED USE temas COPY TO temas.txt DELIMITED
Si es un entorno de comando se pueden ejecutar uno por uno, si es un lenguaje compilado como clipper, se graba en archivo .prg, se compila y se ejecuta. Otra vez, deberíamos tener cuatro archivos: autorlib.txt, autores.txt, libros.txt y temas.txt Importación de tablas a MySQLEn cualquiera de los dos casos, otra vez en linux, desde la consola MySQL se ejecuta el comando LOAD DATA INFILE por cada tabla
LOAD DATA INFILE '/mnt/windows/temp/libros.txt' INTO TABLE libros FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' '; LOAD DATA INFILE '/mnt/windows/temp/autores.txt' INTO TABLE autores FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' '; LOAD DATA INFILE '/mnt/windows/temp/autorlib.txt' INTO TABLE autorlib FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' '; LOAD DATA INFILE '/mnt/windows/temp/temas.txt' INTO TABLE temas FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' ';
Xbase a Mysql dbf2mysqlmysql.vision.cl/Downloads/Contrib/dbf2mysql-1.14.tar.gz[1] dbf2mysql es una pequeña y excelente aplicación que genera información SQL a partir de archivos xBase. He aquí una traducción de sus opciones:
-v muestra detalles de la conversión -vv muestra más detalles -vvv incluye informe de progreso -f traduce los nombres de campo a minúsculas -u traduce los textos de campos alfanuméricos a mayúsculas -l traduce los textos de campos alfanuméricos a minúsculas -n no se agrega 'NOT NULL' en las sentencias de creación de tabla -o exporta solo los campos listados -e archivo para conversión de caracteres -s substituye permite cambiar nombres de campos. Ej. -s NOMBRE=AYN,DIR=DIRECCION -i lista de campos a indexar (atte: genera UN indice por campo) -d base de datos donde se insertaran los datos -t tabla donde se insertarán los datos -c crea la tabla si no existe -cc crea la tabla, pero no inserta registros -p indica la clave primaria -h indica server donde conectarse -F los campos de caracteres se formatean como de longitud fija -q modo rápido inserta los registros a través de un archivo temporal usando la sentencia LOAD DATA INFILE -r quita espacios antes y después de datos alfanuméricos
Suponiendo que quiero hacer una conversión directa, solo necesito crear la base de datos en blanco, por ejemplo desde la consola mysql:
create database libros; quit
Y luego ejecutar dbf2mysql para crear las tablas e insertar los datos:
dbf2mysql -h localhost -d libros -t autores -c -f -p idautor /mnt/c/data/autores.dbf dbf2mysql -h localhost -d libros -t libros -c -f -p idlibro /mnt/c/data/libros.dbf dbf2mysql -h localhost -d libros -t temas -c -f -p idtema /mnt/c/data/temas.dbf dbf2mysql -h localhost -d libros -t autorlib -c -f -p idautorlib /mnt/c/data/autorlib.dbf
La principal desventaja de este método es que no se crean algunos atributos deseables, como es el caso de los campos autoincrementables. En este caso, lo más recomendable es crear nuestra propia estructura, otra vez volvemos al método de crear la estructura con un editor ASCII y generar la base de datos vacía con la consola MySQL como se explico aquí. Luego se insertan los datos con este conjunto modificado de comandos dbf2mysql:
dbf2mysql -h localhost -d libros -t autores -f /mnt/c/temp/autores.dbf dbf2mysql -h localhost -d libros -t libros -f /mnt/c/temp/libros.dbf dbf2mysql -h localhost -d libros -t temas -f /mnt/c/temp/temas.dbf dbf2mysql -h localhost -d libros -t autorlib -f /mnt/c/temp/autorlib.dbf
  http://www.laflecha.net/canales/softlibre/articulos/exportar-bases-de-datos-de-access-mdb-a-mysql-i/
Compartir... Email this to someoneShare on LinkedIn0Pin on Pinterest0Share on StumbleUpon0Share on Tumblr0Tweet about this on Twitter