2.8. Instalación de MySQL usando una distribución de código fuente

MySQL 5.0

2.8. Instalación de MySQL usando una distribución de código fuente

Antes de proceder a una instalación de código fuente, se debería verificar si hay una distribución binaria disponible para la plataforma que se desea utilizar y si esta sirve adecuadamente al propósito del usuario. MySQL AB ha hecho grandes esfuerzos para asegurarse que las distribuciones binarias están realizadas con las mejores opciones posibles.

Para obtener una distribucion de código fuente de MySQL, Sección 2.1.3, “Cómo obtener MySQL”.

Las distribuciones de código fuente MySQL se proveen como ficheros tar comprimidos y tienen nombres con la forma .tar.gz, donde es un número del tipo .

Se requieren las siguientes herramientas para generar e instalar MySQL a partir del código fuente:

  • GNU para descomprimir la distribución.

  • Un tar para expandir la distribución. GNU tar funciona correctamente. Algunos sistemas operativos vienen con una versión preinstalada de tar que tiene algunos problemas. Por ejemplo, el tar incluido con Mac OS X y el de Sun presentan problemas con nombres de fichero largos. En Mac OS X puede utilizarse el también preinstalado programa gnutar. En otros sistemas que tengan un tar deficiente, se debería instalar antes GNU tar.

  • Un compilador ANSI C++. gcc 2.95.2 o posterior, egcs 1.0.2 o posterior o egcs 2.91.66, SGI C++, y SunPro ++ son algunos de los compiladores que funcionan correctamente. No se necesitará si se emplea gcc. gcc 2.7.x tiene un error que imposibilita compilar algunos ficheros C++ a pesar de que son correctos, como . Si solamente se dispone de gcc 2.7.x, será necesario actualizarlo para poder compilar MySQL. También se sabe que gcc 2.8.1 tiene problemas en algunas plataformas, de modo que debería evitarse su uso si hay un compilador más actual para la plataforma.

    Se recomienda gcc 2.95.2 para compilar MySQL 3.23.x.

  • Un buen programa make. GNU make siempre se recomienda y algunas veces es requerido. Si ocurriesen problemas, se aconseja intentar con GNU make 3.75 o posterior.

Si se dispone de una versión de gcc lo suficientemente actualizada como para soportar la opción , es muy importante que se utilice. De lo contrario, podría obtenerse un binario que presente errores fatales aleatorios. También se recomienda emplear y junto con . En caso de duda, debe procederse así:

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
       -fno-exceptions -fno-rtti" ./configure \
       --prefix=/usr/local/mysql --enable-assembler \
       --with-mysqld-ldflags=-all-static

En la mayoría de los sistemas, esto producirá un binario rápido y estable.

Si ocurren problemas, siempre debe emplearse mysqlbug para enviar consultas a la lista de correo MySQL. Aún si no se trata de un error, mysqlbug recoge información del sistema que será de utilidad para quienes intenten resolver el problema. Al no usar mysqlbug se reduce la probabilidad de obtener una solución. mysqlbug se puede hallar en el directorio luego de expandir la distribución. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”.

2.8.1. Panorámica de la instalación de código fuente

Los comandos básicos para instalar una distribución MySQL de código fuente son:

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-.tar.gz | tar -xvf -
shell> cd mysql-
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root  .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &

Si se comienza desde un RPM fuente, debe procederse así:

shell> rpmbuild --rebuild --clean MySQL-.src.rpm

Esto genera un binario RPM instalable. En versiones antiguas de RPM, podría ser necesario reemplazar el comando rpmbuild con rpm.

Nota: Este procedimiento no establece contraseñas para las cuentas de MySQL. Despues de concluirlo, hay que dirigirse a Sección 2.9, “Puesta en marcha y comprobación después de la instalación”, para la configuración y prueba posteriores a la instalación.

