4.3. Especificar opciones de programa

MySQL 5.0

4.3. Especificar opciones de programa

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

4.3.1. Usar opciones en la raya de comando

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 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 como son correctos pero tienen distinto significado. (Corresponden a la forma corta de las opciones y .)

  • Algunas opciones aceptan que se indique un valor a continuación del nombre. Por ejemplo, o 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. ( y 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 o como . En el último caso, donde no se incluyó la contraseña, el programa la solicitará. También puede emplearse una forma corta como o como . 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 , pero no indica una base de datos por defecto. El segundo le dice a mysql que solicite la contraseña y que utilice como base de datos por defecto.

Algunas opciones controlan comportamientos que deben habilitarse o deshabilitarse. Por ejemplo, el cliente mysql soporta una opción 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 y y el sufijo 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 , 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 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 (o bien 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 .

Otra opción que puede ser ocasionalmente útil con mysql es o , 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 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 () debe ser seguida por un signo igual().

La opción 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.

4.3.2. Usar ficheros de opciones

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
\my.ini Opciones globales
Opciones globales
\my.ini Opciones globales
El archivo especificado con , si existe.

representa la ubicación del directorio Windows. Por lo general, es o . Se puede determinar la localización exacta a través del valor de la variable de entorno utilizando el siguiente comando:

C:\> echo %WINDIR%

representa el directorio de instalación de MySQL. Este es generalmente \MySQL\MySQL 5.0 Server, donde representa el directorio de programas (usualmente 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
Opciones globales
Opciones específicas del servidor
El archivo especificado con , si existe.
Opciones específicas del usuario

es una variable de entorno que contiene la ruta al directorio donde reside el fichero específico del servidor. (Este era anteriormente a MySQL versión 5.0.3.)

Si no tiene un valor establecido y hay un fichero en y no hay un fichero en , establece el valor de en . De otro modo, si no tiene un valor establecido y no hay un fichero en , entonces establece el valor de en .

Generalmente es para una instalación binaria o 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 cuando se inicia mysqld. El uso de 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 .

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, o en la linea de comandos debería especificarse como o en un fichero de opciones. Para indicar una opción de la forma en un fichero, debe escribirse como .

Las lineas vacías de los ficheros de opciones se ignoran. Las líneas no vacías pueden tomar cualquiera de las siguientes formas:

  • ,

    Las líneas de comentario comienzan con '' o ''. Un comentario '' puede aparecer incluso en el medio de una linea.

  • ]

    es el nombre del programa o grupo para el cual se desea establecer opciones. Después de una linea de este tipo, cualquier linea o se aplicará a ese grupo hasta el final del fichero o hasta que se encuentre otra línea .

  • Equivale a en la línea de comandos.

  • =

    Equivale a = 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 '', '', '', '', '', y '' 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 es leido por todos los programas clientes (pero no por mysqld). Esto permite especificar opciones aplicables a todos los clientes. Por ejemplo, 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 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 en los ficheros de opciones para incluir ficheros específicos y para incluir directorios Por ejemplo, para incluir el fichero , se puede usar lo siguiente:

!include /home/me/myopt.cnf

Para buscar en el directorio todos los ficheros con extensión 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 algo como lo siguiente:

[mysqld]
!include /home/mydir/myopt.cnf

En ese caso, el fichero sólo sería procesado por el servidor, y la directiva sería ignorada por cualquier aplicación cliente. Sin embargo, si empleara:

[mysqldump]
!includedir /home/mydir/my-dump-options

entonces el directorio sería verificado en busca de ficheros de opciones con extensión ú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 debe tener en su nombre la extensión . En Windows, esta directiva también verifica en busca de ficheros con extensión .

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: , , , y así sucesivamente. El siguiente grupo indica que la opción 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 = para las líneas que establecen los valores de las variables y .

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 .cnf en el directorio . Si tiene una distribución binaria, busque en el directorio 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 en Windows o como en el directorio home en Unix.

Nota: La extensión 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 lee ningún fichero de opciones.

  • Imprime el nombre del programa y todas las opciones que obtiene desde los ficheros de opciones.

  • Utiliza solamente el fichero de opciones especificado. es la ruta completa al fichero.

  • Utiliza el fichero de opciones especificado, lo procesa luego del fichero global de opciones pero antes del fichero de opciones del usuario. 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 que puede aparecer luego de o .

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 y :

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.

4.3.3. Usar variables de entorno para especificar opciones

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 para indicar el nombre de la cuenta MySQL. Para hacerlo, se usa esta sintaxis:

SET USER=

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 , la sintaxis típica (tal como se hace en sh, , 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 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 para Windows, para bash, o 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.

4.3.4. Utilización de opciones para establecer variables de programa

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 que controla el máximo tamaño de su buffer de comunicación. Para establecer el valor de la variable 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 , , o (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 = 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”.