sábado, 15 de octubre de 2011

MSSQL en Linux

Puede que parezca una tonteria, pero hacer que un linux se conecte a una base de datos hecha en MSSQL no es tan trivial. Algunos piensan que es descomentar una linea en el php.ini en la que se indica un dll. Aclararemos aqui que Linux NO usa dlls, eso es Windows. Y tampoco pueses instalar MSSQL en Linux (no se si con Wine se podria).

¿Entonces como haremos para usar MSSQL en Linux? Lo primero necesitamos tener un servidor con Windows con el MSSQL instalado, funcionando y con el acceso remoto activado. Luego, haremos que Linux se conecte a esa base de datos. Decia que no es tan trivial porque no es instalar un paquete con yum o con apt (puede que esté, no lo he buscado), pero lo que nunca te va a fallar (o si, nunca se sabe) es compilandolo de cero. El programa en cuestion es el freetds. Antes de bajarlo y compilarlo, necesitaremos saber qué versión a que version de MSSQL vamos a conectarnos además de apuntar la URL (o IP), el puerto y el nombre de la bbdd, ademas del usuario y contraseña, ya que lo necesitaremos pronto.

Empecemos, lo primero es descargarnos los paquetes para compilarlos, trabajaremosndesde la carpeta /opt. Tendremos que instalar primero el paquete unixODBC mediante repositorios.
# cd /opt
# wget http://www.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.91.tar.gz
# tar xzvf freetds-0.91.tar.gz
# cd freetds-0.91
# ./configure --with-tdsver=7.2 --prefix=/usr/local/freetds
# make
# make install
Hay que tener en cuenta y especial cuidado esta linea en el configure "--with-tdsver=7.2", ya que hay que indicar la versión de MSSQL que se usa*. Con esto ya tendremos instalado el freetds en /usr/local/freetds. Ahora toca configurarlo. Hay que añadir al archivo /usr/local/freetds/etc/freetds.conf el servidor de la base de datos a la que se quiere conectar. Ahora es cuando necesitamos los datos del otro servidor, hay que añadir unas lineas de este estilo:
[MSSQLSERVER]
host = server.domain.com
port = 1433
tds version = 7.2
En "host" pondremos el nombre FQDN del servidor o la IP, en "port" el puerto que tenga el servidor y el "tds version" la versión del MSSQL según la tabla que teneis en el enlace al final (*).

Con esto, ya deberíamos tenerlo todo listo para conectarnos, así que vamos a probarlo. Usaremos un programa que nos viene en el freetds llamado "tsql". En mi caso, está en la carpeta /usr/local/freetds/bin/, pero con un "locate tsql" puedes confirmar dónde está. Usaremos el servidor que he declarado antes para hacer el ejemplo, recuerda que tienes que cambiar los datos.
# /usr/local/freetds/bin/tsql -S MSSQLSERVER -U prueba -P p1r2u3e4b5a6
Donde "MSSQL" es el servidor que hemos declarado antes, "prueba" es el usuario de la base de datos y "p1r2u3e4b5a6" es la contraseña. Esta última no es necesario ponerla en la llamada, ya que nos la pide por promt (más seguro, no se queda guardada en el history). Si todo va bien, nos mostrará unos datos y nos mostrará "1>". A partir de ahora podemos hacer lo que necesitemos en el MSSQL, por ejemplo:
1>SELECT * FROM TABLA
2>GO
Eso nos debería mostrar el contenido de "TABLA".

¿Hemos acabado? Depende, esto así no tiene mucha utilidad. Lo siguiente que haremos será que el PHP pueda usar el MSSQL. Ahora toca recompilar el php, cuando hagamos el ./configure tenemos que añadirle --with-sybase=/usr/local/freetds.**

Si tenemos instalado DirectAdmin ya sabemos que hay que hacer todo usando sus scripts. Tenemos que editar el archivo /usr/local/directadmin/custombuild/configure/ap2/configure.php5 *** y añadir "--with mssql=/usr/local/freetds", añadiendo "\" a la linea anterior. Luego vamos a "/usr/local/directadmin/custombuild" y ejecutamos:
# ./build clean
# ./build update
# ./build php n
Eso nos recompilará el php de nuevo. Ya deberíamos tenerlo todo configurado para usar una base de datos en MSSQL en nuestro servidor Linux. Si se necesita más información, hay que consultar la web de freetds.

Como esto es una cosa que estamos haciendo en el trabajo entre varios, si surge algún cambio a la hora de hacer las pruebas, actualizaré el post con la nueva configuración, pero esto por ahora nos está funcionando.

¡Hasta la próxima!

* Consultarlo aqui: http://www.freetds.org/userguide/choosingtdsprotocol.htm
** Más info: http://www.freetds.org/userguide/php.htm
*** Usando apache2 y php5, si no, consultar en internet dónde estan los archivos de configuración.

No hay comentarios:

Publicar un comentario