Esta es una versión más detallada del procedimiento para instalar una distribución de código fuente:

  1. Crear un usuario y un grupo para mysqld a fin de que pueda ejecutarse:

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    

    Estos comandos agregan el grupo y el usuario . La sintaxis para useradd y groupadd puede variar ligeramente entre las distintas versiones de Unix. También pueden llamarse adduser y addgroup.

    Si se quisiera llamar al usuario y al grupo con otro nombre en lugar de , habría que substituir por el nombre apropiado en los siguientes pasos.

  2. Posicionarse en el directorio en el cual se desea expandir la distribución.

  3. Obtener un fichero de distribución desde uno de los sitios listados en Sección 2.1.3, “Cómo obtener MySQL”.

  4. Expandir la distribución dentro del directorio actual:

    shell> gunzip < .tar.gz | tar xvf -
    

    Este comando creará un directorio llamado .

    Con GNU tar no se necesita invocar separadamente a . Se puede usar el siguiente comando alternativo, para descomprimir y extraer la distribución:

    shell> tar zxvf .tar.gz
    
  5. Posicionarse en el directorio de más alto nivel de la distribución expandida:

    shell> cd mysql-
    

    Actualmente debe configurarse y compilarse MySQL desde este directorio. No se puede compilar en un directorio diferente.

  6. Configurar el release y compilar todo:

    shell> ./configure --prefix=/usr/local/mysql
    shell> make
    

    Al ejecutar configure, es posible que se deseen especificar algunas opciones. Ejecutar ./configure --help para obtener la lista de las opciones disponibles. Sección 2.8.2, “Opciones típicas de configure trata acerca de alguans de las opciones más útiles.

    Si configure fallara y se enviase un mail a la lista de correo de MySQL para solicitar asistencia, deben incluirse algunas líneas del fichero que en apariencia sirvan para resolver el problema. También, incluir el último par de líneas emitidas por configure en la pantalla. Para enviar el informe de error debe utilizarse el script mysqlbug. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”.

    Si el compilador falla, consulte Sección 2.8.4, “Problemas en la compilación de MySQL”.

  7. Instalar la distribución:

    shell> make install
    

    Si se desea crear un fichero de opciones, debe utilizarse como plantilla uno de los presentes en el directorio . Por ejemplo:

    shell> cp support-files/my-medium.cnf /etc/my.cnf
    

    Podría ser necesario iniciar sesión como para ejecutar estos comandos.

    Si se configurará el soporte para tablas , habrá que editar el fichero , quitar el carácter al comienzo de las líneas de opciones que comienzan con , y modificar los valores según lo deseado. Consulte Sección 4.3.2, “Usar ficheros de opciones” y Sección 15.3, “Configuración de .

  8. Posicionarse en el directorio de instalación:

    shell> cd /usr/local/mysql
    
  9. Si no se ha instalado antes MySQL, se deben crear las tablas de permisos:

    shell> bin/mysql_install_db --user=mysql
    

    Si se ejecuta el comando como usuario , se debe emplear la opción tal como se muestra. El valor de la opción debe ser el nombre de la cuenta de usuario creada en el primer paso, para permitir que el servidor se ejecute. Si se ejecuta el comando habiendo iniciado sesión como este último usuario, se puede omitir la opción .

    Despues de crear o actualizar la tabla de permisos mediante mysql_install_db, habrá que reiniciar el servidor manualmente.

  10. Se debe cambiar el propietario de los programas binarios a y el propietario del directorio de datos al que se creó para ejecutar mysqld. Asumiendo que se está en el directorio de instalación (), el comando sería similar a este:

    shell> chown -R root  .
    shell> chown -R mysql var
    shell> chgrp -R mysql .
    

    El primer comando cambia el atributo de propietario de los ficheros y les asigna el usuario . El segundo cambia el atributo de propietario del directorio de datos y le asigna el usuario . El tercero cambia el atributo de grupo, asignándolo al grupo .

  11. Si se desea que MySQL se inicie automáticamente durante el arranque del ordenador, debe copiarse el fichero a la ubicación donde se encuentran los ficheros de inicio del sistema. Puede hallarse más información dentro del mismo script y en Sección 2.9.2.2, “Arrancar y parar MySQL automáticamente”.

  12. Pueden establecerse nuevas cuentas empleando el script bin/mysql_setpermission si se instalan los módulos de Perl y . Para más instrucciones consulte Sección 2.13, “Notas sobre la instalación de Perl”.

Luego de que todo se ha instalado, se debería inicializar y probar la distribución por medio del siguiente comando:

shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &

Si este comando fallara inmediatamente y emitiera el mensaje , se podrá encontrar más información en el fichero .err, localizado en el directorio de datos.

Hay más información acerca de mysqld_safe en Sección 5.1.3, “El script de arranque del servidor mysqld_safe.

Nota: Las cuentas que se hallan en las tablas de permisos de MySQL, en principio no están protegidas con contraseñas. Después de iniciar el servidor se deben establecer contraseñas para esas cuentas siguiendo las instrucciones en Sección 2.9, “Puesta en marcha y comprobación después de la instalación”.

2.8.2. Opciones típicas de configure

El script configure brinda un gran control sobre la configuración de una distribución de código fuente. Generalmente esto se hace por medio de las opciones que siguen a configure en la línea de comandos, aunque configure también se ve afectado por ciertas variables de entorno. Consulte Apéndice E, Variables de entorno. Para obtener una lista de las opciones aceptadas por configure, debe ejecutarse este comando:

shell> ./configure --help

