2.9. Puesta en marcha y comprobación después de la instalación

MySQL 5.0

2.9. Puesta en marcha y comprobación después de la instalación

Luego de instalar MySQL, hay algunos temas a los que hay que dirigir la atención. Por ejemplo, en Unix, se debería inicializar el directorio de datos y crear las tablas de permisos MySQL. En todas las plataformas, una cuestión importante de seguridad es que, inicialmente, las cuentas en las tablas de permisos no tienen contraseñas. Se deberían asignar contraseñas para evitar accesos no autorizados al servidor MySQL. Se pueden crear tablas de zonas horarias (time zone) para habilitar el reconocimiento de zonas horarias con nombre. (Actualmente, estas tablas solamente pueden llenarse en Unix. Este problema será revisado pronto en Windows).

Las siguientes secciones incluyen procedimientos de pos-instalación que son específicos de sistemas Windows y Unix. Otra sección, Sección 2.9.2.3, “Arrancar y resolver problemas del servidor MySQL”, se aplica a todas las plataformas; describe que hacer si ocurren problemas al tratar de iniciar el servidor. Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL” también se aplica a todas las plataformas. Se deberían seguir estas instrucciones para asegurarse de que las cuentas MySQL están correctamente protegidas mediante contraseñas.

Cuando se esté listo para crear cuentas de usuario adicioniales, se podrá encontrar información sobre el sistema de control de acceso de MySQL y administración de cuentas en Sección 5.6, “El sistema de privilegios de acceso de MySQL” y Sección 5.7, “Gestión de la cuenta de usuario MySQL”.

2.9.1. Pasos a seguir después de la instalación en Windows

En Windows, el directorio de datos y la tabla de permisos no necesitan ser creados. MySQL para Windows incluye la tabla de permisos con un conjunto de cuentas ya inicializadas en la base de datos , dentro del directorio de datos. Al contrario que en Unix, no se debe ejecutar el script mysql_install_db. Sin embargo, si no se instala MySQL utilizando el ASistente de Instalación, se deberían establecer contraseñas para proteger las cuentas. Consulte Sección 2.3.4.1, “Introducción”. El procedimiento para hacerlo está en Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”.

Antes de establecer passwords, se podría desear ejecutar algunos programas cliente para asegurarse de que hay conexión con el servidor y que éste se encuentra funcionando correctamente. Tras cerciorarse de que el servidor está ejecutándose (consultar Sección 2.3.10, “Arrancar el servidor la primera vez”), se utilizarían los siguientes comandos para verificar que se puede traer información desde el mismo. La salida por pantalla debe ser similar a esto:

C:\> C:\mysql\bin\mysqlshow
+-----------+
| Databases |
+-----------+
| mysql     |
| test      |
+-----------+

C:\> C:\mysql\bin\mysqlshow mysql
Database: mysql
+--------------+
|    Tables    |
+--------------+
| columns_priv |
| db           |
| func         |
| host         |
| tables_priv  |
| user         |
+--------------+

C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql
+------+-------+------+
| host | db    | user |
+------+-------+------+
| %    | test% |      |
+------+-------+------+

Si se está empleando una versión de Windows que soporta servicios, y se desea que el servidor se ejecute automáticamente al iniciarse Windows, consulte Sección 2.3.12, “Arrancar MySQL como un servicio de Windows”.

2.9.2. Pasos a seguir después de la instalación en Unix

Luego de instalar MySQL en Unix, se necesita inicializar las tablas de permisos, ejecutar el servidor, y asegurarse de que éste funciona correctamente. También se podría desear que el servidor se inicie y detenga automáticamente cuando lo haga el sistema. Se deben asignar contraseñas a las cuentas en las tablas de permisos.

En Unix, las tablas de permisos se configuran mediante el programa mysql_install_db. En algunos métodos de instalación, este programa se ejecuta automáticamente.

  • Si se instala MySQL en Linux a partir de una distribución RPM, el servidor RPM ejecuta mysql_install_db.

  • Si se instala MySQL en Mac OS X a partir de una distribución PKG, el instalador ejecuta mysql_install_db.

En otro caso, será necesario ejecutar manualmente mysql_install_db.

El siguiente procedimiento describe cómo inicializar las tablas de permisos (si no se hizo anteriormente) y luego iniciar el servidor. También sugiere posibles comandos a utilizar para verificar que el servidor está accesible y en correcto funcionamiento. Para información relativa a iniciar y detener el servidor automáticamente, consulte Sección 2.9.2.2, “Arrancar y parar MySQL automáticamente”.

Luego de completar el procedimiento y tener el servidor en funcionamiento, se deberían asignar contraseñas a las cuentas creadas por mysql_install_db. Las instrucciones para hacerlo se hallan en Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”.

