Importar archivos CSV en tablas SQL

Dado que mi experiencia con Firebird ha sido bastante decepcionante (ver post anterior), he tenido que buscar maneras de pasar los datos desde Firebird hasta MySQ. Aunque en el pasado ya había utilizado la importación desde archivos .SQL que contenían sentencias INSERT, el proceso completo puede ser bastante tedioso, porque hay tipos de campos no soportados entre Firebird y MySQL, lo que implica que tenía que editar manualmente, en muchas ocasiones, los .SQL exportados desde Firebird.

Dado que de todas las tablas sólo precisaba de cuatro, y que de esos datos sólo precisaba algunos campos, preferí ahorrar recursos y exportar únicamente los datos que fuera a necesitar.

Continuar leyendo “Importar archivos CSV en tablas SQL”

Mi experiencia con Firebird: opinión amateur

Como ya comenté en el post anterior, me he visto obligado a utilizar Firebird como motor de base de datos relacional. Hasta hace unos pocos años, me era totalmente desconocida, ya que yo usaba exclusivamente MySQL, y para utilizar en aplicaciones web, sobre todo. MySQL nunca me había dado problemas, tiene una comunidad muy amplia y está soportado por casi cualquier sistema operativo y lenguaje de programación.

Continuar leyendo “Mi experiencia con Firebird: opinión amateur”

Firebird y Flamerobin en Debian Stretch

Me he visto obligado recientemente a trabajar con Firebird. Es un motor de base de datos relacional, como MySQL o MariaDB, vamos, pero aseguran que el rendimiento es más alto. Dado que lo utilizaré únicamente para poder extraer los datos que necesito para la tesis, no podré comprobar si su rendimiento es mayor o no. Lo que sí he comprobado es que es muy árido, sin interfaces sencilas, y muy exquisito con los los parámetros de conexión.

En las próximas líneas, no sólo comentaré los pasos para instalar tanto Firebird como Flamerobin, una interfaz gráfica para gestionar el servidor, sino que plantearé los problemas que he tenido para dejarlos plenamente funcionales. Espero que a alguien le sirva, o si yo mismo tengo que reinstalarlos, que me sirva como chuleta. Allá vamos.

La instalación

La instalación en Debian es trivial, ya sabemos:

sudo apt-get install flamerobin firebird3.0-server

Uno podría esperar, como pasa con MySQL o MariaDB, que el servidor se iniciara solo, que todo estuviese perfectamente funcional y que el acceso de administrador ya estuviera configurado. Pues no.

Usuario y contraseña

El siguiente paso es intentar conectar con la base de datos. La consola de SQL se invoca mediante el comando:

isql-fb
SQL> connect "localhost:/home/rafa/Documentos/historias.gbd" user 'SYSDBA' password 'masterkey';

Mientras instalamos el servidor Firebird, nos comenta que el usuario administrador es SYSDBA (el usuario por defecto) y que debemos suministrar una contraseña. En mi caso, porque estoy «heredando» una base de datos que tenía el usuario (SYSDBA) y la contraseña (masterkey) por defecto, decidí mantenerlos igual, así que puse masterkey de contraseña. Pero por una razón no bien explicada, este paso no se registra en la configuración de Firebird en Debian.

He intentado modificar o corregir este comportamiento de estas tres maneras:

Método 1

Edité el archivo de configuración /etc/firebird/3.0/SYSDBA.password y lo dejé así:

ISC_USER=sysdba
ISC_PASSWORD="masterkey"
#ISC_PASSWORD="3399ebea"

Método 2

Reconfiguré el paquete:

dpkg-reconfigure firebird3.0-server

Método 3

Intenté añadir el usuario y contraseña mediante el comando que trae Firebird:

gsec -add SYSDBA -pass masterkey

Realmente, lo que le pasa es que, como menciona Marcoci Dorin, el usuario administraodr y su contraseña se configuran a través de la base de datos de seguridad security.db, y que para añadir SYSDBA hay que hacer lo siguiente:

isql-fb -user sysdba security.db
 
SQL> create or alter user SYSDBA password 'masterkey';
SQL> commit;
SQL> quit;

Ahora reiniciamos el servidor:

sudo /etc/init.d/firebird3.0 force-reload

Acceso a los datos

En Windows, Firebird permite el acceso al archivo de datos allá donde éste se encuentre. En Debian GNU/Linux no es así, hemos de configurarlo. Hemos de editar el archivo firebird.conf y dejarlo así:

# DatabaseAccess = Restrict C:\DataBase
# DatabaseAccess = Restrict C:\DataBase;D:\Mirror
# DatabaseAccess = Restrict /db
# DatabaseAccess = Restrict /db;/mnt/mirrordb
# DatabaseAccess = Full
#
# UNCONTROLLED DATABASE ACCESS MAY COMPROMISE YOUR SYSTEM!
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# DATABASE LOCATIONS!
#
# Type: string (special format)
#
DatabaseAccess = Full

El propio archivo de configuración nos da ejemplos de cómo podemos configurar el acceso a los datos. En mi caso, he preferido tener el archivo de datos en el mismo sitio siempre, para poder exportarlo cuando acabe con él. Es importante tener en cuenta que el archivo tiene que tener los permisos de lectura-escritura apropiados. Para ahorrarme problemas, hice:

chmod 777 historias.gdb

En algunos sitios he leído también que hay que cambiar el propietario, o incluso añadir nuestro usuario al grupo firebird, aunque a mí no me ha hecho falta:

chown firebird:firebird historias.gdb
usermod -aG firebird rafa

Problemas de versiones

Finalmente, cuando ya pensaba que lo tenía apañado:

isql-fb
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "localhost:/home/rafa/Documentos/HISTORIAS.GDB" user 'SYSDBA' password 'masterkey';
Statement failed, SQLSTATE = 08004
unsupported on-disk structure for file /home/rafa/Documentos/historias.gdb; found 10.1, support 12.0
-IProvider::attachDatabase failed when loading mapping cache

Esto viene a significar que estoy utilizando una base de datos creada con Firebird 1.5, pero estoy intentado conectar con el motro 3.0. En otras based de datos, esto no supondría problemas, pero en Firebird sí.

En el blog FirebirdSQL se explica muy bien: Firebird utiliza un número interno llamado ODS (On Disk Structure) para saber con cual versión de Firebird fue creada una base de datos. Cada versión del Firebird tiene un número único de ODS. Si no coincide la ODS de una base de datos con la versión del servidor del Firebird, entonces no podremos conectarnos a esa base de datos.

Lo que debemos hacer es crear una versión transportable del archivo original, aunque eso supone volver a la máquina que tiene instalada la versión Firebird 2.5 para hacer una copia de seguridad transportable:

gbak -b -t -user SYSDBA -password masterkey historias.gdb historias.fbk

Y luego volver a la máquina con la versión 3.0:

gbak -r -p 8192 -v -user sysdba -password masterkey historias.fbk historias.fdb

Así que el achivo de datos definitivo es historias.fdb, ya formateada de manera correcta para Firebird 3.0:

isql-fb
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect "localhost:/home/rafa/Documentos/historias.fdb" user 'SYSDBA' password 'masterkey';
Database: "localhost:/home/rafa/Documentos/historias.fdb", User: SYSDBA
SQL>

Y por fin conecta, aunque me ha dado muchos dolores de cabeza.

 

Conectar con una base de datos MySQL desde Python (I)

1480896754_pythonCuando programaba (aún lo hago) aplicaciones web, utlizaba las utilidades PHP para conectar con bases de datos y poder tener la interacción con los datos que me hiciera falta en ese momento. Nunca había pensado que MySQL se pudiera utilizar fuera de las aplicaciones web. Pues resulta que gracias a mi nueva tarea de doctorando, estoy obligado a extraer datos de un servidor MySQL, pero no desde el gestor PHPMyAdmin que uso habitualmente, sino desde consola. Ya he experimentado con la conexión vía bash, pero necesito algo más versátil, así que hoy pensé en Python.

Existen varias maneras de conectar Python con un servidor MySQL, como vemos en los comentarios de los usuarios de StackOverflow. Después de haber investigado algo más, y de probar yo mismo desde la consola con Python, me decantaré por las dos maneras más usuales: MySQLdb y mysql connector.

Continuar leyendo “Conectar con una base de datos MySQL desde Python (I)”

Mi Raspberry Pi 2 (II): media center con Kodi

