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”.
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 mysql
, 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”.
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
mysql
. Se asume que dicha cuenta existe. La
cuenta mysql
puede haber sido creda
especialmente o bien originarse al cambiar el nombre de una
cuenta existente.
-
Posicionarse en el nivel más alto del directorio de instalación de MySQL, representado por
BASEDIR
:shell> cd
BASEDIR
BASEDIR
muy probablemente se reemplace por algo similar a/usr/local/mysql
o/usr/local
. Los siguientes pasos asumen que se está en este directorio. -
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
bin
oscripts
: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
mysql
que almacena todos los privilegios para el servidor, y la base de datostest
que puede emplearse para probar MySQL. El script también crea entradas en la tabla de permisos para la cuentaroot
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 usuarioroot
de MySQL hacer cualquier cosa, y le permiten a cualquier usuario de MySQL crear o utilizar bases de datos cuyo nombre seatest
o comience contest_
.Es importante asegurarse de que los directorios y ficheros de bases de datos tienen como propietario a la cuenta de inicio de sesión
mysql
, 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á comoroot
del sistema operativo, hay que usar la opción--user
como se muestra. En otro caso, el script se deberá ejecutar mientras se está como usuariomysql
del sistema operativo, en cuyo caso se puede omitir la opción--user
.mysql_install_db crea varias tablas en la base de datos
mysql
, incluyendouser
,db
,host
,tables_priv
,columns_priv
, yfunc
, 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
test
, 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
GRANT
yREVOKE
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 emplearmysql -u root mysql
para conectarse al servidor como usuarioroot
de MySQL y aplicar las sentenciasGRANT
yREVOKE
que sean necesarias.Si se desea instalar MySQL en varios ordenadores con los mismos privilegios, se pueden colocar las sentencias
GRANT
yREVOKE
en un fichero y ejecutarlo como un script utilizandomysql
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
GRANT
yREVOKE
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
.frm
,.MYI
, y.MYD
en el directorio que contiene la base de datosmysql
. (Este es el directorio llamadomysql
dentro del directorio de datos, el cual aparece listado como el valordatadir
cuando se ejecuta mysqld --help.) Luego debe ejecutarse nuevamente el script mysql_install_db -
Se puede iniciar mysqld manualmente utilizando la opción
--skip-grant-tables
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.
-
-
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
root
). Para cerciorarse de esto, se debe usar la opción--user
si se ejecutamysql_safe
habiendo iniciado sesión del sistema operativo comoroot
. En otro caso, se debería ejecutar el script mientras se ha iniciado sesión comomysql
, en cuyo caso se puede omitir la opción--user
.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”.
-
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
--help
. -
Verificar que se pueda detener el servidor:
shell> bin/mysqladmin -u root shutdown
-
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”.
-
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_% | | +------+--------+------+
-
Hay un conjunto de pruebas de rendimiento en el directorio
sql-bench
(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
sql-bench/Results
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
sql-bench
, 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 rendimientosql-bench
) 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 llamadomysql-bench-
VERSION
-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
tests
. Por ejemplo, para ejecutarauto_increment.tst
, 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
./tests/auto_increment.res
. -
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 mysql
. 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”.
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 mysql
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
XXXXXX
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
/tmp
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
/tmp
), 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=/
some_tmp_dir
/ shell> MYSQL_UNIX_PORT=/some_tmp_dir
/mysql.sock shell> export TMPDIR MYSQL_UNIX_PORTsome_tmp_dir
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
scripts
, debe modificarse el primer comando para que digascripts/mysql_install_db
.Consulte Sección A.4.5, “Cómo proteger o cambiar el fichero socket de MySQL
/tmp/mysql.sock
”. Consulte Apéndice E, Variables de entorno.
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
mysql
. 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 start
o
stop
:
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
user
al grupo [mysqld]
del fichero de opciones /etc/my.cnf
, 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
cd
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 /etc/rc*
.
Si se emplea el paquete RPM de servidor para Linux
(MySQL-server-
VERSION
.rpm),
el script mysql.server se instala en el
directorio /etc/init.d
con el nombre
mysql
. 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
support-files
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
/etc/init.d
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
/etc/rc.d/init.d
en lugar de
/etc/init.d
. Los comandos anteriores
deben modificarse de acuerdo a esto. Alternativamente, puede
crearse primero /etc/init.d
como un
vínculo simbólico que apunte a
/etc/rc.d/init.d
:
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
chkconfig
:
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 /usr/local/etc/rc.d/
. La página de
manual rc(8)
establece que los scripts en
dicho directorio se ejecutan solamente si su nombre base
concuerda con el patrón de nombre de fichero shell
*.sh
. Cualquier otro fichero o directorio
presente dentro del directorio es ignorado sin advertencias.
En otras palabras, en FreeBSD, se debería instalar el script
mysql.server
como
/usr/local/etc/rc.d/mysql.server.sh
para
habilitar el inicio automático.
Como una alternativa a la configuración anterior, algunos
sistemas operativos también emplean
/etc/rc.local
o
/etc/init.d/boot.local
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 /etc/my.cnf
. Un
típico fichero /etc/my.cnf
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: basedir
,
datadir
, y pid-file
. 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 start
y
stop
.
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 | [mysqld] , [server] ,
[mysqld-versión principal] |
mysql.server | [mysqld] , [mysql.server] ,
[server] |
mysqld_safe | [mysqld] , [server] ,
[mysqld_safe] |
[mysqld-versión principal]
significa que
los grupos con nombres como [mysqld-4.0]
,
[mysqld-4.1]
, y
[mysqld-5.0]
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
[mysql_server]
y
mysqld_safe también lee el grupo
[safe_mysqld]
. No obstante, cuando se
emplee MySQL 5.0, se debería actualizar el fichero de
opciones para que contenga los grupos
[mysql.server]
y
[mysqld_safe]
.
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
my.cnf
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
(InnoDB
, BDB
), hay que
asegurarse de que se han configurado según lo deseado antes
de iniciar el servidor:
-
Si se están empleando tablas
InnoDB
, hay que remitirse a las opciones de inicio específicas. En MySQL 5.0,InnoDB
utiliza valores por defecto para sus opciones de configuración si no se indica ninguna. Consulte Sección 15.3, “Configuración deInnoDB
”. -
Si se están usando tablas
BDB
(Berkeley DB), será necesario familiarizarse con las diferentes opciones de inicio específicas deBDB
. Consulte Sección 14.4.3, “Opciones de arranque deBDB
”.
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
--verbose
y --help
.
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 --datadir
.
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
--basedir
option.
Para verificar los efectos de especificar opciones de ruta,
hay que invocar mysqld con dichas opciones
seguidas de --verbose
y
--help
. 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
/usr/local
:
shell> ./mysqld --basedir=/usr/local --verbose --help
Se pueden suministrar otras opciones, como
--datadir
, pero hay que tener en cuenta que
--verbose
y --help
deben
aparecer en último lugar.
Una vez que se haya logrado determinar la configuración de
ruta deseada, iniciar el servidor sin
--verbose
y --help
.
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 host_name
variables
host_name
es el nombre del host del
servidor MySQL.
Si se obtuviera el Errcode 13
(que
significa Permission denied (permiso
denegado)
) 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 root
, 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
/usr/local/mysql/var
, 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, C:\Program
Files\MySQL\MySQL Server 5.0\data
en Windows,
/usr/local/mysql/data
en una
distribución binaria de Linux, y
/usr/local/var
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
host_name
.err
y
host_name
.log,
donde host_name
es el nombre del
host del servidor. Luego, examinar las últimas líneas de
estos ficheros. En Unix, puede utilizarse
tail
para mostrarlas:
shell> tailhost_name
.err shell> tailhost_name
.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 --bdb-no-recover
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
BDB
reciben nombres en secuencia comenzando
en log.0000000001
, donde el número se
incrementa cada vez.
Si se está ejecutando mysqld con soporte
para tablas BDB
y mysqld
realiza un volcado del núcleo al inicio, podría deberse a
problemas con el registro de recuperación de
BDB
. En este caso, se puede intentar el
inicio de mysqld con
--bdb-no-recover
. Si esto ayuda, entonces
se deberían eliminar todos los ficheros de registro
BDB
del directorio de datos e intentar el
inicio de mysqld nuevamente, sin la opción
--bdb-no-recover
.
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 telnet nombre-de-host
número-puerto-TCP-IP
. (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 telnet:
Unable to connect to remote host: Connection
refused
, 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
--port
. 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
/etc/hosts
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 --debug
. 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.
Una parte del proceso de instalación de MySQL es configurar la
base de datos mysql
, 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
root
. Son cuentas de superusuario que pueden realizar cualquier tarea. Inicialmente las cuentasroot
no tienen contraseñas, de forma que cualquier persona puede conectarse al servidor MySQL comoroot
sin una contraseña y recibirá todos los privilegios.-
En Windows, una cuenta
root
sirve para conectarse desde el ordenador local (localhost) y la otra permite conectarse desde cualquier ordenador. -
En Unix, ambas cuentas
root
son para conexiones desde el ordenador local (localhost). Las conexiones deben establecerse desde el ordenador local especificando el nombre de hostlocalhost
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
root
. La otra sirve para conectarse desde cualquier ordenador y tiene todos los permisos sobre la base de datostest
u otras cuyo nombre comience contest
. -
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
localhost
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 datostest
u otras cuyo nombre comience contest
.
-
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
root
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
root
. En los ejemplos se debe reemplazar
“newpwd
” 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 SET PASSWORD
como
UPDATE
. En ambos casos, hay que asegurarse de
encriptar el password utilizando la función
PASSWORD()
.
Para emplear SET PASSWORD
en Windows, hacer
lo siguiente:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd
');
Para emplear SET PASSWORD
en Unix, hacer lo
siguiente:
shell> mysql -u root mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR ''@'host_name
' = PASSWORD('newpwd
');
En la segunda sentencia SET PASSWORD
, debe
reemplazarse host_name
con el nombre
del host del servidor. Este es el nombre que aparece en la
columna Host
del registro correspondiente a
root
que no es localhost
en la tabla user
. Si no se puede determinar
el nombre de este host, utilizar la siguiente sentencia antes
que SET PASSWORD
:
mysql> SELECT Host, User FROM mysql.user;
Localizar el registro que tiene a root
en la
columna User
y cualquier otro excepto
localhost
en la columna
Host
. Entonces, utilizar ese valor de
Host
en la segunda sentencia SET
PASSWORD
.
La otra forma de asignar contraseñas a las cuentas anónimas es
utilizando UPDATE
para modificar directamente
la tabla user
. Hay que conectarse al servidor
como root
y emitir una sentencia
UPDATE
que asigne un valor a la columna
Password
en los registros apropiados de la
tabla user
. El procedimiento es igual en
Windows y en Unix. La siguiente sentencia
UPDATE
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('newpwd
')
-> WHERE User = '';
mysql> FLUSH PRIVILEGES;
Luego de actualizar las contraseñas directamente en la tabla
user
empleando UPDATE
, se
le debe indicar al servidor que relea las tablas de privilegios
con FLUSH PRIVILEGES
. 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 DELETE
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
root
, 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 root
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
SET PASSWORD
-
Usar el programa cliente de línea de comandos mysqladmin
-
Usar la sentencia
UPDATE
Para asignar contraseñas empleando SET
PASSWORD
, hay que conectarse al servidor como
root
y emitir dos sentencias SET
PASSWORD
, asegurándose de encriptar la contraseña
con la función PASSWORD()
.
En Windows se hace así:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd
');
En Unix, así:
shell> mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
'); mysql> SET PASSWORD FOR 'root'@'host_name
' = PASSWORD('newpwd
');
En la segunda sentencia SET PASSWORD
, se debe
reemplazar host_name
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
root
empleando mysqladmin,
ejecutar los siguientes comandos:
shell> mysqladmin -u root password "newpwd
" shell> mysqladmin -u root -hhost_name
password "newpwd
"
Estos comandos se aplican tanto a Windows como a Unix. En el
segundo comando, host_name
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 UPDATE
para modificar
directamente la tabla user
. La siguiente
sentencia UPDATE
establece una contraseña
para ambas cuentas root
de una sola vez:
shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd
')
-> WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
La sentencia UPDATE
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: (enter root password here)
Nota: En caso de olvidar la
contraseña de root
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
GRANT
. Para instrucciones consulte
Sección 5.7.2, “Añadir nuevas cuentas de usuario a MySQL”.