Al ejecutar programas MySQL se les pueden indicar opciones en varias formas:
-
En la línea de comandos, a continuación del nombre del programa. Este es el modo más común para opciones que se aplican a una ejecución específica del programa.
-
En un fichero de opciones, que el programa lee al iniciarse. Esto es lo acostumbrado para opciones que se desea que el programa use cada vez que se ejecuta.
-
En variables de entorno. Esto es útil para opciones que se desean aplicar cada vez que el programa se ejecuta, si bien en la práctica, para este propósito, es más común emplear ficheros de opciones. En (Sección 5.11.2, “Ejecutar varios servidores en Unix” se expone una situación donde las variables de entorno pueden ser muy útiles. Allí, se describe una práctica técnica que usa estas variables para indicar el número de puerto TCP/IP y el fichero socket de Unix, tanto para los programas cliente como para el servidor.
Los programas MySQL determinan qué opciones les fueron suministradas examinando en primer lugar las variables de entorno, luego los ficheros de opciones, y, finalmente, la línea de comandos. Si una opción se especifica más de una vez, la última tiene precedencia. Esto significa que las variables de entorno tienen la prioridad más baja, y la línea de comandos, la más alta.
Se puede aprovechar la forma en que los programas MySQL procesan las opciones si se especifican las opciones por defecto de un programa dentro de un fichero de opciones. De ese modo, no es necesario tipearlas cada vez que se ejecuta el programa, pero los valores por defecto indicados pueden ser reemplazados por otros que se incluyan en la línea de comandos
Las opciones de programa indicadas en la línea de comandos están sujetas a estas reglas:
-
Las opciones se colocan luego del nombre del comando.
-
Una opción comienza con uno o dos guiones, dependiendo de si se ha utilizado la forma corta o larga de su nombre. Muchas opciones permiten ambas formas. Por ejemplo,
-?
y--help
son, respectivamente, las formas corta y larga de la opción que solicita a un programa MySQL que muestre un mensaje de ayuda. -
Los nombres de opciones son case sensitive. Tanto
-v
como-V
son correctos pero tienen distinto significado. (Corresponden a la forma corta de las opciones--verbose
y--version
.) -
Algunas opciones aceptan que se indique un valor a continuación del nombre. Por ejemplo,
-h localhost
o--host=localhost
indican a un programa cliente MySQL el servidor de bases de datos MySQL a utilizar. El valor de la opción le dice al programa el nombre del ordenador host donde el servidor de bases de datos MySQL se está ejecutando. -
Los nombres de opción largos se separan del valor asignado (si se les asigna uno) con un signo '
=
'. Para un nombre de opción corto, el valor puede escribirse inmediatamente a continuación de la letra de la opción, o puede haber un espacio entre ambos. (-hlocalhost
y-h localhost
son equivalentes.) Una excepción a esta regla es la opción para suministrar la contraseña MySQL. Esta opción puede escribirse en forma larga como--password=
pass_val
o como--password
. En el último caso, donde no se incluyó la contraseña, el programa la solicitará. También puede emplearse una forma corta como-p
pass_val
o como-p
. Sin embargo, en la forma corta, si se suministra una contraseña debe figurar a continuación de la letra de opción sin espacios intermedios. La razón de esto es que, si hay un espacio a continuación de la letra de opción, el programa no tiene modo de saber si el argumento que sigue es la contraseña o alguna otra clase de argumento. Por esto, los siguientes dos comandos tienen significados completamente diferentes:shell> mysql -ptest shell> mysql -p test
El primer comando le dice a mysql que utilice la contraseña
test
, pero no indica una base de datos por defecto. El segundo le dice a mysql que solicite la contraseña y que utilicetest
como base de datos por defecto.
Algunas opciones controlan comportamientos que deben habilitarse
o deshabilitarse. Por ejemplo, el cliente
mysql soporta una opción
--column-names
que determina si se mostrará o
no una fila con los nombres de cada columna al principio de los
resultados de una consulta. Por defecto, esta opción se
encuentra habilitada. Sin embargo, en algunos casos se podria
desear que permanezca inhabilitada, por ejemplo cuando la salida
producida por mysql debe ser enviada a otro
programa que espera sólo datos y no una linea inicial de
encabezados.
Para deshabilitar los nombres de columnas, se especifica la opción empleando cualquiera de estas formas:
--disable-column-names --skip-column-names --column-names=0
Los prefijos --disable
y
--skip
y el sufijo =0
tienen
el mismo efecto: deshabilitar la opción.
El modo “enabled” (habilitado) de la opción puede ser especificado en cualquiera de estas formas:
--column-names --enable-column-names --column-names=1
Si una opción se antecede con el prefijo
--loose
, el programa no terminará con un error
si no es capaz de reconocer la opción, en lugar de ello
emitirá una advertencia:
shell> mysql --loose-no-such-option mysql: WARNING: unknown option '--no-such-option'
El prefijo --loose
puede ser útil cuando se
ejecutan programas pertenecientes a múltiples versiones de
MySQL en el mismo ordenador. Es particularmente útil cuando se
utiliza un fichero de opciones. Una opción que puede no ser
reconocida por todas las versiones de un programa, se antecede
con el prefijo --loose
(o bien
loose
en el caso de un fichero de opciones).
Aquellas versiones de un programa que no reconozcan la opción
emitirán una advertencia y la ignorarán.
Nota: Esta estrategia requiere
que las versiones involucradas sean la 4.0.2 o posteriores, dado
que antes de esa versión no existía el prefijo
--loose
.
Otra opción que puede ser ocasionalmente útil con
mysql es -e
o
--execute
, la cual se utiliza para enviar
sentencias SQL al servidor. Las sentencias deben estar colocadas
entre comillas (dobles o simples). No obstante, si se desea
incluir dentro de la consulta valores colocados entre comillas,
habría que emplear comillas dobles para delimitar la consulta y
simples para los valores en su interior. Cuando se utiliza esta
opción, mysql retorna al prompt del
intérprete de comandos inmediatamente después de ejecutar la
sentencia.
Por ejemplo, para obtener una lista de cuentas de usuario, puede hacerse lo siguiente:
shell> mysql -u root -p -e "SELECT User, Host FROM user" mysql
Enter password: ******
+------+-----------+
| User | Host |
+------+-----------+
| | gigan |
| root | gigan |
| | localhost |
| jon | localhost |
| root | localhost |
+------+-----------+
shell>
Observe que el nombre de la base de datos
mysql
fue pasado como un argumento separado.
Sin embargo, la misma consulta se hubiera ejecutado indicando
mysql -u root -p -e "SELECT User, Host FROM
mysql.user" en el intérprete de comandos.
De este modo se pueden ejecutar múltiples sentencias SQL, si se las separa con punto y coma:
shell> mysql -u root -p --execute="SELECT Name FROM Country WHERE Name LIKE 'AU%';SELECT COUNT(*) FROM City" world
Enter password: ******
+-----------+
| Name |
+-----------+
| Australia |
| Austria |
+-----------+
+----------+
| COUNT(*) |
+----------+
| 4079 |
+----------+
Observe que la forma larga (--execute
) debe ser
seguida por un signo igual(=
).
La opción -e
puede usarse del mismo modo para
pasar comandos al cliente de administración para MySQL Cluster
ndb_mgm. Consulte
Sección 16.3.6, “Apagado y encendido seguros” para ver un ejemplo.
Los programas MySQL pueden leer opciones de inicio desde ficheros de opciones (también llamados a veces ficheros de configuración). Los ficheros de opciones porporcionan una forma conveniente de especificar opciones comúnmente usadas sin que sea necesario ingresarlas en la línea de comandos cada vez que se ejecuta el programa.
Los siguientes programas soportan ficheros de opciones: myisamchk, myisampack, mysql, mysql.server, mysqladmin, mysqlbinlog, mysqlcc, mysqlcheck, mysqld_safe, mysqldump, mysqld, mysqlhotcopy, mysqlimport, y mysqlshow.
Nota: el uso de ficheros de opciones con programas de MySQL Cluster se cubre en Sección 16.4, “Configuración de MySQL Cluster”.
En Windows, los programas MySQL leen sus opciones de inicio en los siguientes ficheros:
Fichero | Contenido |
WINDIR \my.ini |
Opciones globales |
C:\my.cnf
|
Opciones globales |
INSTALLDIR \my.ini |
Opciones globales |
defaults-extra-file
|
El archivo especificado con
--defaults-extra-file= ruta ,
si existe. |
WINDIR
representa la ubicación del
directorio Windows. Por lo general, es
C:\WINDOWS
o C:\WINNT
.
Se puede determinar la localización exacta a través del valor
de la variable de entorno WINDIR
utilizando
el siguiente comando:
C:\> echo %WINDIR%
INSTALLDIR
representa el directorio
de instalación de MySQL. Este es generalmente
C:\
PROGRAMDIR
\MySQL\MySQL
5.0 Server, donde
PROGRAMDIR
representa el directorio
de programas (usualmente Archivos de
Programa
en versiones de Windows en español), donde
se instaló MySQL 5.0 mediante los asistentes de instalación y
configuración. Consulte
Sección 2.3.5.14, “Dónde está el fichero my.ini”.
En Unix, los programas MySQL leen sus opciones de inicio en los siguientes ficheros:
Fichero | Contenido |
/etc/my.cnf
|
Opciones globales |
$MYSQL_HOME/my.cnf
|
Opciones específicas del servidor |
defaults-extra-file
|
El archivo especificado con
--defaults-extra-file= ruta ,
si existe. |
~/.my.cnf
|
Opciones específicas del usuario |
MYSQL_HOME
es una variable de entorno que
contiene la ruta al directorio donde reside el fichero
my.cnf
específico del servidor. (Este era
DATADIR
anteriormente a MySQL versión
5.0.3.)
Si MYSQL_HOME
no tiene un valor establecido y
hay un fichero my.cnf
en
DATADIR
y no hay un fichero
my.cnf
en BASEDIR
,
mysqld_safe
establece el valor de
MYSQL_HOME
en
DATADIR
. De otro modo, si
MYSQL_HOME
no tiene un valor establecido y no
hay un fichero my.cnf
en
DATADIR
, entonces
mysqld_safe
establece el valor de
MYSQL_HOME
en
BASEDIR
.
Generalmente es /usr/local/mysql/data
para
una instalación binaria o /usr/local/var
para una instalación de código fuente. Observe que se trata de
la ubicación del directorio de datos que se indicó al momento
de la configuración, no de la especificada con
--datadir
cuando se inicia
mysqld. El uso de --datadir
no tiene efecto sobre el lugar donde el servidor busca los
ficheros de opciones, porque esta búsqueda se produce antes de
procesar cualquier argumento de línea de comandos.
MySQL busca ficheros de opciones exactamente en el orden descripto en la tabla y lee cualquiera que exista. Si se desea utilizar un fichero de opciones que no existe, se lo debe crear con un editor de texto plano. De existir múltiples ficheros de opciones, las opciones leidas en último lugar prevalecen sobre las anteriores.
Nota: En plataformas Unix, MySQL ignorará todo fichero de configuración que tenga permiso world-writable (esto es, modificable por todos los usuarios). Esto ha sido implementado intencionalmente como medida de seguridad.
Cualquier opción en formato de nombre largo que pueda
suministrarse en la línea de comandos al ejecutar un programa
MySQL puede ser colocada también en un fichero de opciones.
Para obtener la lista de opciones disponibles para un programa
determinado, el mismo debe ejecutarse con la opción
--help
.
La sintaxis para especificar opciones en un fichero es similar a
cuando se hace en la línea de comandos, con la excepción de
que se deben omitir los dos guiones iniciales.Por ejemplo,
--quick
o --host=localhost
en
la linea de comandos debería especificarse como
quick
o host=localhost
en
un fichero de opciones. Para indicar una opción de la forma
--loose-
opt_name
en
un fichero, debe escribirse como
loose-
opt_name
.
Las lineas vacías de los ficheros de opciones se ignoran. Las líneas no vacías pueden tomar cualquiera de las siguientes formas:
-
#
comentario
,;
comentario
Las líneas de comentario comienzan con '
#
' o ';
'. Un comentario '#
' puede aparecer incluso en el medio de una linea. -
[
grupo
]grupo
es el nombre del programa o grupo para el cual se desea establecer opciones. Después de una linea de este tipo, cualquier lineaopción
oset-variable
se aplicará a ese grupo hasta el final del fichero o hasta que se encuentre otra líneagrupo
. -
opción
Equivale a
--
opción
en la línea de comandos. -
opción
=valor
Equivale a
--
opción
=valor
en la línea de comandos. En un fichero de opciones está permitido colocar espacios a ambos lados del carácter '=
', algo que no es posible en la línea de comandos. En MySQL 5.0 se puede encerrar el valor entre comillas simples o dobles. Esto es útil si el valor contiene un carácter como comentario '#
' o espacios en blanco.
Los espacios en blanco sobrantes son automáticamente eliminados
de los nombres de opciones y valores. se pueden utilizar las
secuencias de escape '\b
',
'\t
', '\n
',
'\r
', '\\
', y
'\s
' al especificar el valor de una opción
si es necesario representar los caracteres backspace, tab, salto
de linea, retorno de carro y espacio.
En Windows, si el valor de una opción representa una ruta a un
directorio o un fichero, se debería especificar el valor
utilizando '/
' en lugar
'\
' como separador. Si se emplea
'\
', debe duplicarse y poner
'\\
', puesto que '\
' es el
caracter de escape en MySQL.
Si el nombre de un grupo es igual que el de un programa, las opciones en el grupo se aplicarán específicamente a ese programa.
El grupo de opciones [client]
es leido por
todos los programas clientes (pero
no por
mysqld). Esto permite especificar opciones
aplicables a todos los clientes. Por ejemplo,
[client]
es el grupo perfecto para indicar la
contraseña que se utiliza para conectarse al server. (Pero es
necesario asegurarse que el fichero de opciones es accesible
para lectura y escritura solamente por Usted, de modo que otras
personas no puedan conocer la contraseña). Una opción no debe
colocarse en el grupo [client]
a menos que
sea reconocida por todos los programas
cliente que se utilizan. Los programas que no la soporten
terminarán después de mostrar un mensaje de error si se los
intenta ejecutar.
A partir de MySQL 5.0.4 en la serie 5.0, es posible emplear
directivas !include
en los ficheros de
opciones para incluir ficheros específicos y
!includedir
para incluir directorios Por
ejemplo, para incluir el fichero
/home/mydir/myopt.cnf
, se puede usar lo
siguiente:
!include /home/me/myopt.cnf
Para buscar en el directorio /home/mydir
todos los ficheros con extensión .cnf
y
leerlos como ficheros de opciones, se debería utilizar:
!includedir /home/mydir
Observe que estas opciones son específicas de cada sección.
Por ejemplo, suponga que fuera a utilizar en
my.cnf
algo como lo siguiente:
[mysqld] !include /home/mydir/myopt.cnf
En ese caso, el fichero myopt.cnf
sólo
sería procesado por el servidor, y la directiva
!include
sería ignorada por cualquier
aplicación cliente. Sin embargo, si empleara:
[mysqldump] !includedir /home/mydir/my-dump-options
entonces el directorio
/home/mydir/my-dump-options
sería
verificado en busca de ficheros de opciones con extensión
.cnf
únicamente por
mysqldump y no por el servidor o por otras
aplicaciones cliente.
Nota: En la actualidad,
cualquier fichero que deba ser encontrado e incluido al usar la
directiva !includedir
debe tener en su nombre la
extensión .cnf
. En Windows, esta directiva
también verifica en busca de ficheros con extensión
.ini
.
En la versión 4.0.14 de MySQL y posteriores, si se desea crear
un grupo de opciones que deba ser leido únicamente por una
versión específica de mysqld, se puede
hacer dando a los grupos de opciones nombres como los
siguientes: [mysqld-4.0]
,
[mysqld-4.1]
,
[mysqld-5.0]
, y así sucesivamente. El
siguiente grupo indica que la opción --new
debería ser aplicada sólo por servidores de bases de datos
MySQL versión 5.0.x:
[mysqld-5.0] new
Aquí hay un fichero de opciones globales típico:
[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock key_buffer_size=16M max_allowed_packet=8M [mysqldump] quick
El fichero de opciones anterior utiliza la sintaxis
var_name
=value
para las líneas que establecen los valores de las variables
key_buffer_size
y
max_allowed_packet
.
Este es un fichero de opciones de usuario típico:
[client] # El siguiente password se enviará a todos los clientes MySQL estándar password="my_password" [mysql] no-auto-rehash connect_timeout=2 [mysqlhotcopy] interactive-timeout
Si tiene una distribución de código fuente, podrá encontrar
ficheros de opciones de ejemplo llamados
my-
xxxx
.cnf en
el directorio support-files
. Si tiene una
distribución binaria, busque en el directorio
support-files
bajo el directorio de
instalación de MySQL. En Windows, los ficheros de opciones de
ejemplo también se encuentran en el directorio de instalación
de MySQL. (vea anteriormente en esta sección o
Capítulo 2, Instalar MySQL si no sabe dónde se encuentra este
directorio). Actualmente hay ficheros de opciones para sistemas
pequeños, medios, grandes y muy grandes. Para experimentar con
uno de estos ficheros, se lo debe copiar como
C:\my.cnf
en Windows o como
.my.cnf
en el directorio home en Unix.
Nota: La extensión
.cnf
de los ficheros de opciones podría no
mostrarse en Windows
Todos los programas MySQL que soportan ficheros de opciones manejan las siguientes opciones de línea de comandos:
-
--no-defaults
No lee ningún fichero de opciones.
-
--print-defaults
Imprime el nombre del programa y todas las opciones que obtiene desde los ficheros de opciones.
-
--defaults-file=
path_name
Utiliza solamente el fichero de opciones especificado.
path_name
es la ruta completa al fichero. -
--defaults-extra-file=
path_name
Utiliza el fichero de opciones especificado, lo procesa luego del fichero global de opciones pero antes del fichero de opciones del usuario.
path_name
es la ruta completa al fichero.
Para funcionar correctamente, cada una de estas opciones debe
colocarse en la línea de comandos inmediatamente a
continuación del nombre del comando, a excepción de
--print-defaults
que puede aparecer luego de
--defaults-file
o
--defaults-extra-file
.
En los scripts del shell puede utilizar el programa
my_print_defaults para procesar ficheros de
opciones. El siguente ejemplo muestra la salida que
my_print_defaults produciría al solicitarle
que muestre las opciones halladas en los grupos
[client]
y [mysql]
:
shell> my_print_defaults client mysql --port=3306 --socket=/tmp/mysql.sock --no-auto-rehash
Nota para desarrolladores: El manejo de ficheros de opciones está implementado en la librería cliente C simplemente a través del procesamiento de todas las opciones coincidentes (esto es, opciones en el grupo apropiado) antes que cualquier argumento de la línea de comandos. Esto funciona bien con programas que emplean la última aparición de una opción especificada múltiples veces. Si se tiene un programa C o C++ que maneja opciones especificadas múltiples veces pero que no lee ficheros de opciones, se necesita agregar solamente dos lineas para darle esa capacidad. Examine el código fuente de cualquiera de los programas cliente estándar de MySQL para ver cómo se hace.
Varias otras interfaces con MySQL pertenecientes a otros lenguajes se basan en la librería cliente de C, y algunas de ellas proporcionan una forma de acceder al contenido de ficheros de opciones. Esto incluye a Perl y Python. Consulte la documentación de su interface preferida para más detalles.
Para especificar una opción empleando una variable de entorno,
se establece el valor de la variable usando la sintaxis
apropiada del procesador de comandos. Por ejemplo, en Windows o
NetWare se establece la variable USER
para
indicar el nombre de la cuenta MySQL. Para hacerlo, se usa esta
sintaxis:
SET USER=your_name
La sintaxis en Unix depende del shell. En el supuesto de que se
quisiera especificar el número de puerto TCP/IP empleando la
variable MYSQL_TCP_PORT
, la sintaxis típica
(tal como se hace en sh,
bash
, zsh, etc.) es la
siguiente:
MYSQL_TCP_PORT=3306 export MYSQL_TCP_PORT
El primer comando establece el valor de la variable, y el
comando export
exporta la variable hacia el
entorno del shell de forma que su valor sea accesible a MySQL y
otros procesos.
csh y tcsh son un caso similar. Cuando se ejecuta estos shells, se debe usar setenv para que el valor de la variable esté disponible para el entorno:
setenv MYSQL_TCP_PORT 3306
El comando que establece el valor de las variables de entorno
puede ejecutarse en el intérprete de comandos para que tenga
efecto inmediatamente. Estos valores existen hasta que se cierra
la sesión de usuario. Para que los valores tomen efecto cada
vez que se inicia sesión, deben ubicarse los comandos en un
fichero de inicio que el intérprete de comandos lea en cada
arranque. Algunos ficheros de inicio típicos son
AUTOEXEC.BAT
para Windows,
.bash_profile
para bash,
o .tcshrc
para tcsh.
Consulte la documentación de su intérprete de comandos para
detalles más específicos.
En Apéndice E, Variables de entorno se listan todas las variables de entorno que afectan la operación de los programas MySQL.
Muchos programas MySQL tienen variables internas que pueden ser
establecidas en tiempo de ejecución. En MySQL 5.0, las
variables de los programas reciben un valor del mismo modo que
cualquier otra opción de nombre largo que tome valores. Por
ejemplo, mysql tiene una variable
max_allowed_packet
que controla el máximo
tamaño de su buffer de comunicación. Para establecer el valor
de la variable max_allowed_packet
de
mysql en 16MB, use cualquiera de los
siguientes comandos:
shell> mysql --max_allowed_packet=16777216 shell> mysql --max_allowed_packet=16M
El primer comando especifica el valor en bytes. El segundo
especifica el valor en megabytes. Los valores de las variables
pueden tener un sufijo K
,
M
, o G
(ya sea en
mayúsculas o minúsculas) para indicar la unidad, que puede ser
kilobytes, megabytes, o gigabytes.
En un fichero de opciones, la variable se coloca sin precederla con dos guiones:
[mysql] max_allowed_packet=16777216
O bien:
[mysql] max_allowed_packet=16M
Si lo prefiere, los caracteres de subrayado en una variable pueden cambiarse por guiones:
Nota: La antigua sintaxis
--set-variable =
opcion
=valor
aún se reconoce en MySQL 5.0, pero está obsoleta
Algunas variables del servidor pueden recibir valores en tiempo de ejecución. Para más detalles, consulte Sección 5.3.3.1, “Variables de sistema dinámicas”.