A continuación se describen algunas de las opciones de configure más comunes:

  • Para compilar solamente las bibliotecas cliente y los programas cliente de MySQL, sin el servidor, debe emplearse la opción .

    shell> ./configure --without-server
    

    Si no se dispone de un compilador de C++, no se podrá compilar mysql (es el único programa cliente que necesita de C++). En este caso, se puede quitar de configure el código que comprueba la existencia del compilador C++ y luego ejecutar ./configure con la opción . El proceso de compilación igualmente intentará generar mysql, pero se puede ignorar cualquier advertencia acerca de . (Si make se detiene, debe intentarse con make -k, que continúa con el resto de la generación aún si ocurren errores).

  • Si se deseara generar la biblioteca MySQL incrustada (), debe utilizarse la opción .

  • Si no se desea que los archivos de registro (logs) y los directorios de bases de datos se ubiquen dentro de , se debe emplear un comando de configure similar a este:

    shell> ./configure --prefix=/usr/local/mysql
    shell> ./configure --prefix=/usr/local \
               --localstatedir=/usr/local/mysql/data
    

    El primer comando cambia el prefijo de instalación de modo que todo sea instalado en en lugar de . Els egundo comando conserva el prefijo de instalación por defecto, pero reemplaza la ubicación predeterminada de los directorios de datos (normalmente, ) y lo establece en . Después de haber compilado MySQL, se pueden cambiar estas opciones con ficheros de opciones. consulte Sección 4.3.2, “Usar ficheros de opciones”.

  • Si se está utilizando Unix y se desea que el socket MySQL se ubique en otro directorio que el preeterminado (normalmente en o ), debe emplearse un comando configure similar a este:

    shell> ./configure \
               --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
    

    El nombre de fichero para el socket debe ser una ruta absoluta. También se puede modificar la ubicación de posteriormente, con un fichero de opciones MySQL. Consulte Sección A.4.5, “Cómo proteger o cambiar el fichero socket de MySQL .

  • Se se desea compilar programas con enlazado estático (por ejemplo, para hacer una distribución binaria, incrementar la velocidad, o solucionar problemas que ocurren con algunas distribuciones de Red Hat Linux) debe ejecutarse configure de esta manera:

    shell> ./configure --with-client-ldflags=-all-static \
               --with-mysqld-ldflags=-all-static
    
  • Si se está usando gcc y no se han instalado o , se le puede indicar a configure que utilice gcc como compilador de C++:

    shell> CC=gcc CXX=gcc ./configure
    

    Cuando se emplea gcc como compilador de C++, este no intenta enlazar con o . Esta puede ser buena idea incluso si se dispone de estas bibliotecas, ya que algunas versiones de ellas causaron, en el pasado, problemas extraños a usuarios de MySQL.

    La siguiente lista presenta algunos compiladores y la configuración de variables de entorno comúnmente utilizada con cada uno.

    • gcc 2.7.2:

      CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
      

    • egcs 1.0.3a:

      CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors \
      -fno-exceptions -fno-rtti"
      

    • gcc 2.95.2:

      CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
      -felide-constructors -fno-exceptions -fno-rtti"
      

    • 2.90.29 o posterior:

      CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc \
      CXXFLAGS="-O3 -mpentiumpro -mstack-align-double \
      -felide-constructors -fno-exceptions -fno-rtti"
      

    En la mayoría de los casos, podrá obtenerse un binario MySQL razonablemente optimizado usando las opciones de la lista anterior, con el añadido de las siguientes opciones en la línea de configure:

    --prefix=/usr/local/mysql --enable-assembler \
    --with-mysqld-ldflags=-all-static
    

    En otras palabras, la línea completa de configure tendría el siguiente aspecto para todas las versiones recientes de gcc:

    CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \
    -felide-constructors -fno-exceptions -fno-rtti" ./configure \
    --prefix=/usr/local/mysql --enable-assembler \
    --with-mysqld-ldflags=-all-static
    

    Los binarios provistos en el sitio Web de MySQL en http://www.mysql.com/ están, en su totalidad, compilados con la máxima optimización y deberían ajustarse perfectamente a la mayoría de los usuarios. Consulte Sección 2.1.2.5, “Binarios de MySQL compilados por MySQL AB”. Existen algunas configuraciones que se pueden manipular para hacer un binario más rápido aún, pero se reservan para los usuarios avanzados. Consulte Sección 7.5.4, “Efectos de la compilación y del enlace en la velocidad de MySQL”.

    Si la generación falla y emite mensajes de error relativos a que el compilador o el enlazador no son capaces de crear la biblioteca compartida (donde '' es un número de versión), se puede resolver el problema pasándole la opción a configure. En este caso, configure no generará una biblioteca compartida .

  • Por defecto, MySQL emplea el conjunto de caracteres (ISO-8859-1). Para cambiar el conjunto de caracteres por defecto, se utiliza la opción :

    shell> ./configure --with-charset=
    

    puede ser cualquiera entre los siguientes: , , , , , , , , , , , , , , , , , , , , , , , or . Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

    En MySQL 5.0 también puede especificarse el tipo de comparación (collation) estándar. MySQL utiliza la comparación por defecto. Para cambiar esto se emplea la opción :

    shell> ./configure --with-collation=
    

    Para cambiar tanto el conjunto de caracteres como la forma de comparación, se usan ambas opciones y . La forma de comparación debe ser apropiada para el conjunto de caracteres. (Para determinar qué tipos están disponibles para cada conjunto de carcateres se usa la sentencia ).

    Si se desean convertir caracteres entre el servidor y el cliente, se debería revisar la sentencia . Consulte Sección 13.5.3, “Sintaxis de .

    Advertencia: si se cambia el conjunto de caracteres luego de haber creado tablas, se debe ejecutar myisamchk -r -q --set-character-set= en cada tabla. De otro modo, los índices podrían quedar incorrectamente ordenados. (Esto puede ocurrir si se instala MySQL, se crean algunas tablas, se reconfigura MySQL para usar un conjunto de caracteres diferente, y se lo reinstala).

    Con la opción de configure , pueden definirse conjuntos de caracteres adicionales para ser compilados dentro del servidor. debe ser uno de los siguientes:

    • una lista de nombres de conjuntos de caracteres separados por espacios

    • - para incluir todos los conjuntos de caracteres que no pueden ser cargados dinámicamente

    • - para incluir en los binarios todos los conjuntos de caracteres.

  • Para configurar MySQL con código de depuración, debe usarse la opción :

    shell> ./configure --with-debug
    

    Esto causa la inclusión de un asignador de memoria seguro que puede detectar algunos errores y brinda información de lo que está ocurriendo. Consulte Sección D.1, “Depurar un servidor MySQL”.

  • Si los programas cliente utilizan subprocesos (threads), también se deberá compilar una versión a prueba de subprocesos (thread-safe) de la biblioteca cliente de MySQL, con la opción de configure . Esto crea una biblioteca con la cual se podrán enlazar las aplicaciones que emplean subprocesos. Consulte Sección 24.3.15, “Cómo hacer un cliente multihilo”.

  • Ahora, a partir de MySQL 5.0.4, es posible generar a MySQL 5.0 con soporte para tablas grandes, utilizando la opción .

    Esta opción tiene por efecto que las variables utilizadas para llevar la cuenta de las filas de tablas se almacenen empleando un tipo en lugar de . Esto permite mantener tablas con hasta aproximadamente 1.844E+19 ((232)2) registros en vez de 232 (~4.295E+09). Antes se hacía necesario pasar al compilador el argumento en forma manual con el fin de habilitar la misma característica.

  • Las opciones que pertenezcan a un sistema en particular se hallan en la sección de este manual dedicada específicamente a ese sistema. Consulte Sección 2.12, “Notas específicas sobre sistemas operativos”.

2.8.3. Instalar desde el árbol de código fuente de desarrollo

