Archive for the ‘MySQL’ Category

Multiples instalaciones de MySQL en tu PC

Tuesday, April 19th, 2005

En algunos casos resulta muy práctico disponer de varias instalaciones de MySQL en tu ordenador. Disponer de varias versiones nos permite comprobar y asegurar la compatibilidad de nuestros programas.

Disponer de varias instalaciones de MySQL en un mismo ordenador puede resultar de gran utilidad. Por ejemplo, si estas desarrollando cierta aplicación que hace uso de MySQL y quieres estar seguro de que funciona correctamente con todas las versiones de MySQL, lo único que puedes hacer para asegurarte de ello es probar tu aplicación con todas y cada una de las versiones de MySQL.

Es obvio que podrías instalar y posteriormente desinstalar tantas versiones de MySQL como quieras comprobar. Pero esto no resulta elegante ni práctico, ya que tendrías que repetir el proceso de instalaciones y desinstalaciones cada vez que quisieras comprobar la compatibilidad de una aplicación. Por lo tanto, la única solución viable es que varias versiones de MySQL coexistan en el mismo ordenador.

Antes de exponer posibles soluciones al problema, debemos tener en cuenta los distintos métodos de configurar el servidor MySQL. La primera de ellas consiste en indicar las variables en la línea de comandos al iniciar el servidor MySQL, los demás métodos se basan en los distintos ficheros de configuración que el servidor MySQL busca cada vez que se inicia.

Para poder ejecutar varios demonios de MySQL simultáneamente cada instalación debe tener ciertos parámetros de configuración especificas. Estos parámetros los especificaremos en lo ficheros de configuración my.cnf situados en el directorio de datos (donde MySQL guarda las bases de datos) de cada instalación de MySQL. Este fichero es uno de los que MySQL busca cada vez que se inicia.

En sistemas Unix, dos demonios no pueden compartir el mismo "PID file" por lo que hay que especificar la variable "pid-file" con un valor distinto en cada instalación.

Supongamos que el directorio base de datos de la instalación A de MySQL es /var/lib/mysql_A (esto se debe definir a la hora de compilar o instalar MySQL), por lo tant0, el fichero /var/lib/mysql_A/my.cnf debería incluir lo siguiente:

[mysqld]
pid-file=/var/run/mysql_408.pid

En caso de la instalación B, el fichero my.cnf, situado en /var/lib/mysql_B/my.cnf, incluiría lo siguiente:

[mysqld]
pid-file=/var/run/mysqld_32354.pid

En sistemas Unix, si usamos sockets como método de conexión local con el servidor MySQL, también tendremos que especificar un socket distinto para cada demonio.

La configuración de la instalación A debería ser similar a lo siguiente:

[mysqld]
pid-file=/var/run/mysqld-A.pid
socket=/var/lib/mysql-A/mysql.sock

Mientras que en la instalación B tendríamos

[mysqld]
pid-file=/var/run/mysqld-B.pid
socket=/var/lib/mysql-B/mysql.sock

En el caso de que usemos TCP (y así permitir la conexión desde hosts remotos) los demonios que se ejecuten simultáneamente tampoco pueden usar el mismo puerto, por lo que debemos especificar un puerto diferente para cada instalación. Para la primera instalación podríamos utilizar el puerto estándar usado por MySQL, el 3306, y para el segundo el puerto 3307.

Añadimos la variable "port" en el fichero de configuración de la instalación A e indicamos el uso del puerto 3306:

[mysqld]
pid-file=/var/run/mysql-A.pid
port=3306

Mientras que en la instalación B usamos el puerto 3307:

[mysqld]
pid-file=/var/run/mysql-B.pid
port=3307

Resulta obvio que dos instalaciones diferentes tampoco pueden usar los mismos ficheros de log, por lo que en caso de que queramos usarlos, tendremos que especificar distintos valores para las siguientes variables:

  • log=path
  • log-bin=path
  • log-update=path
  • log-isam=path
  • bdb-logdir=path

En definitiva, el fichero de configuración de las instalación A podría ser algo así:

[mysqld]
pid-file=/var/run/mysqld-A.pid
socket=/var/lib/mysql-A/mysql.sock
log=/var/lib/mysql-A/log
log-bin=/var/lib/mysql-A/log-bin
log-update=/var/lib/mysql-A/log-update
log-isam=/var/lib/mysql-A/log-isam
bdb-logdir=/var/lib/mysql-A/bdb

Mientras que el de la instalación B sería:

[mysqld]
pid-file=/var/run/mysqld-B.pid
socket=/var/lib/mysql-B/mysql.sock
log=/var/lib/mysql-B/log
log-bin=/var/lib/mysql-B/log-bin
log-update=/var/lib/mysql-B/log-update
log-isam=/var/lib/mysql-B/log-isam
bdb-logdir=/var/lib/mysql-B/bdb