En los ejemplos mostrados, el servidor se ejecuta bajo el identificador de usuario de la cuenta de inicio de sesión . Se asume que dicha cuenta existe. La cuenta puede haber sido creda especialmente o bien originarse al cambiar el nombre de una cuenta existente.

  1. Posicionarse en el nivel más alto del directorio de instalación de MySQL, representado por :

    shell> cd 
    

    muy probablemente se reemplace por algo similar a o . Los siguientes pasos asumen que se está en este directorio.

  2. De ser necesario, ejecutar el programa mysql_install_db para establecer las tablas de permisos MySQL iniciales, las que contienen los privilegios que determinan qué usuarios están autorizados a conectarse al servidor. Habrá que ejecutarlo si se utilizó una distribución que no lo hace automáticamente.

    Por lo general, mysql_install_db sólo requiere ser ejecutado la primera vez que se instala MySQL, de modo que este paso puede obviarse si se está actualizando una instalación existente. No obstante, mysql_install_db no sobreescribe ninguna tabla, por lo tanto, es seguro utilizarlo en cualquier circunstancia.

    Para inicializar las tablas de permisos se utilizará uno de los siguientes comandos, dependiendo de si mysql_install_db se encuentra en el directorio o :

    shell> bin/mysql_install_db --user=mysql
    shell> scripts/mysql_install_db --user=mysql
    

    El script mysql_install_db crea el directorio de datos, la base de datos que almacena todos los privilegios para el servidor, y la base de datos que puede emplearse para probar MySQL. El script también crea entradas en la tabla de permisos para la cuenta y la cuenta de usuario anónimo. Las cuentas no están protegidas por contraseña en un principio. Una descripción de los permisos que tienen se encuentra en Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”. Brevemente, estos privilegios le permiten al usuario de MySQL hacer cualquier cosa, y le permiten a cualquier usuario de MySQL crear o utilizar bases de datos cuyo nombre sea o comience con .

    Es importante asegurarse de que los directorios y ficheros de bases de datos tienen como propietario a la cuenta de inicio de sesión , para que el servidor tenga acceso de lectura y escritura a los mismos. Para cerciorarse de esto, si mysql_install_db se ejecuta mientras se está como del sistema operativo, hay que usar la opción como se muestra. En otro caso, el script se deberá ejecutar mientras se está como usuario del sistema operativo, en cuyo caso se puede omitir la opción .

    mysql_install_db crea varias tablas en la base de datos , incluyendo , , , , , y , entre otras. Consulte Sección 5.6, “El sistema de privilegios de acceso de MySQL” para una descripción completa.

    Si no se desea tener la base de datos , se la puede eliminar con mysqladmin -u root drop test luego de iniciar el servidor.

    Si ocurren problemas con mysql_install_db, consulte Sección 2.9.2.1, “Problemas en la ejecución de mysql_install_db.

    Hay algunas alternativas para ejecutar el script mysql_install_db que se provee con la distribución de MySQL:

    • Si se desea que los privilegios iniciales sean diferentes de los establecidos por defecto, se puede modificar mysql_install_db antes de ejecutarlo. Sin embargo, es preferible utilizar y para modificar los privilegios después que las tablas de permisos se hayan creado. En otras palabras, se puede ejecutar mysql_install_db, y posteriormente emplear para conectarse al servidor como usuario de MySQL y aplicar las sentencias y que sean necesarias.

      Si se desea instalar MySQL en varios ordenadores con los mismos privilegios, se pueden colocar las sentencias y en un fichero y ejecutarlo como un script utilizando después de ejecutar mysql_install_db. Por ejemplo:

      shell> bin/mysql_install_db --user=mysql
      shell> bin/mysql -u root < your_script_file
      

      De este modo se evita tipear las sentencias en cada ordenador.

    • Es posible regenerar las tablas de permisos completamente aunque ya estén creadas. Se puede necesitar esto si se está aprendiendo a usar y y se han hecho tantas modificaciones tras la ejecución de mysql_install_db que se desea vaciar las tablas de permisos y comenzar de nuevo.

      Para regenerar las tablas de permisos, eliminar todos los ficheros , , y en el directorio que contiene la base de datos . (Este es el directorio llamado dentro del directorio de datos, el cual aparece listado como el valor cuando se ejecuta mysqld --help.) Luego debe ejecutarse nuevamente el script mysql_install_db

    • Se puede iniciar mysqld manualmente utilizando la opción e ingresar los permisos manualmente utilizando mysql:

      shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
      shell> bin/mysql mysql
      

      Desde mysql, ejecutar manualmente los comandos contenidos en mysql_install_db. Al finalizar hay que asegurarse de ejecutar mysqladmin flush-privileges o mysqladmin reload para indicarle al servidor que lea nuevamente las tablas de permisos.

      Nótese que al no utilizar mysql_install_db, no solamente hay que cargar manualmente el contenido de las tablas de permisos, sino que también hay que crearlas primero.

  3. Iniciar el servidor MySQL:

    shell> bin/mysqld_safe --user=mysql &
    

    Es importante que el servidor MySQL sea ejecutado utilizando una cuenta de sistema operativo sin privilegios (distinta a ). Para cerciorarse de esto, se debe usar la opción si se ejecuta habiendo iniciado sesión del sistema operativo como . En otro caso, se debería ejecutar el script mientras se ha iniciado sesión como , en cuyo caso se puede omitir la opción .

    Mayores instrucciones para ejecutar MySQL como un usuario sin privilegios se encuentran en Sección A.3.2, “Cómo correr MySQL como usuario normal”.

    Si se omite la creación de las tablas de permisos antes de llegar a este paso, aparecerá el siguiente mensaje en el fichero de registro de error cuando se inicie el servidor:

    mysqld: Can't find file: 'host.frm'
    

    Si ocurren otros problemas al iniciar el servidor, consulte Sección 2.9.2.3, “Arrancar y resolver problemas del servidor MySQL”.

  4. Utilizar mysqladmin para verificar que el servidor se encuentra en ejecución. Los siguientes comandos proporcionan formas simples de saber si el servidor está activo y responde a conexiones:

    shell> bin/mysqladmin version
    shell> bin/mysqladmin variables
    

    La salida producida por mysqladmin version varía dependiendo de la plataforma y la versión de MySQL, pero debería ser similar a esto:

    shell> bin/mysqladmin version
    mysqladmin  Ver 8.41 Distrib 5.0.9-beta, for pc-linux-gnu on i686
    Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license
    
    Server version          5.0.9-beta-Max
    Protocol version        10
    Connection              Localhost via UNIX socket
    UNIX socket             /var/lib/mysql/mysql.sock
    Uptime:                 14 days 5 hours 5 min 21 sec
    
    Threads: 1  Questions: 366  Slow queries: 0  
    Opens: 0  Flush tables: 1  Open tables: 19  
    Queries per second avg: 0.000
    

    Para ver qué otras tareas pueden hacerse con mysqladmin, se lo debe invocar con la opción .

  5. Verificar que se pueda detener el servidor:

    shell> bin/mysqladmin -u root shutdown
    
  6. Verificar que se pueda reiniciar el servidor. Hacerlo mediante mysqld_safe o invocando directamente a mysqld. Por ejemplo:

    shell> bin/mysqld_safe --user=mysql --log &
    

    Si mysqld_safe fallara, consultar Sección 2.9.2.3, “Arrancar y resolver problemas del servidor MySQL”.

  7. Ejecutar algunas pruebas sencillas para comprobar que se puede traer información desde el servidor. La salida debería ser similar a lo que se muestra aquí:

    shell> bin/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    | test      |
    +-----------+
    
    shell> bin/mysqlshow mysql
    Database: mysql
    +---------------------------+
    |          Tables           |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | func                      |
    | help_category             |
    | help_keyword              |
    | help_relation             |
    | help_topic                |
    | host                      |
    | proc                      |
    | procs_priv                |
    | tables_priv               |
    | time_zone                 |
    | time_zone_leap_second     |
    | time_zone_name            |
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    
    shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
    +------+--------+------+
    | host | db     | user |
    +------+--------+------+
    | %    | test   |      |
    | %    | test_% |      |
    +------+--------+------+
    
  8. Hay un conjunto de pruebas de rendimiento en el directorio (dentro del directorio de instalación de MySQL) que puede utilizarse para comparar el desempeño de MySQL en distintas plataformas. Este conjunto de pruebas está escrito en Perl. Utiliza el módulo Perl DBI para proporcionar una interface independiente de la base de datos a varias bases de datos, y algunos otros módulos adicionales de Perl también son requeridos para ejecutar las pruebas. Se deben tener los siguientes módulos instalados:

    DBI
    DBD::mysql
    Data::Dumper
    Data::ShowTable
    

    Estos módulos pueden ser obtenidos desde CPAN (http://www.cpan.org/). También, consulte Sección 2.13.1, “Instalación de Perl en Unix”.

    El directorio contiene los resultados de muchas ejecuciones a través de diferentes bases de datos y plataformas. Para ejecutar todos los tests, deben introducirse estos comandos:

    shell> cd sql-bench
    shell> perl run-all-tests
    

    Si no se encuentra el directorio , probablemente se ha instalado MySQL empleando otros ficheros RPM que no son el RPM de código fuente (El RPM de código fuente incluye el directorio de pruebas de rendimiento ) En este caso, se deberá primero instalar el conjunto de pruebas de rendimiento antes de poder utilizarlo. Para MySQL 5.0, hay un RPM separado con pruebas de rendimiento llamado -i386.rpm que contiene el código de prueba y los datos.

    Si se posee una distribución de código fuente, también hay pruebas en su subdirectorio . Por ejemplo, para ejecutar , debe ejecutarse este comando desde el directorio de más alto nivel en la distribución de código fuente:

    shell> mysql -vvf test < ./tests/auto_increment.tst
    

    El resultado esperado del test se encuentra en el fichero .

  9. En este punto, se debería tener el servidor en funcionamiento. Sin embargo, ninguna de las cuentas iniciales de MySQL tiene una contraseña, así que se les debe asignar empleando las instrucciones halladas en Sección 2.9.3, “Hacer seguras las cuentas iniciales de MySQL”.

En MySQL 5.0, el procedimiento de instalación crea zonas horarias en la base de datos . No obstante, se deben llenar las tablas en forma manual. Las instrucciones para hacerlo se encuentran en Sección 5.9.8, “Soporte de zonas horarias en el servidor MySQL”.

2.9.2.1. Problemas en la ejecución de mysql_install_db

El propósito del script mysql_install_db es generar tablas de permisos MySQL nuevas. No sobreescribe las tablas de permisos existentes ni afecta a otros datos.

Para crear nuevamente las tablas de privilegios, primero debe detenerse el servidor mysqld si está ejecutándose. Luego se renombra -para preservarlo- el directorio que está dentro del directorio de datos, y se ejecuta mysql_install_db. Por ejemplo:

shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-old
shell> mysql_install_db --user=mysql

Esta sección detalla problemas que podrían hallarse cuando se ejecute mysql_install_db:

  • mysql_install_db falla al instalar las tablas de permisos

    mysql_install_db puede fallar al instalar las tablas de permisos y finalizar despues de mostrar los siguientes mensajes:

    Starting mysqld daemon with databases from XXXXXX
    mysqld ended
    

    En tal caso, se debe examinar el fichero de registro de errores muy cuidadosamente. El registro podría hallarse en el directorio con un nombre similar al mensaje de error, y debería indicar el motivo por el que mysqld no se inició. Si no fuera de ayuda, habrá que enviar un informe de error incluyendo el texto del registro. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”.

  • Ya hay un proceso mysqld en ejecución

    Esto indica que el servidor se está ejecutando, en cuyo caso las tablas de permisos probablemente ya se crearon. De ser así, no es necesario ejecutar mysql_install_db en absoluto, porque sólo se hace una vez (cuando se instala MySQL la primera vez).

  • No es posible instalar un segundo servidor mysqld cuando hay uno en ejecución.

    Esto puede ocurrir cuando se tiene una instalación de MySQL y se desea realizar una nueva instalación en una ubicación diferente. Por ejemplo, se podría tener una instalación en producción y crear una segunda instalación con fines de prueba. Generalmente, el problema es que el segundo servidor intenta utilizar una interfaz de red que está siendo usada por el primero. En este caso se debería ver uno de los siguientes mensajes de error:

    Can't start server: Bind on TCP/IP port:
    Address already in use
    Can't start server: Bind on unix socket...
    

    Consulte Sección 5.11, “Ejecutar más de un servidor MySQL en la misma máquina” para ver instrucciones sobre la instalación de múltiples servidores.

  • No se tiene acceso de escritura a

    Si no se tiene acceso de escritura para crear ficheros temporales o un fichero de socket Unix en la ubicación por defecto (el directorio ), ocurrirá un error al ejecutar mysql_install_db o el servidor mysqld.

    Se pueden especificar distintos directorios temporales y ubicaciones para ficheros socket de Unix ejecutando los siguientes comandos antes de iniciar mysql_install_db o mysqld:

    shell> TMPDIR=//
    shell> MYSQL_UNIX_PORT=//mysql.sock
    shell> export TMPDIR MYSQL_UNIX_PORT
    

    debería ser la ruta completa a algún directorio para el cual se tenga permiso de escritura.

    Luego de hacer esto se debería estar en condiciones de ejecutar mysql_install_db e iniciar el servidor con estos comandos:

    shell> bin/mysql_install_db --user=mysql
    shell> bin/mysqld_safe --user=mysql &
    

    Si mysql_install_db está ubicado en el directorio , debe modificarse el primer comando para que diga .

    Consulte Sección A.4.5, “Cómo proteger o cambiar el fichero socket de MySQL . Consulte Apéndice E, Variables de entorno.

2.9.2.2. Arrancar y parar MySQL automáticamente

Generalmente, el servidor mysqld se inicia de alguna de estas formas:

  • Invocando mysqld directamente. Esto funciona en cualquier plataforma.

  • Ejecutando el servidor MySQL como un servicio de Windows. Esto puede hacerse en versiones de Windows que soporten servicios (como NT, 2000, XP, y 2003). El servicio se puede configurar para que inicie el servidor automáticamente cuando arranca Windows, o como un servicio manual que se inicia a pedido. Para instrucciones, consulte: Sección 2.3.12, “Arrancar MySQL como un servicio de Windows”.

  • Invocando mysqld_safe, el cual intenta determinar las opciones apropiadas para mysqld y entonces lo ejecuta con dichas opciones. Este script se usa en sistemas basados en BSD Unix. Consulte Sección 5.1.3, “El script de arranque del servidor mysqld_safe.

  • Invocando mysql.server. Este script se usa principalmente al iniciar y detener el sistema en sistemas que emplean directorios de ejecución al estilo System V, donde usualmente se instala bajo el nombre . El script mysql.server inicia el servidor mediante la ejecución de Sección 5.1.4, “El script mysql.server para el arranque del servidor”.

  • En Mac OS X, se instala paquete separado llamado MySQL Startup Item para habilitar el inicio automático de MySQL junto con el sistema. El Startup Item inicia el servidor invocando a mysql.server. Consulte Sección 2.5, “Instalar MySQL en Mac OS X” para más detalles.

Los scripts mysql.server y mysqld_safe y el Mac OS X Startup Item se pueden utilizar para iniciar el servidor manualmente, o en forma automática al inicio del sistema. mysql.server y el Startup Item también se emplean para detener el servidor.

Para iniciar o detener el servidor manualmente empleando el script mysql.server, se lo debe invocar con los argumentos o :

shell> mysql.server start
shell> mysql.server stop

Antes de que mysql.server inicie el sevidor, se posiciona en el directorio de instalación de MySQL, y luego ejecuta mysqld_safe. Si se desea que el servidor se ejecute como un usuario específico, debe agregarse la correspondiente opción al grupo del fichero de opciones , como se muestra más adelante en esta sección. (Es posible que haya que editar mysql.server si se instaló una distribución binaria de MySQL en una ubicación no estándar. La modificación consiste en hacer al directorio apropiado antes de ejecutar mysqld_safe. En caso de hacer esto, tener en cuenta que la versión modificada de mysql.server puede ser sobreescrita si se actualiza MySQL en el futuro; se debería hacer una copia de la versión modificada para restaurarla.)

mysql.server stop detiene el servidor mediante el envío de una señal. También se lo puede detener manualmente ejecutando mysqladmin shutdown.

Para iniciar y detener MySQL automáticamente, se necesita agregar los comandos de inicio y detención en los sitios apropiados de los ficheros .

Si se emplea el paquete RPM de servidor para Linux (.rpm), el script mysql.server se instala en el directorio con el nombre . No se necesita instalarlo manualmente. Consulte Sección 2.4, “Instalar MySQL en Linux” para más información sobre los paquetes Linux RPM.

Algunos vendedores proveen paquetes RPM que instalan un script de inicio con un nombre distinto, como mysqld.

Si se instala MySQL desde una distribución de código fuente o mediante una distribución binaria que no instala mysql.server automáticamente, se lo puede instalar manualmente. El script se encuentra en el directorio dentro del directorio de instalación de MySQL o en el árbol de código fuente de MySQL.

Para instalar mysql.server manualmente, se los debe copiar en el directorio con el nombre mysql, y luego hacerlo ejecutable. Esto se hace posicionándose dentro del directorio donde está mysql.server y ejecutando estos comandos:

shell> cp mysql.server /etc/init.d/mysql
shell> chmod +x /etc/init.d/mysql

Los sistemas Red Hat antiguos utilizan el directorio en lugar de . Los comandos anteriores deben modificarse de acuerdo a esto. Alternativamente, puede crearse primero como un vínculo simbólico que apunte a :

shell> cd /etc
shell> ln -s rc.d/init.d .

Luego de instalar el script, los comandos necesarios para activarlo en el arranque del sistema dependen del sistema operativo. En Linux, puede utilizarse :

shell> chkconfig --add mysql

En algunos sistemas Linux, el siguiente comando tmabién parece ser necesario para habilitar completamente al script mysql:

shell> chkconfig --level 345 mysql on

En FreeBSD, los scripts de inicio generalmente se encuentran en . La página de manual establece que los scripts en dicho directorio se ejecutan solamente si su nombre base concuerda con el patrón de nombre de fichero shell . Cualquier otro fichero o directorio presente dentro del directorio es ignorado sin advertencias. En otras palabras, en FreeBSD, se debería instalar el script como para habilitar el inicio automático.

Como una alternativa a la configuración anterior, algunos sistemas operativos también emplean o para iniciar servicios adicionales en el arranque del sistema. Para iniciar MySQL utilizando este método, se puede agregar un comando como el siguiente al fichero de inicio apropiado:

/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'

En otros sistemas operativos, consultar la documentación para ver cómo instalar scripts de inicio.

Se pueden agregar opciones a mysql.server en un fichero global . Un típico fichero podría verse como este:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql

[mysql.server]
basedir=/usr/local/mysql

El script mysql.server acepta las siguientes opciones: , , y . Si se utilizan, deben estar en un fichero de opciones, no en la línea de comandos. mysql.server sólo acepta en la línea de comandos las opciones y .

La siguiente tabla indica los grupos del fichero de opciones que son leidos por el servidor y por cada script de inicio.

Script Grupos de opciones
mysqld , ,
mysql.server , ,
mysqld_safe , ,

significa que los grupos con nombres como , , y son leídos por servidores con números de versión 4.0.x, 4.1.x, 5.0.x y así sucesivamente. Esta característica sirve para especificar opciones que serán leídas solamente por servidores pertenecientes a releases de una determinada serie.

Por razones de compatibilidad hacia atrás, mysql.server también lee el grupo y mysqld_safe también lee el grupo . No obstante, cuando se emplee MySQL 5.0, se debería actualizar el fichero de opciones para que contenga los grupos y .

Consulte Sección 4.3.2, “Usar ficheros de opciones”.

2.9.2.3. Arrancar y resolver problemas del servidor MySQL

Si ocurren problemas durante el inicio del servidor, inténtese lo siguiente:

  • Especificar cualquier opción especial necesaria para el motor de almacenamiento en uso.

  • Asegurarse de que el servidor conoce dónde se encuentra el directorio de datos.

  • Cerciorarse de que el servidor pueda utilizar el directorio de datos. El propietario y los permisos sobre el directorio de datos y su contenido deben establecerse de forma que el servidor sea capaz de acceder a ellos y modificarlos.

  • Inspeccionar el registro de errores para ver porqué el servidor no se inicia.

  • Verificar que están disponibles las interfaces de red que el servidor intenta utilizar.

Algunos motores de almacenamiento tienen opciones que controlan su comportamiento. Se puede crear un fichero y establecer opciones de inicio para el motor que se planea utilizar. Si se van a usar motores de almacenamiento con soporte para tablas transaccionales (, ), hay que asegurarse de que se han configurado según lo deseado antes de iniciar el servidor:

Cuando el servidor mysqld se inicia, se posiciona en el directorio de datos. Aquí es donde espera encontrar bases de datos y donde grabará sus ficheros de registro. En Unix, también grabará aquí el fichero pid (process ID, o identificador de proceso).

La ubicación del directorio de datos se establece en forma fija cuando se compila el servidor. Aquí es donde, por defecto, buscará el directorio de datos. Si el mismo se encuentra en otra parte del sistema, el servidor no funcionará correctamente. Se puede conocer la ubicación por defecto ejecutando mysqld con las opciones y .

Si los valores por defecto no coinciden con la instalación realizada en el sistema, se los puede sustituir especificando opciones para mysqld o mysqld_safe en la linea de comandos. También se pueden colocar en un fichero de opciones.

Para especificar explícitamente la ubicación del directorio de datos, se emplea la opción . Sin embargo, normalmente se le puede indicar a mysqld la ubicación del directorio base donde está instalado MySQL, y el servidor buscará allí el directorio de datos. Esto se hace con la opción option.

Para verificar los efectos de especificar opciones de ruta, hay que invocar mysqld con dichas opciones seguidas de y . Por ejemplo, posicionándose donde mysqld está instalado, y ejecutando los siguientes comandos, se verán los efectos de iniciar el servidor en el directorio base :

shell> ./mysqld --basedir=/usr/local --verbose --help

Se pueden suministrar otras opciones, como , pero hay que tener en cuenta que y deben aparecer en último lugar.

Una vez que se haya logrado determinar la configuración de ruta deseada, iniciar el servidor sin y .

Si mysqld ya está ejecutándose, se puede conocer la configuración de rutas que está usando mediante la ejecución de este comando:

shell> mysqladmin variables

O bien:

shell> mysqladmin -h  variables

es el nombre del host del servidor MySQL.

Si se obtuviera el (que significa ) al iniciar mysqld, indica que los permisos de acceso al directorio de datos o a su contenido no permiten el acceso del servidor. En este caso, hay que cambiar los permisos sobre los directorios y ficheros involucrados para que el servidor tenga derecho a usarlos. También se puede iniciar el servidor bajo el usuario de sistema operativo , pero esto puede traer aparejados problemas de seguridad y debería ser evitado.

En Unix, hay que posicionarse en el directorio de datos y verificar el propietario del directorio y su contenido para asegurarse de que el servidor tiene acceso. Por ejemplo, si el directorio de datos es , usar este comando:

shell> ls -la /usr/local/mysql/var

Si el directorio de datos o sus ficheros o subdirectorios no tienen como propietario a la cuenta empleada para ejecutar el servidor, cambiar el propietario para que sea esa cuenta:

shell> chown -R mysql /usr/local/mysql/var
shell> chgrp -R mysql /usr/local/mysql/var

Si el servidor falla en iniciarse correctamente, verificar el fichero de registro de errores para ver si se puede encontrar la causa. Los ficheros de registro se localizan en el directorio de datos (generalmente, en Windows, en una distribución binaria de Linux, y en una distribución de código fuente de Linux). Se buscan en el directorio de datos los ficheros con un nombre con la forma .err y .log, donde es el nombre del host del servidor. Luego, examinar las últimas líneas de estos ficheros. En Unix, puede utilizarse para mostrarlas:

shell> tail .err
shell> tail .log

El registro de errores contiene información que indica el motivo por el cual el servidor no ha podido iniciarse. Por ejemplo, es posible ver algo como esto al examinarlo:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

Esto significa que no se inició mysqld con la opción y Berkeley DB halló algo incorrecto con sus propios ficheros de registro cuando intentó recuperar las bases de datos. Para que sea posible continuar, habría que mover los ficheros de registro Berkeley DB antiguos desde el directorio de bases de datos a alguna otra ubicación, donde puedan examinarse posteriormente. Los ficheros de registro reciben nombres en secuencia comenzando en , donde el número se incrementa cada vez.

Si se está ejecutando mysqld con soporte para tablas y mysqld realiza un volcado del núcleo al inicio, podría deberse a problemas con el registro de recuperación de . En este caso, se puede intentar el inicio de mysqld con . Si esto ayuda, entonces se deberían eliminar todos los ficheros de registro del directorio de datos e intentar el inicio de mysqld nuevamente, sin la opción .

Si ocurriese cualquiera de los siguientes errores, significa que algún otro programa (quizá otro servidor mysqld) está utilizando el puerto TCP/IP o socket Unix que mysqld intenta emplear:

Can't start server: Bind on TCP/IP port: Address already in use
Can't start server: Bind on unix socket...

Utilizar ps para determinar si se tiene otro servidor mysqld en ejecución. Si es así, detener el servidor antes de iniciar mysqld de nuevo. (si hay otro servidor ejecutándose, y realmente se desea tener múltiples servidores, se puede hallar información sobre cómo hacerlo en Sección 5.11, “Ejecutar más de un servidor MySQL en la misma máquina”.)

Si no hay otro servidor ejecutándose, inténtese ejecutar el comando . (El número de puerto MySQL por defecto es 3306). Luego presionar Enter un par de veces. Si no se obtiene un mensaje de error como , algún otro programa está ocupando el puerto TCP/IP que mysqld está intentando utilizar. Se necesitará determinar qué programa es y desactivarlo, o bien indicar a mysqld que escuche en un puerto diferente mediante la opción . En este caso, también se necesitará especificar el número de puerto en los programas cliente cuando se conecten al servidor a través de TCP/IP.

Otra razón por la que el puerto podría ser inaccesible es que se tenga un firewall que bloquee las conexiones a él. Si es así, modificar la configuración del firewall para permitir el acceso a ese puerto.

Si el servidor se inicia pero no es posible conectarse a él, habría que cerciorarse de que se tiene una entrada en que se vea así:

127.0.0.1       localhost

Estre problema ocurre solamente en sistemas que no tienen una biblioteca para trabajo con subprocesos y para los cuales MySQL debe configurarse para usar MIT-pthreads.

Si no es posible iniciar mysqld, se puede generar un fichero de seguimiento para hallar el problema utilizando la opción . Consulte Sección D.1.2, “Crear ficheros de traza”.

Consulte Sección 2.3.14, “Resolución de problemas en la instalación de MySQL bajo Windows” para obtener mayor información sobre la resolución de problemas en instalaciones Windows.

2.9.3. Hacer seguras las cuentas iniciales de MySQL

Una parte del proceso de instalación de MySQL es configurar la base de datos , que contiene las tablas de permisos:

  • Las distribuciones para Windows contiene tablas de permisos preinicializadas que se instalan automáticamente.

  • En Unix, las tablas de permisos se llenan mediante el programa mysql_install_db. Algunos métodos de instalación ejecutan este programa en forma automática. Otros necesitan que sea ejecutado manualmente. Para más detalles, consulte Sección 2.9.2, “Pasos a seguir después de la instalación en Unix”.

Las tablas de permisos definen las cuentas de usuario MySQL iniciales y sus permisos de acceso. Estas cuentas tienen la siguiente configuración:

  • Se crean dos cuentas con el nombre de usuario . Son cuentas de superusuario que pueden realizar cualquier tarea. Inicialmente las cuentas no tienen contraseñas, de forma que cualquier persona puede conectarse al servidor MySQL como sin una contraseña y recibirá todos los privilegios.

    • En Windows, una cuenta sirve para conectarse desde el ordenador local (localhost) y la otra permite conectarse desde cualquier ordenador.

    • En Unix, ambas cuentas son para conexiones desde el ordenador local (localhost). Las conexiones deben establecerse desde el ordenador local especificando el nombre de host para una de las cuentas, o el nombre propiamente dicho del host o número de IP para la otra.

  • Se crean dos cuentas de usuario anónimo, cada una con un nombre de usuario vacío. Los usuarios anónimos no tienen contraseña, de modo que cualquier persona puede usarlos para conectarse al servidor MySQL.

    • En Windows, una cuenta anónima es para conexiones desde el ordenador local. Tiene todos los privilegios, exactamente como la cuenta . La otra sirve para conectarse desde cualquier ordenador y tiene todos los permisos sobre la base de datos u otras cuyo nombre comience con .

    • En Unix, ambas cuentas anónimas son para conexiones desde el ordenador local (localhost). Las conexiones deben establecerse desde el ordenador local especificando el nombre de host para una de las cuentas, o el nombre propiamente dicho del host o número de IP para la otra. Estas cuentas tienen todos los permisos sobre la base de datos u otras cuyo nombre comience con .

Como se advierte, ninguna de las cuentas iniciales tiene contraseña. Esto significa que la instalación de MySQL estará desprotegida hasta que:

  • Si se desea evitar que los clientes se conecten como anónimos sin una contraseña, se les puede establecer contraseñas o bien eliminar las cuentas anónimas.

  • Se deberían establecer contraseñas para las cuentas de MySQL.

Las siguientes instrucciones describen cómo establecer contraseñas para las cuentas iniciales de MySQL, primero para las cuentas anónimas y luego para las cuentas . En los ejemplos se debe reemplazar “” con el password que realmente se utilizará. También se instruye cómo eliminar las cuentas anónimas, si se prefiriera impedir completamente el acceso de usuarios anónimos.

Podría desearse posponer la aplicación de contraseñas hasta más tarde, para que no sea necesario ingresarlas mientras se desarrollan tareas adicionales de configuración o prueba. Sin embargo, hay que asegurarse de establecerlas antes de poner la instalación en trabajo de producción real.

Para 1800 proteger con contraseña las cuentas anónimas, puede emplearse tanto como . En ambos casos, hay que asegurarse de encriptar el password utilizando la función .

Para emplear en Windows, hacer lo siguiente:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('');

Para emplear en Unix, hacer lo siguiente:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('');
mysql> SET PASSWORD FOR ''@'' = PASSWORD('');

En la segunda sentencia , debe reemplazarse con el nombre del host del servidor. Este es el nombre que aparece en la columna del registro correspondiente a que no es en la tabla . Si no se puede determinar el nombre de este host, utilizar la siguiente sentencia antes que :

mysql> SELECT Host, User FROM mysql.user;

Localizar el registro que tiene a en la columna y cualquier otro excepto en la columna . Entonces, utilizar ese valor de en la segunda sentencia .

La otra forma de asignar contraseñas a las cuentas anónimas es utilizando para modificar directamente la tabla . Hay que conectarse al servidor como y emitir una sentencia que asigne un valor a la columna en los registros apropiados de la tabla . El procedimiento es igual en Windows y en Unix. La siguiente sentencia asigna una contraseña a las dos cuentas anónimas de una sola vez:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('')
    ->     WHERE User = '';
mysql> FLUSH PRIVILEGES;

Luego de actualizar las contraseñas directamente en la tabla empleando , se le debe indicar al servidor que relea las tablas de privilegios con . De otro modo, los cambios no tendrán efecto hasta que se reinicie el servidor.

Si en lugar de lo anterior se prefiere eliminar las cuentas anónimas, hay que hacer lo siguiente:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;

La sentencia se aplica tanto en Windows como en Unix. En Windows, si solamente se desean remover las cuentas anónimas que tengan los mismos privilegios que , debe hacerse lo siguiente:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
mysql> FLUSH PRIVILEGES;

Esta cuenta permite el acceso anónimo con todos los privilegios, por lo tanto, al removerla se refuerza la seguridad.

A la cuenta se le pueden asignar contraseñas en varias formas. En el tratamiento del tema que se hace a continuación se muestran tres métodos:

  • Usar la sentencia

  • Usar el programa cliente de línea de comandos mysqladmin

  • Usar la sentencia

Para asignar contraseñas empleando , hay que conectarse al servidor como y emitir dos sentencias , asegurándose de encriptar la contraseña con la función .

En Windows se hace así:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('');

En Unix, así:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('');
mysql> SET PASSWORD FOR 'root'@'' = PASSWORD('');

En la segunda sentencia , se debe reemplazar con el nombre del host del servidor. Es el mismo nombre de host que se utilizó al asignar contraseñas a las cuentas anónimas.

Para establecer contraseñas en las cuentas empleando mysqladmin, ejecutar los siguientes comandos:

  shell> mysqladmin -u root password ""
  shell> mysqladmin -u root -h  password ""

Estos comandos se aplican tanto a Windows como a Unix. En el segundo comando, debe reemplazarse con el nombre del host del servidor. Las comillas dobles que encierran la contraseña no son siempre necesarias, pero se las debe usar si la contraseña contiene espacios u otros caracteres que sean especiales para el intérprete de comandos.

También puede usarse para modificar directamente la tabla . La siguiente sentencia establece una contraseña para ambas cuentas de una sola vez:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('')
    ->     WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

La sentencia se aplica tanto a Windows como a Unix.

Luego de establecer las contraseñas, se las deberá suministrar en cada conexión al servidor. Por ejemplo, si se desea emplear mysqladmin para detener el servidor, se debería hacer mediante este comando:

shell> mysqladmin -u root -p shutdown
Enter password: 

Nota: En caso de olvidar la contraseña de despues de establecerla, el procedimiento para reinicializarla se cubre en Sección A.4.1, “Cómo reiniciar la contraseña de root”.

Para configurar nuevas cuentas, se debe usar la sentencia . Para instrucciones consulte Sección 5.7.2, “Añadir nuevas cuentas de usuario a MySQL”.