En Perl, el soporte para MySQL está proporcionado a través de la
interfaz cliente DBI
/DBD
. La
interfaz requiere Perl Versión 5.6.0 o posterior. La misma
no funciona en una versión anterior de Perl.
Para poder utilizar transacciones con Perl DBI, se necesita tener
DBD::mysql
versión 1.2216 o posterior. Se
recomienda la versión 2.9003 o posterior.
Si se está utilizando la biblioteca cliente de MySQL 4.1, se
deberá emplear DBD::mysql
2.9003 o posterior.
El soporte en Perl no se incluye con las distribuciones MySQL. Los módulos necesarios pueden descargarse de http://search.cpan.org para Unix, o utilizando el programa ActiveState ppm en Windows. Las siguientes secciones describen cómo hacerlo.
Se debe isntalar el soporte en Perl para MySQL si se desean ejecutar los scripts de de pruebas de rendimiento de MySQL. Consulte Sección 7.1.4, “El paquete de pruebas de rendimiento (benchmarks) de MySQL”.
El soporte MySQL en Perl requiere que se hayan instalado el soporte de programación de cliente MySQL (bibliotecas y ficheros de cabecera). La mayoría de los métodos de instalación crean los ficheros necesarios. Sin embargo, si se instaló MySQL en Linux a partir de ficheros RPM, hay que asegurarse de haber instalado el RPM de desarrollo. Los programas cliente están en el RPM de cliente, pero el soporte a la programación se encuentra en el RPM de desarrollo.
Si se desea instalar el soporte en Perl, los ficheros que se necesitarán pueden obtenerse desde la CPAN (Comprehensive Perl Archive Network, Red Integral de Archivo Perl) en http://search.cpan.org.
La forma más sencilla de instalar módulos Perl en Unix es
utilizar el módulo CPAN
. Por ejemplo:
shell> perl -MCPAN -e shell cpan> install DBI cpan> install DBD::mysql
La instalación de DBD::mysql
ejecuta una
cantidad de pruebas. Estas pruebas intentan conectarse al
servidor MySQL local, empleando el nombre de usuario y
contraseña por defecto. (El nombre de usuario por defecto es el
nombre usado para iniciar sesión en Unix, y en Windows es
ODBC
. La contraseña por defecto es
“sin contraseña.”). Si no se puede conectar al
servidor con estos valores (por ejemplo si la cuenta tiene una
contraseña establecida), la prueba falla. Se puede emplear
force install DBD::mysql
para ignorar las
pruebas fallidas.
DBI
requiere el módulo
Data::Dumper
. Es posible que esté instalado,
de lo contrario, se debería instalar antes que
DBI
.
Otra posibilidad es descargar las distribuciones de módulos en forma de ficheros tar comprimidos y compilar los módulos manualmente. Por ejemplo, para descompactar y compilar una distribución DBI, debe usarse un procedimiento como el siguiente:
-
Descompactar la distribución en el directorio actual:
shell> gunzip < DBI-
VERSION
.tar.gz | tar xvf -Este comando crea un directorio llamado
DBI-
VERSION
. -
Hay que posicionarse en el directorio de más alto nivel de la distribución descompactada:
shell> cd DBI-
VERSION
-
Compilar la distribución:
shell> perl Makefile.PL shell> make shell> make test shell> make install
El comando make test es importante porque
verifica que el módulo esté funcionando. Nótese que, al
ejecutar este comando durante la instalación de
DBD::mysql
para ejercitar el código de la
interfaz, el servidor MySQL debe estar funcionando o de lo
contrario la prueba fallará.
Es buena idea recompilar y reinstalar la distribución de
DBD::mysql
cada vez que se instale un nuevo
release de MySQL, en particular si se advierte que todos los
scripts DBI
fallan luego de actualizar el
servidor.
Si no se tienen privilegios para instalar los módulos Perl en el directorio del sistema, o si se desean instalar los módulos en forma local, la siguiente referencia puede ser útil: http://servers.digitaldaze.com/extensions/perl/modules.html#modules
Ver bajo el título “Installing New Modules that Require Locally Installed Modules.”
En Windows, se debe hacer lo siguiente para instalar el módulo
DBD
con ActiveState Perl:
-
Debe obtenerse ActiveState Perl en http://www.activestate.com/Products/ActivePerl/ e instalarlo.
-
Abrir una ventana de consola (“ventana DOS”).
-
Si se necesita, establecer el valor de la variable
HTTP_proxy
. Por ejemplo:set HTTP_proxy=my.proxy.com:3128
-
Iniciar el programa PPM:
C:\> C:\perl\bin\ppm.pl
-
Si no se hizo antes, instalar
DBI
:ppm> install DBI
-
Si todo ha ido bien, ejecutar el siguiente comando:
install \ ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
Este procedimiento debería funcionar con ActiveState Perl Versión 5.6 o posterior.
Si no se puede hacer funcionar el procedimiento, se debería en su lugar instalar el driver MyODBC y conectarse al servidos MySQL a través de ODBC:
use DBI; $dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) || die "Got error $DBI::errstr when connecting to $dsn\n";
Si Perl anuncia que no puede encontrar el módulo
../mysql/mysql.so
, entonces el problema
probablemente sea que Perl no ha podido encontrar la biblioteca
compartida libmysqlclient.so
.
Esto debería poder solucionarse a través de alguno de los siguientes métodos:
-
Compilar la distribución
DBD::mysql
conperl Makefile.PL -static -config
en lugar deperl Makefile.PL
. -
Copiar
libmysqlclient.so
al directorio donde se ubican las demás bibliotecas compartidas (probablemente,/usr/lib
or/lib
). -
Modificar las opciones
-L
utilizadas para compilarDBD::mysql
para que reflejen la ubicación real delibmysqlclient.so
. -
En Linux, puede agregarse al fichero
/etc/ld.so.conf
la ruta donde se localizalibmysqlclient.so
. -
Agregar a la variable de entorno
LD_RUN_PATH
el directorio donde se ubicalibmysqlclient.so
. Algunos sistemas utilizanLD_LIBRARY_PATH
en lugar deLD_RUN_PATH
.
Hay que notar que si hay otras bibliotecas que el enlazador no
puede hallar, se necesitarán modificar las opciones
-L
. Por ejemplo, si no se puede hallar
libc
porque está en el directorio
/lib
y el enlazador está especificando
-L/usr/lib
, hay que cambiar la opción
-L
para que sea -L/lib
o
agregar -L/lib
al comando de enlazado
existente.
Si se obtienen los siguientes errores de
DBD::mysql
, probablemente se está utilizando
gcc (o un binario antiguo compilado con
gcc):
/usr/bin/perl: can't resolve symbol '__moddi3' /usr/bin/perl: can't resolve symbol '__divdi3'
Agregar -L/usr/lib/gcc-lib/... -lgcc
al
comando de enlazado cuando se compila
mysql.so
(verificar la salida de
make para mysql.so
al
compilar el cliente Perl). La opción -L
debería especificar la ruta donde se localiza
libgcc.a
.
Otra causa de este problema es que Perl y MySQL no estén compilados (ambos) con gcc. En este caso, se puede resolver la desigualdad compilando a los dos con gcc.
Al ejecutar las pruebas, puede verse el siguiente error de
DBD::mysql
:.
t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.
Esto significa que se necesita incluir la biblioteca de
compresión -lz
en la línea de enlazado.
Puede hacerse cambiando la siguiente linea en el fichero
lib/DBD/mysql/Install.pm
.
Copiar libmysqlclient.so
al directorio
donde se ubican las otras bibliotecas compartidas
(probablemente, /usr/lib
or
/lib
).
Modificar las opciones -L
usadas para
compilar DBD::mysql
para que reflejen la
ubicación real de libmysqlclient.so
.
En Linux, puede agregarse al fichero
/etc/ld.so.conf
la ruta donde se localiza
libmysqlclient.so
.
Agregar a la variable de entorno LD_RUN_PATH
el directorio donde se ubica
libmysqlclient.so
. Algunos sistemas
utilizan LD_LIBRARY_PATH
en lugar de
LD_RUN_PATH
.
Hay que notar que si hay otras bibliotecas que el enlazador no
puede hallar, se necesitarán modificar las opciones
-L
. Por ejemplo, si no se puede hallar
libc
:
$sysliblist .= " -lm";
Cambiar la línea a:
$sysliblist .= " -lm -lz";
Despues de esto, debe ejecutarse make realclean y proceder con la instalación desde el principio.
Si se desea isntalar DBI en SCO, se tendrá que editar el
fichero Makefile
en
DBI-xxx
y en cada subdirectorio.
Notar que lo que sigue asume que se tiene gcc
2.95.2 o posterior:
OLD: NEW: CC = cc CC = gcc CCCDLFLAGS = -KPIC -W1,-Bexport CCCDLFLAGS = -fpic CCDLFLAGS = -wl,-Bexport CCDLFLAGS = LD = ld LD = gcc -G -fpic LDDLFLAGS = -G -L/usr/local/lib LDDLFLAGS = -L/usr/local/lib LDFLAGS = -belf -L/usr/local/lib LDFLAGS = -L/usr/local/lib LD = ld LD = gcc -G -fpic OPTIMISE = -Od OPTIMISE = -O1 OLD: CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include NEW: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
Estos cambios se necesitan porque el cargador dinámico
(dynaloader) de Perl no cargará los módulos
DBI
si fueron compilados con
icc o cc.
Si se desea utilizar el módulo Perl en un sistema que no posee
soporte para enlazado dinámico (como SCO), se deberá generar
una versión estática de Perl que incluya
DBI
y DBD::mysql
. La forma
en que esto funciona es: se genera una versión de Perl con el
código DBI
enlazado y se la instala por
encima del Perl actual. Luego se lo utiliza para compilar una
versión de Perl que adicionalmente tiene incluído el código
de DBD
, y se lo instala.
En SCO, se deberán configurar las siguientes variables de entorno:
LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
O bien:
LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:\ /usr/progressive/lib:/usr/skunk/lib MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:\ /usr/skunk/man:
En primer lugar hay que crear un Perl que incluya un módulo
DBI
enlazado estáticamente mediante la
ejecución de estos comandos en el directorio donde se ubica la
distribución de DBI
:
shell>perl Makefile.PL -static -config
shell>make
shell>make install
shell>make perl
Luego debe instalarse el nuevo Perl. La salida de make perl indica exactamente el comando make necesario para llevar a cabo la instalación. En SCO, este es make -f Makefile.aperl inst_perl MAP_TARGET=perl.
A continuación, emplear el recién creado Perl para crear otro
Perl que tmabién incluya un DBD::mysql
creado estáticamente, mediante la ejecución de estos comandos
en el directorio donde se ubica la distribución
DBD::mysql
:
shell>perl Makefile.PL -static -config
shell>make
shell>make install
shell>make perl
Finalmente, se debería instalar este nuevo Perl. De nuevo, la salida de make perl indicará el comando a emplear.