Atención: Se debe leer esta sección únicamente si se está interesado en colaborar con MySQL AB en la prueba de código nuevo. Si solamente se desea obtener MySQL para ejecutarlo en un sistema, se debe emplear una distribución estándar (ya sea binaria o de código fuente).

Para obtener el directorio de desarrollo más reciente, se deben seguir estas instrucciones:

  1. Descargar el cliente gratuito BitKeeper desde http://www.bitmover.com/bk-client.shar.

  2. En Unix, instalar el cliente gratuito de esta manera:

    shell> sh bk-client.shar
    shell> cd bk_client-1.1
    shell> make all
    shell> PATH=$PWD:$PATH
    

    En Windows, instalarlo de esta manera:

    • Descargar e instalar Cygwin desde http://cygwin.com.

    • Asegurarse de que fue instalado bajo Cygwin. Esto se comprueba emitiendo . Si no está instalado, ejecutar el gestor de paquetes (package manager) de Cygwin, seleccionar , e instalarlo.

    • Bajo Cygwin, llevar a cabo estos pasos:

      shell> sh bk-client.shar
      shell> cd bk_client-1.1
      

      Luego, editar el fichero y modificar la línea que lee para que quede así:

      $(CC) $(CFLAGS) -o sfio sfio.c -lz
      

      Ejecutar el comando make y establecer la ruta:

      shell> make all
      shell> PATH=$PWD:$PATH
      
  3. Después que el cliente gratuito BitKeeper se haya instalado, dirigirse en primer lugar al directorio desde donde se desea trabajar y utilizar el siguiente comando para hacer una copia local de la rama de MySQL 5.0:

    shell> sfioball -r+ bk://mysql.bkbits.net/mysql-5.0 mysql-5.0
    

    Normalmente, no es necesario generar la documentación, dado que ya es suministrada en una variedad de formatos en http://dev.mysql.com/doc/. Los formatos que pueden descargarse allí (HTML, PDF, etc.) están generados diariamente, de modo que no se gana gran cosa generándola en base a los documentos en formato XML DocBook que hay en el directorio . Si de todos modos se deseara copiar el repositorio de documentación, debe emplearse el siguiente comando:

    shell> sfioball -r+ bk://mysql.bkbits.net/mysqldoc mysqldoc
    

    En el ejemplo anterior, el árbol de código fuente se establece dentro del subdirectorio dentro del

    Si se está detrás de un firewall y solamente pueden iniciarse conexiones HTTP, BitKeeper también puede usarse sobre HTTP.

    Si se necesita usar un servidor proxy, establecer la variable de entorno para apuntar al mismo:

    shell> export http_proxy="http://your.proxy.server:8080/"
    

    Reemplazar con cuando se copie un repositorio. Ejemplo:

    shell> sfioball -r+ http://mysql.bkbits.net/mysql-5.0 mysql-5.0
    

    La descarga inicial del árbol de código fuente puede llevar un tiempo, dependiendo de la velocidad de la conexión. Si es así, habrá que tener paciencia hasta completar la descarga.

  4. Para actualizar la copia local del repositorio MySQL 5.0, debe emplearse este comando:

    shell> update bk://mysql.bkbits.net/mysql-5.0
    
  5. Son necesarios: GNU make, autoconf 2.58 (o posterior), automake 1.8, libtool 1.5, y m4 para ejecutar la siguiente serie de comandos. Aún cuando muchos sistemas operativos vienen con su propia implementación de make, hay muchas posibilidades de que la compilación falle con extraños mensajes de error. Por consiguiente, es muy recomendable utilizar GNU make (a veces llamado gmake) en lugar de otros.

    Afortunadamente, un gran número de sistemas operativos se distribuyen con las herramientas GNU preinstaladas o proveen paquetes instalables de las mismas. En cualquier caso, pueden descargarse de las siguientes direcciones:

    Para configurar MySQL 5.0, también se necesitará GNU bison 1.75 o posterior. Las versiones antiguas de bison pueden producir este error:

    sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded
    

    Nota: El mensaje es: "Error fatal: se ha excedido el tamaño máximo para la tabla (32767)". El tamaño máximo de la tabla no está realmente excedido, el mensaje es consecuencia de errores en versiones antiguas de bison.

    El siguiente ejemplo muestra los comandos típicamente requeridos para configurar un árbol de código fuente. El primer comando es para posicionarse en el directorio de más alto nivel en el árbol, debe reemplazarse con el nombre de directorio apropiado.

    shell> cd mysql-5.0
    shell> bk -r edit
    shell> aclocal; autoheader
    shell> libtoolize --automake --force
    shell> automake --force --add-missing; autoconf
    shell> (cd innobase; aclocal; autoheader; autoconf; automake)
    shell> (cd bdb/dist; sh s_all)
    shell> ./configure  # Add your favorite options here
    shell> make
    

    O bien puede usarse BUILD/autorun.sh como un atajo para la siguiente secuencia de comandos:

    shell> aclocal; autoheader
    shell> libtoolize --automake --force
    shell> automake --force --add-missing; autoconf
    shell> (cd innobase; aclocal; autoheader; autoconf; automake)
    shell> (cd bdb/dist; sh s_all)
    

    La línea de comandos que cambia el directorio dentro de y se usa para configurar los motores de almacenamiento y Berkeley DB (). Pueden omitirse si no se necesita soporte para o .

    Si se obtienen algunos mensajes de error extraños durante este paso, debe verificarse si verdaderamente se encuentra instalado libtool.

    En el subdirectorio se encuentra una colección de scripts de configuración estándar utilizados por MySQL AB. Es posible que resulte más conveniente utilizar el script que el conjunto de comandos antes mencionado. Para compilar en una arquitectura diferente, debe modificarse el script eliminando los flags que son específicos de Pentium.

  6. Cuando la generación esté concluida, debe ejcutarse make install. Debe tenerse cuidado con esto al aplicarlo en un ordenador en producción; los comandos pueden sobreeescribir la instalación en uso. Si hay otra instalación de MySQL, se recomienda ejecutar ./configure con valores diferentes para las opciones , , y que aquellos empleados en el servidor en producción.

  7. Ahora se debe "jugar" con la nueva instalación e intentar que las nuevas características colapsen con algún error. Debe comenzarse por ejecutar make test. Consulte Sección 27.1.2, “El paquete de pruebas MySQL Test”.

  8. Si se ha llegado a la etapa de make y la distribución no se compila, debe informarse en la base de datos de errores en http://bugs.mysql.com/. Si se han instalado las últimas versiones de las herramientas GNU necesarias, y estas caen al intentar procesar los ficheros de configuración provistos, también debe informarse. Sin embargo, si se ejecuta y se obtiene un error o similar, no debe informarse. En su lugar, hay que asegurarse de que todas las herramientas necesarias estén instaladas y que la variable está correctamente establecida para que el shell las pueda localizar.

  9. Luego de la copia inicial del repositorio () para obtener el árbol de código fuente, se debe actualizar el repositorio () periódicamente para obtener novedades.

  10. Para examinar la historia de cambios del árbol, con todas las diferencias, puede verse el fichero localizado en el árbol de código fuente y observar las descripciones listadas. Para examinar una descripción changeset en particular, se utiliza el comando sfioball para extraer dos revisiones del árbol de código fuente, y luego se utiliza un comando externo diff para compararlas. En caso de hallar diferencias poco claras o tener preguntas acerca del código, no debe dudarse en enviar un correo electrónico a la lista de correo de MySQL. Consulte Sección 1.6.1.1, “Las listas de correo de MySQL”. Asimismo, si se considera que se tiene una mejor idea sobre cómo realizar algo, debe enviarse un mensaje de correo a la misma lista con la corrección.

  11. El cliente gratuito BitKeeper es ditribuido con su código fuente. La única documentación disponible para el cliente gratuito es el propio código fuente.