Recordar, que a parte de los ficheros de configuración específicos de cada instalación, ambos servidores buscaran el fichero de configuración principal cada vez que se inician. El fichero de configuración general suele estar situado en /etc/my.cnf es sistemas Unix y en c:/WINDOWS/php.ini sistemas Windows. En este fichero debes incluir los parámetros de configuración que desees que afecten a todas las instalación MySQL del ordenador.

Bueno, por el momento esto es todo y suerte!

Como conectarse a MySQL usando Free Pascal

Tuesday, April 19th, 2005

Free Pascal es un excelente compilador Pascal compatible con Turbo Pascal y el más reciente Borland Delphi que se distribuye gratuitamente bajo licencia GPL.

Pascal es un excelente lenguaje que gracias a multitud de colaboradores que desarrollan "unidades", resulta valido para realizar infinidad de tareas, incluyendo la administración de bases de datos MySQL.

La versión actual de Free Pascal es distribuido con una gran variedad de Unidades, entre ellas "mysql", la cual nos permitirá conectarnos y administrar MySQL desde nuestros propios programas.

Antes de empezar a programar necesitas tener instalados Free Pascal y MySQL en tu sistema. Si trabajas en un entorno Windows, la instalación automática de Free Pascal configurará todo correctamente, simplemente tendrás que recordar que debes colocar la librería dinámica libmysql.dll en el mismo directorio que tus programas compilados. libmysql.dll viene con la versión Windows de MySQL y debería estar en el directorio "c:/mysql/lib" o equivalente. Si trabajas con Linux o Unix, tendrás que especificar la localización de las librerías de MySQL en el archivo mysql.pp previamente a compilar Free Pascal.

Suponiendo que lo tengas todo listo para empezar a programar es recomendable que leas la sección que explica el funcionamiento de la API C en el manual de MySQL. Al fin y al cabo, la unidad "mysql" de Pascal ha sido portada de la librería de C, por lo que su funcionamiento y las funciones disponibles son prácticamente idénticas.

A continuación un ejemplo de un programa que se conecta a la base de datos, imprime información de la conexión, selecciona una base de datos que hemos llamado "db_prueba" y muestra el número de registros existentes en la tabla "tb_prueba":

PROGRAM test;
USES mysql;
CONST
DataBase : Pchar = 'db_prueba';
Query : Pchar = 'select count(*) from tb_prueba';

VAR
sock : PMYSQL;
qmysql : TMYSQL;
recbuf : PMYSQL_RES;
rowbuf : TMYSQL_ROW;

BEGIN
{ ####- CONECTAR CON MYSQL ####- }
Write('Conectando con MySQL...');
sock := mysql_connect(PMysql(@qmysql),nil,nil,nil);
if sock=Nil then
begin
Writeln(stderr,'No es posible conectar con MySQL.');
Writeln(stderr,mysql_error(@qmysql));
halt(1);
end;
writeln('HECHO');

{ ####- MOSTRAR DATOS DE LA CONEXIÓN ####- }
writeln('Datos de la conexión:');
{$ifdef linux}
writeln ('Mysql_port : ',mysql_port);
writeln ('Mysql_unix_port : ',mysql_unix_port);
{$endif}
writeln ('Host info : ',mysql_get_host_info(sock));
writeln ('Server info : ',mysql_stat(sock));
writeln ('Client info : ',mysql_get_client_info);

{ ####- SELECCIONAR BASE DE DATOS ####- }
writeln('Seleccionando base de datos ',DataBase,'...');

if mysql_select_db(sock,DataBase) < 0 then
begin
writeln (stderr,'No es posible selecciona base de datos',Database);
writeln (stderr,mysql_error(sock));
halt (1);
end;

{ ####- EJECUTAR UN QUERY EN UNA TABLA ####- }
writeln('Ejecutando query: ',Query,'...');
if (mysql_query(sock,Query) < 0) then
begin
writeln(stderr,'Ejecución del query erronea.');
writeln(stderr,mysql_error(sock));
halt(1);
end;

{ ####- MOSTRAR NÚMERO DE REGISTROS ####- }
recbuf := mysql_store_result(sock);
if RecBuf=Nil then
begin
Writeln ('El query no ha devuelto nada.');
mysql_close(sock);
halt (1);
end;
rowbuf := mysql_fetch_row(recbuf);
writeln('La tabla contiene ',rowbuf[0],' registros.');
END.

Ahora que ya sabes todo lo que necesitas para poder crear un programa cliente que sirva para administrar una base de datos MySQL, podrías crear el "trastero" o "back office" de tu web con Pascal. Esto te permitiría administrar tu web cómodamente desde el escritorio de tu web… Aunque en realidad no parece que este sistema resulte más cómodo que una interfaz web… ;)