4.2.4 Conexión al servidor MySQL mediante opciones de comando
Esta sección describe el uso de las opciones de línea de comando para especificar cómo establecer conexiones al servidor MySQL, para clientes como mysql o mysqldump. Para obtener información sobre cómo establecer conexiones utilizando cadenas de conexión tipo URI o pares clave-valor, para clientes como MySQL Shell, consulte la Sección 4.2.5, «Conexión al servidor utilizando cadenas tipo URI o pares clave-valor». Para obtener información adicional si no puede conectarse, consulte la Sección 6.2.21, «Solución de problemas de conexión a MySQL».
Para que un programa cliente se conecte al servidor MySQL, debe utilizar los parámetros de conexión adecuados, como el nombre del host donde se ejecuta el servidor y el nombre de usuario y la contraseña de su cuenta MySQL. Cada parámetro de conexión tiene un valor predeterminado, pero puede anular los valores predeterminados según sea necesario utilizando las opciones del programa especificadas en la línea de comandos o en un archivo de opciones.
Los ejemplos aquí utilizan el programa cliente mysql, pero los principios se aplican a otros clientes como mysqldump, mysqladmin o mysqlshow.
Este comando invoca a mysql sin especificar ningún parámetro de conexión explícito:
mysql
Como no hay opciones de parámetros, se aplican los valores por defecto:
-
El nombre de host por defecto es
localhost
. En Unix, esto tiene un significado especial, como se describe más adelante. -
El nombre de usuario por defecto es
ODBC
en Windows o su nombre de usuario en Unix. -
No se envía ninguna contraseña porque no se da ni
--password
ni-p
. -
Para mysql, el primer argumento no opcional se toma como el nombre de la base de datos por defecto. Como no hay tal argumento, mysql no selecciona ninguna base de datos por defecto.
Para especificar el nombre de host y el nombre de usuario explícitamente, así como una contraseña, suministre las opciones apropiadas en la línea de comandos. Para seleccionar una base de datos por defecto, añada un argumento de nombre de base de datos. Ejemplos:
mysql --host=localhost --user=myname --password=password mydbmysql -h localhost -u myname -ppassword mydb
Para las opciones de contraseña, el valor de la contraseña es opcional:
-
Si utiliza una opción
--password
o-p
y especifica un valor de contraseña, no debe haber ningún espacio entre--password=
o-p
y la contraseña que le sigue. -
Si utiliza
--password
o-p
pero no especifica un valor de contraseña, el programa cliente le pide que introduzca la contraseña. La contraseña no se muestra mientras se introduce. Esto es más seguro que dar la contraseña en la línea de comandos, lo que podría permitir a otros usuarios de su sistema ver la línea de contraseña ejecutando un comando como ps. Consulte la sección 6.1.2.1, «Directrices del usuario final para la seguridad de la contraseña». -
Para especificar explícitamente que no hay contraseña y que el programa cliente no debe pedir una, utilice la opción
--skip-password
.
Como se acaba de mencionar, incluir el valor de la contraseña en la línea de comandos es un riesgo de seguridad. Para evitar este riesgo, especifica la opción --password
o -p
sin ningún valor de contraseña a continuación:
mysql --host=localhost --user=myname --password mydbmysql -h localhost -u myname -p mydb
Cuando se da la opción --password
o -p
sin ningún valor de contraseña, el programa cliente imprime un aviso y espera a que se introduzca la contraseña. (En estos ejemplos, mydb
no se interpreta como una contraseña porque está separada de la opción de contraseña anterior por un espacio).
En algunos sistemas, la rutina de la biblioteca que MySQL utiliza para pedir una contraseña limita automáticamente la contraseña a ocho caracteres. Esa limitación es una propiedad de la biblioteca del sistema, no de MySQL. Internamente, MySQL no tiene ningún límite para la longitud de la contraseña. Para evitar la limitación en los sistemas afectados por ella, especifique su contraseña en un fichero de opciones (vea la Sección 4.2.2.2, «Uso de ficheros de opciones»). Otra solución es cambiar su contraseña de MySQL a un valor que tenga ocho o menos caracteres, pero eso tiene la desventaja de que las contraseñas más cortas tienden a ser menos seguras.
Los programas cliente determinan qué tipo de conexión realizar de la siguiente manera:
-
En Windows, el cliente se conecta usando memoria compartida, si el servidor se inició con la variable de sistema
shared_memory
habilitada para soportar conexiones de memoria compartida. -
En Windows, si
host
es.
(punto), o TCP/IP no está habilitado y--socket
no se especifica o el host está vacío, el cliente se conecta utilizando una tubería con nombre, si el servidor se inició con la variable del sistemanamed_pipe
habilitada para soportar conexiones de tubería con nombre. Si las conexiones named-pipe no son compatibles o si el usuario que realiza la conexión no es miembro del grupo de Windows especificado por la variable de sistemanamed_pipe_full_access_group
, se produce un error. -
De lo contrario, la conexión utiliza TCP/IP.
Si el host no se especifica o es localhost
, se produce una conexión con el host local:
En Unix, los programas de MySQL tratan el nombre de host localhost
de forma especial, de una manera que probablemente sea diferente a la que usted espera en comparación con otros programas basados en la red: el cliente se conecta utilizando un archivo de socket Unix. La opción --socket
o la variable de entorno MYSQL_UNIX_PORT
pueden utilizarse para especificar el nombre del socket.
La opción --protocol
permite utilizar un protocolo de transporte concreto incluso cuando otras opciones normalmente dan lugar al uso de un protocolo diferente. Es decir, --protocol
especifica el protocolo de transporte explícitamente y anula las reglas anteriores, incluso para localhost
.
Sólo se utilizan o se marcan las opciones de conexión que son relevantes para el protocolo de transporte seleccionado. Otras opciones de conexión se ignoran. Por ejemplo, con --host=localhost
en Unix, el cliente intenta conectarse al servidor local utilizando un archivo de socket Unix, incluso si se da una opción --port
o -P
para especificar un número de puerto TCP/IP.
Para asegurar que el cliente realiza una conexión TCP/IP con el servidor local, utilice --host
o -h
para especificar un valor de nombre de host de 127.0.0.1
(en lugar de localhost
), o la dirección IP o el nombre del servidor local. También puede especificar el protocolo de transporte explícitamente, incluso para localhost
, utilizando la opción --protocol=TCP
. Ejemplos:
mysql --host=127.0.0.1mysql --protocol=TCP
Si el servidor está configurado para aceptar conexiones IPv6, los clientes pueden conectarse al servidor local sobre IPv6 utilizando --host=::1
. Consulte la sección 5.1.13, «Soporte de IPv6».
En Windows, para forzar a un cliente MySQL a utilizar una conexión de tubería con nombre, especifique la opción --pipe
o --protocol=PIPE
, o especifique .
(punto) como nombre de host. Si el servidor no se ha iniciado con la variable de sistema named_pipe
habilitada para admitir conexiones de tuberías con nombre o si el usuario que realiza la conexión no es miembro del grupo de Windows especificado por la variable de sistema named_pipe_full_access_group
, se produce un error. Utilice la opción --socket
para especificar el nombre de la tubería si no desea utilizar el nombre de la tubería por defecto.
Las conexiones a servidores remotos utilizan TCP/IP. Este comando se conecta al servidor que se ejecuta en remote.example.com
utilizando el número de puerto por defecto (3306):
mysql --host=remote.example.com
Para especificar un número de puerto explícitamente, utilice la opción --port
o -P
:
mysql --host=remote.example.com --port=13306
También puedes especificar un número de puerto para las conexiones a un servidor local. Sin embargo, como se indicó anteriormente, las conexiones a localhost
en Unix utilizan un archivo de socket por defecto, por lo que, a menos que fuerce una conexión TCP/IP como se describió anteriormente, cualquier opción que especifique un número de puerto se ignora.
Para este comando, el programa utiliza un archivo de socket en Unix y la opción --port
se ignora:
mysql --port=13306 --host=localhost
Para hacer que se utilice el número de puerto, fuerce una conexión TCP/IP. Por ejemplo, invoque el programa de cualquiera de estas maneras:
mysql --port=13306 --host=127.0.0.1mysql --port=13306 --protocol=TCP
Para obtener información adicional sobre las opciones que controlan la forma en que los programas cliente establecen conexiones con el servidor, consulte el apartado 4.2.3, «Opciones de comandos para conectarse al servidor».
Es posible especificar los parámetros de conexión sin introducirlos en la línea de comandos cada vez que se invoca un programa cliente:
Especificar los parámetros de conexión en la sección de un archivo de opciones. La sección pertinente del archivo podría tener el siguiente aspecto:
host=host_nameuser=user_namepassword=password
Para obtener más información, consulte la sección 4.2.2.2, «Uso de archivos de opciones».
-
Para especificar el host para mysql, utilice
MYSQL_HOST
. -
En Windows, para especificar el nombre de usuario de MySQL, utilice
USER
.
Para obtener una lista de las variables de entorno compatibles, consulte la sección 4.9, «Variables de entorno».