También pueden verse cambios, comentarios y código fuente a través de la Web. Para ver esta información en el caso de MySQL 5.0, dirigirse a http://mysql.bkbits.net:8080/mysql-5.0.

2.8.4. Problemas en la compilación de MySQL

Todos los programas de MySQL se compilan en Solaris o Linux limpiamente, sin advertencias (warnings), utilizando gcc. En otros sistemas podrían emitirse advertencias debido a diferencias en los ficheros de cabecera del sistema. Consulte Sección 2.8.5, “Notas sobre MIT-pthreads” para advertencias que pueden emitirse al usar MIT-pthreads. Para otros problemas, debe verificarse la siguiente lista.

La solución a muchos problemas incluye la reconfiguración. Si se necesita reconfigurar, hay que tomar nota de lo siguiente:

  • Si se ejecuta configure después de habérselo ejecutado anteriormente, éste puede emplear información recogida durante la primera vez. Esta información se almacena en . Cuando se inicia configure, busca aquel fichero y lee su contenido si existe, suponiendo que la información continúa siendo válida. Esa suposición es incorrecta cuando se ha reconfigurado.

  • Cada vez que se ejecuta configure, se debe ejecutar make nuevamente para recompilar. Sin embargo, primero se podría desear eliminar ficheros objeto antiguos, pertenecientes a procesos de generación anteriores, ya que fueron compilados utilizando diferentes opciones de configuración.

Para evitar que se utilicen información de configuración o ficheros objeto antiguos, deben ejecutarse estos comandos antes de volver a ejecutar configure:

shell> rm config.cache
shell> make clean

Alternativamente, puede utilizarse make distclean.