1456084125_CassetteComo ya comenté en el anterior post, mi intención es utilizar mi Raspberry Pi en todos los proyecto que se me ocurran (y que pueda soportar el dispositivo). Aparte del de hacer copias de seguridad, está el de convertirlo en un media center mejor que el que ya tengo. Para ello recurrí a los múltiples manuales que hay en Internet, y encontré en Malagueños originales y libres que en lugar de optar por Raspbian o OpenELEC (es decir, una distro multipropósito versus una distro dirigida a tener un media center), podríamos tener nuestra Raspberry Pi funcionando con una distro Raspbian, y sobre ella instalar Kodi. Kodi es como se conoce al antiguo Xbox Media Center” o XBMC, un centro multimedia (media center) de entretenimiento multiplataforma bajo la licencia GNU/GPL.

Continuar leyendo “Mi Raspberry Pi 2 (II): media center con Kodi”

Mi Raspberry Pi 2 (I): configuración básica

1456084196_raspberryPor fin me ha llegado mi Raspberry Pi 2. Aunque la configuración y puesta en marcha se hace muy rápidamente (aproximadamente un tarde, y sin tener que buscar mucho: hay multitud de manuales, tutoriales y vídeos circulando por ahí), no quiero dejar pasar la oportunidad de escribir los pasos que me han llevado a dejarla a mi gusto. Supongo que en los próximos días ampliaré este tema y escribiré más posts acerca de ello, ya que tengo pensamiento de darle más usos a mi Raspberry Pi, aparte de ser el Media Center que siempre he querido tener.

Continuar leyendo “Mi Raspberry Pi 2 (I): configuración básica”

Un netbook como servidor (IV)

1454291621_12-lan-connected-512x512La configuración wake on lan del ASUS EeePC 701 es un poco complicada, pero no imposible. Me ha costado un poco, sobre todo porque la única web que encontré al respecto estaba en francés. A continuación pondré los pasos que seguí para poder activar esta característica en mi netbook/servidor.

Activar la opción Wake On LAN en la BIOS

El notebook ASUS EeePC 701 no tiene esta opción en la BIOS, con lo que aparentemente es imposible activarla. Sin embargo, está escondida, por lo que sí se puede activar. Al iniciar el netbook, pulsamos F2 para entrar en la BIOS

IMG_8698

 

Continuar leyendo “Un netbook como servidor (IV)”

Un netbook como servidor (III)

Continúo con las pequeñas incidencias con las que me encontré al instalar un servidor GNU/Debian en un netbook. En el anterior post mencionaba la instalación del servidor SSH y asignar una IP fija y nombre de host reconocible y que pudiera recordar. Pero me encontré con algún problema más:

  1. Apagar la pantalla TFT o LCD, ya que no la voy a utilizar
  2. Evitar que entre en suspensión al bajar la tapa del netbook
  3. Configurar Wake on LAN en el netbook

Continuar leyendo “Un netbook como servidor (III)”

Un netbook como servidor (II)

1454273012_cloud-laptopDurante el tiempo que estuve configurando mi viejo EeePC 701 como servidor casero, me encontré con varios problemas que tuvieron su solución. Esto contrasta con la variedad de soluciones y tutoriales que circulan para montar un servidor en una Raspberry Pi. Cada portátil, laptop o netbook tienen sus peculiaridades, no siempre bien documentadas, por lo que hay que echarle imaginación, inventiva y paciencia para buscar en Internet la solución a un determinado problema.

Los pasos básicos que di para llegar a convertirlo en servidor están en esta entrada de 2011, pero que no se diferencia en prácticamente nada a la instalación que hice en mi propio netbook.

Continuar leyendo “Un netbook como servidor (II)”

Un netbook como servidor (I)

1454269955_laptopLlevo tonteando con adquirir una Raspberry desde que leí un facilísimo tutorial sobre cómo montar un NAS (Network Attached Storage) en Debianhackers. Me parece muy interesante la idea de tener un servidor de muy pocos recursos en casa, permanentemente encendido para servir archivos, hacer copias de seguridad, o usar de servidor multimedia. Mis miedos se dirigían hacia el consumo de recursos y a tener un disco duro permamentemente encendido.

Ambos problemas tienen solución. Probablemente, una Raspberry Pi consume tanto como un router o un switch conectado a la red. Apenas hace ruido (no tiene ventiladores: menos ruido, menos consumo) y tiene una altísima conectividad (HDMI, USB, etc). Es la placa ideal para tener un servidor casero, por no hablar del mínimo espacio que ocupa.

Continuar leyendo “Un netbook como servidor (I)”