La siguiente lista enumera los problemas más comunes al compilar MySQL:

  • Si se obtienen errores como los que se muestran cuando se compila , probablemente se trate de memoria insuficiente o espacio de intercambio insuficiente:

    Internal compiler error: program cc1plus got fatal signal 11
    Out of virtual memory
    Virtual memory exhausted
    

    El problema es que gcc necesita enormes cantidades de memoria para compilar con funciones "inline". Inténtese ejecutar configure con la opción :

    shell> ./configure --with-low-memory
    

    Esta opción causa que se agregue a los argumentos del compilador si se está utilizando gcc, y si se está utilizando cualquier otro. Se debería probar la opción aún si se tiene tanta cantidad de memoria de espacio de intercambio que no parece posible que sean insuficientes. Este problema se ha observado inclusive en sistemas con configuraciones de hardware generosas. y la opción usualmente lo repara.

  • Por defecto, configure asume c++ como nombre del compilador y GNU c++ enlaza con . Si se está empleando gcc, tal comportamiento puede causar problemas como este durante la configuración:

    configure: error: installation or configuration problem:
    C++ compiler cannot create executables.
    

    También se podrían observar problemas durante la compilacion relacionados con g++, , o .

    Una causa para estos problemas es que no se tenga g++, o quizá se tenga g++ pero no , o . Se debe inspeccionar el fichero . Este debería contener el motivo exacto por el cual el compilador de C++ no está funcionando. Para eludir estos problemas, se puede utilizar gcc como compilador de C++. Debe ponerse en la variable de entorno el valor . Por ejemplo:

    shell> CXX="gcc -O3" ./configure
    

    Esto funciona porque gcc compila código C++ tan bien como g++, pero no enlaza por defecto con las bibliotecas o .

    Otra forma de solucionar el problema es instalar g++, , y . Sin embargo, se recomiendo no emplear o con MySQL porque sólo incrementará el tamaño del ejecutable sin obtener ningún beneficio. Algunas versiones de estas bibliotecas también han causado en el pasado problemas extraños a los usuarios de MySQL.

  • Si la compilación fallara por errores como cualquiera de los siguientes, se debe actualizar la versión de make a GNU make:

    making all in mit-pthreads
    make: Fatal error in reader: Makefile, line 18:
    Badly formed macro assignment
    

    O bien:

    make: file `Makefile' line 18: Must be a separator (:
    

    O bien:

    pthread.h: No such file or directory
    

    Se sabe que los programas make de Solaris y FreeBSD son problemáticos.

    La versión 3.75 de GNU make funciona correctamente.

  • Si se desean definir flags para ser usados por los compiladores de C o C++, se debe hacer agregando los flags a las variables de entorno y . De este mismo modo pueden especificarse los nombres del compilador utilizando y . Por ejemplo:

    shell> CC=gcc
    shell> CFLAGS=-O3
    shell> CXX=gcc
    shell> CXXFLAGS=-O3
    shell> export CC CFLAGS CXX CXXFLAGS
    

    Consulte Sección 2.1.2.5, “Binarios de MySQL compilados por MySQL AB” para una lista de definiciones de flags que han resultado útiles en varios sistemas.

  • Si se obtiene un mensaje de error como este, se necesitará actualizar el compilador gcc:

    client/libmysql.c:273: parse error before `__attribute__'
    

    gcc 2.8.1 funciona correctamente, pero se recomienda utilizar gcc 2.95.2 o egcs 1.0.3a en su lugar.

  • Si se obtienen errores como los siguientes al compilar mysqld, configure no está detectando correctamente el tipo del último argumento pasado a , , o :

    cxx: Error: mysqld.cc, line 645: In this statement, the referenced
         type of the pointer value ''length'' is ''unsigned long'',
         which is not compatible with ''int''.
    new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
    

    Para corregir esto, debe modificarse el fichero (el cual es generado por configure). Deben buscarse estas líneas:

    /* Define as the base type of the last arg to accept */
    #define SOCKET_SIZE_TYPE XXX
    

    Hay que cambiar por o , dependiendo del sistema operativo. (Tener en cuenta que esto debe hacerse cada vez que se ejecuta configure, porque este regenera el fichero .)

  • El fichero se genera a partir de . Normalmente el proceso de compilación no necesita crear , porque MySQL viene con una copia ya generada. Sin embargo, si se necesita crearlo de nuevo, se podría hallar este error:

    "sql_yacc.yy", line  fatal: default action causes potential...
    

    Este es un síntoma de que se posee una versión deficiente de yacc. Posiblemente se necesite instalar en su lugar bison (la versión GNU de yacc).

  • En Linux Debian 3.0, se necesita instalar en lugar del predeterminado si se desea compilar MySQL 5.0 con soporte para Bases de Datos Berkeley.

  • Si se necesita depurar mysqld o un cliente MySQL, ejecutar configure con la opción , luego recompilar y enlazar los clientes con la nueva biblioteca. Consulte Sección D.2, “Depuración de un cliente MySQL”.

  • Si se obtiene un error de compilación en Linux (por ejemplo, en Linux SuSE 8.1 o Linux RedHat 7.2) similar a los siguientes:

    libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from
    incompatible pointer type
    libmysql.c:1329: too few arguments to function `gethostbyname_r'
    libmysql.c:1329: warning: assignment makes pointer from integer
    without a cast
    make[2]: *** [libmysql.lo] Error 1
    

    Por defecto, el script configure intenta determinar el número correcto de argumentos empleando g++, el compilador C++ GNU. Este proceso arroja resultados incorrectos si no está instalado g++. Hay dos formas de solucionar esto:

    • Asegurarse de que GNU C++ g++ está instalado. En algunas distribuciones de Linux, el paquete que se necesita se llama ; en otras, se llama gcc-c++.

    • Para utilizar gcc como compilador de C++ se debe poner en la variable de entorno el valor gcc:

      export CXX="gcc"
      

    Después debe volver a ejecutarse configure.

2.8.5. Notas sobre MIT-pthreads

Esta sección describe alguno de los probleas que pueden ocurrir al utilizar MIT-pthreads.

En Linux, no se deberían utilizar MIT-pthreads. En su lugar, utilizar la implementación de LinuxThreads instalada. Consulte Sección 2.12.1, “Notas sobre Linux”.

Si el sistema no provee soporte nativo para subprocesos, se necesita compilar MySQL utilizando el paquete MIT-pthreads. Esto incluye a antiguos sistemas FreeBSD, SunOS 4.x, Solaris 2.4 y anteriores, y algunos otros. Consulte Sección 2.1.1, “Sistemas operativos que MySQL soporta”.

El paquete MIT-pthreads no es parte de la distribución de código fuente de MySQL 5.0. Si se lo necesita, habrá que descargarlo desde http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz.

Luego de la descarga, debe expandirse dentro del más alto nivel del directorio de código fuente de MySQL. Creará un nuevo subdirectorio llamado .

  • En la mayoría de los sistemas, para forzar el uso de MIT-pthreads se debe ejecutar configure con la opción .

    shell> ./configure --with-mit-threads
    

    La generación (building) en un directorio que no sea de código fuente no está soportada cuando se usan MIT-pthreads porque se desea minimizar los cambios al código.

  • La comprobación que determina si se utilizará MIT-pthreads sucede únicamente durante la parte del proceso de configuración que tiene que ver con el código del servidor. Si se ha configurado la distribución empleando para generar solamente el código del cliente, los clientes no saben si se está utilizando MIT-pthreads y emplean conexiones socket Unix por defecto. Dado que los ficheros socket de Unix no funcionan bajo MIT-pthreads en algunas plataformas, esto significa que se deberá utilizar o cuando se ejecuten programas cliente.

  • Cuando se compila MySQL empleado MIT-pthreads, el bloqueo de sistema se deshabilita por defecto por razones de rendimiento. Se le puede indicar al servidor que emplee bloqueo de sistema con la opción . Esto es necesario solamente si se desea poder ejecutar dos servidores MySQL sobre los mismos ficheros de datos, lo cual no es recomendable.

  • Algunas veces, el comando de pthread falla al adosarse a un socket sin emitir mensajes de error (al menos en Solaris). El resultado es que todas las conexiones al servidor fallan. Por ejemplo:

    shell> mysqladmin version
    mysqladmin: connect to server at '' failed;
    error: 'Can't connect to mysql server on localhost (146)'
    

    La solución a esto es finalizar el servidor mysqld y reiniciarlo. Esto ha ocurrido solamente cuando se ha detenido el servidor por la fuerza y se lo ha reiniciado inmediatamente.

  • Con MIT-pthreads, la llamada de sistema no es interrumpida con (interrupción). Esto solamente es perceptible cuando se ejecuta mysqladmin --sleep. Se debe esperar a que la llamada termine antes de que el pedido de interrupción sea atendido y el proceso se detenga.

  • Durante el enlazado, se pueden recibir mensajes de advertencia como los siguientes (al menos en Solaris); deben ser ignorados.

    ld: warning: symbol `_iob' has differing sizes:
        (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
    file /usr/lib/libc.so value=0x140);
        /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
    ld: warning: symbol `__iob' has differing sizes:
        (file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
    file /usr/lib/libc.so value=0x140);
        /my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
    
  • Algunas otras advertencias también deben ignorarse:

    implicit declaration of function `int strtoll(...)'
    implicit declaration of function `int strtoul(...)'
    
  • No se ha podido hacer funcionar con MIT-pthreads. (Esto no es necesario, pero podría ser de interés para alguien).

2.8.6. Instalar MySQL desde el código fuente en Windows

Estas instrucciones describen como generar los binarios de MySQL a partir del código fuente de la versión 5.0 en Windows. Las instrucciones que se proveen sirven para generar los binarios a partir de una distribución estándar de código fuente o a partir del árbol de BitKeeper que contiene el último código fuente en desarrollo.

Nota: Las instrucciones en este documento son estrictamente para usuarios que deseen probar MySQL en Windows a partir de la última distribución en código fuente o proveniente del árbol BitKeeper. Para usos en producción, MySQL AB no aconseja utilizar un servidor MySQL generado por el usuario a partir del código fuente. Normalmente, es mejor emplear distribuciones binarias precompiladas de MySQL las cuales MySQL AB genera específicamente para un rendimiento óptimo en Windows. Las instrucciones para instalar distribuciones binarias se enecuentran en Sección 2.3, “Instalar MySQL en Windows”.

Para generar MySQL en Windows a partir del código fuente, se necesita que el siguiente compilador y recursos estén disponibles en el sistema:

También se necesitará una distribución MySQL de código fuente para Windows. Hay dos formas de obtener una distribución de código fuente de MySQL 5.0:

  1. Obtener una distribución de código fuente preparada por MySQL AB desde http://dev.mysql.com/downloads/.

  2. Preparar una distribución de código fuente a partir del último arbol BitKeeper de código en desarrollo. Si se planea hacer esto, habrá que crear el paquete en un sistema Unix y luego transferirlo al sistema Windows. (La razón para esto es que algunas de las configuraciones y etapas de la generación requieren herramientas que funcionan solamente en Unix.) El uso de BitKeeper requiere:

si se está empleando una distribución de código fuente Windows, se puede ir directamente a Sección 2.8.6.1, “Generar MySQL usando VC++”. Para generar a partir del árbol de BitKeeper, proceder según Sección 2.8.6.2, “Crear un paquete de código fuente Windows a partir de la última fuente de desarrollo”.

Si algo no funciona como se esperaba, o se tienen sugerencias para hacer respecto a formas de mejorar el actual proceso de compilación en Windows, debe enviarse un mensaje a la lista de correo . Consulte Sección 1.6.1.1, “Las listas de correo de MySQL”.

2.8.6.1. Generar MySQL usando VC++

Note: Los ficheros de espacio de trabajo (workspace) de VC++ para MySQL 5.0 son compatibles con Microsoft Visual Studio 6.0 y ediciones posteriores (7.0 / .NET); estos ficheros son probados por el personal de MySQL AB antes de cada release.

Debe seguirse este procedimiento para generar MySQL:

  1. Crear un directorio de trabajo (por ejemplo ).

  2. Expandir la distribución de código fuente en el mencionado directorio, utilizando WinZip u otra herramienta para Windows que pueda leer ficheros .

  3. Ejecutar Visual Studio

  4. En el menú File, seleccionar Open Workspace .

  5. Abrir el espacio de trabajo que se hallará en el directorio de trabajo.

  6. En el menú Build, seleccionar el menú Set Active Configuration.

  7. Seleccionar mysqld - Win32 Debug y hacer click en OK.

  8. Presionar F7 para comenzar la compilación del servidor de depuración, bibliotecas, y algunas aplicaciones cliente.

  9. Del mismo modo se compila la versión release.

  10. Las versiones de depuración de los programas y las bibliotecas se encuentran en los directorios y . Las versiones release de los programas y las bibliotecas se encuentran en los directorios y . Si se desean generar tanto la versión de depuración como la de release, se puede seleccionar la opción Build All del menú Build.

  11. Probar el servidor. El servidor generado mediante las instrucciones anteriores espera que el directorio de MySQL y el directorio de datos sean y por defecto. Si se desea probar el servidor empleado el directorio raíz del árbol de código fuente como directorio base y de datos, se le deben indicar sus rutas al servidor. Esto puede hacerse desde la línea de ocmandos con las opciones y , o colocando las opciones apropiadas en un fichero de opciones (el fichero dentro del directorio Windows o bien ). También podría especificarse la ruta a un directorio de datos existente con anterioridad.

  12. Iniciar el servidor desde el directorio o dependiendo de cuál se quiera utilizar. Las instrucciones generales para el inicio del servidor se encuentran en Sección 2.3, “Instalar MySQL en Windows”. Las instrucciones deberán adaptarse si se desea utilizar un directorio base o directorio de datos diferente.

  13. Cuando el servidor se esté ejecutando en modo autónomo o como un servicio basado en la configuración establecida, intentar conectarse a él desde la utilidad interactiva de línea de comandos mysql, que se encuentra en el directorio o .

Cuando se esté satisfecho con el funcionamiento de los programas compilados, detener el servidor. Entonces, instalar MySQL de la siguiente manera:

  1. Crear los directorios donde se desea instalar MySQL. Por ejemplo, para instalarlo en , emplear estos comandos:

    C:\> mkdir C:\mysql
    C:\> mkdir C:\mysql\bin
    C:\> mkdir C:\mysql\data
    C:\> mkdir C:\mysql\share
    C:\> mkdir C:\mysql\scripts
    

    Si se desean compilar otros clientes y enlazarlos con MySQL, se deberían también crear varios directorios adicionales:

    C:\> mkdir C:\mysql\include
    C:\> mkdir C:\mysql\lib
    C:\> mkdir C:\mysql\lib\debug
    C:\> mkdir C:\mysql\lib\opt
    

    Si se desean efectuar pruebas de rendimiento de MySQL, crear este directorio:

    C:\> mkdir C:\mysql\sql-bench
    

    Las pruebas de rendimiento requieren soporte para Perl. Consulte Sección 2.13, “Notas sobre la instalación de Perl”.

  2. Desde el directorio , deben copiarse dentro de los siguientes directorios:

    C:\> cd \workdir
    C:\workdir> copy client_release\*.exe C:\mysql\bin
    C:\workdir> copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe
    C:\workdir> xcopy scripts\*.* C:\mysql\scripts /E
    C:\workdir> xcopy share\*.* C:\mysql\share /E
    

    Si se desean compilar otros clientes y enlazarlos a MySQL, también se deberían copiar varias bibliotecas y ficheros de cabecera:

    C:\workdir> copy lib_debug\mysqlclient.lib C:\mysql\lib\debug
    C:\workdir> copy lib_debug\libmysql.* C:\mysql\lib\debug
    C:\workdir> copy lib_debug\zlib.* C:\mysql\lib\debug
    C:\workdir> copy lib_release\mysqlclient.lib C:\mysql\lib\opt
    C:\workdir> copy lib_release\libmysql.* C:\mysql\lib\opt
    C:\workdir> copy lib_release\zlib.* C:\mysql\lib\opt
    C:\workdir> copy include\*.h C:\mysql\include
    C:\workdir> copy libmysql\libmysql.def C:\mysql\include
    

    Si se desean efectuar pruebas de rendimiento de MySQL, también debe hacerse lo siguiente:

    C:\workdir> xcopy sql-bench\*.* C:\mysql\bench /E
    

Configurar e iniciar el servidor del mismo modo que para la distribución binaria para Windows. Consulte Sección 2.3, “Instalar MySQL en Windows”.

2.8.6.2. Crear un paquete de código fuente Windows a partir de la última fuente de desarrollo

Para crear un paquete de código fuente Windows a partir del árbol BitKeeper actual, deben seguirse las siguientes instrucciones. Este procedimiento debe llevarse a cabo en un sistema con Unix o un sistema operativo estilo Unix. Por ejemplo, este procedimiento funciona bien en Linux.

  1. Copiar el árbol de código fuente BitKeeper para MySQL 5.0. Para más información sobre cómo copiar el árbol de código fuente, consulte las instrucciones en Sección 2.8.3, “Instalar desde el árbol de código fuente de desarrollo”.

  2. Configurar y generar la distribución de modo que se tenga un servidor ejecutable para trabajar con él. Una forma de lograr esto es ejecutar el siguiente comando en el directorio de más alto nivel del árbol de código fuente:

    shell> ./BUILD/compile-pentium-max
    
  3. Luego de asegurarse que el proceso de generación se completó con éxito, ejecutar el siguiente script en el directorio de más alto nivel del árbol de código fuente:

    shell> ./scripts/make_win_src_distribution
    

    Este script crea un paquete de código fuente Windows para ser usado en un sistema Windows. Se le pueden pasar diferentes opciones al script según las necesidades que se tengan. El script acepta las siguientes opciones:

    • Muestra un mensaje de ayuda.

    • Imprime información acerca de las operaciones que realiza el script, sin crear el paquete.

    • Especifica una ubicación temporal.

    • Sufijo para el nombre del paquete.

    • Nombre del directorio (intermedio) para copiar ficheros.

    • No imprime la lista de ficheros procesados.

    • Crea un paquete en lugar de uno .

    Por defecto, make_win_src_distribution crea un fichero en formato Zip con el nombre -win-src.zip, donde es la versión del árbol de código fuente.

  4. Copiar o subir al ordenador Windows el paquete de código fuente Windows que se acaba de crear. Para compilarlo, utilizar las instrucciones en Sección 2.8.6.1, “Generar MySQL usando VC++”.

2.8.7. Compilar los clientes de MySQL en Windows

En los ficheros de código fuente, se debería incluir antes de :

#include <my_global.h>
#include <mysql.h>

incluye cualquier otro fichero necesario para compatibilidad con Windows (como ) si el programa se compilará en Windows.

Se puede enlazar el código con la biblioteca dinámica , la cual es solamente un wrapper para cargar sobre demanda, o con la biblioteca estática .

Las bibliotecas cliente de MySQL están compiladas como bibliotecas con uso de subprocesos, por lo tanto el código del usuario también debería ser multi-hilo.