Administración del servidor

Configuración del servidor

El servidor MySQL, mysqld, tiene muchas opciones de comando y variables del sistema que se pueden configurar al inicio para configurar su funcionamiento. Para determinar la opción de comando predeterminada y los valores de la variable del sistema utilizados por el servidor, ejecute este comando:

$> mysqld --verbose --help

La salida del comando será parecida a:

abort-slave-event-count           0
allow-suspicious-udfs             FALSE
archive                           ON
auto-increment-increment          1
auto-increment-offset             1
autocommit                        TRUE
automatic-sp-privileges           TRUE
avoid-temporal-upgrade            FALSE
back-log                          80
basedir                           /home/jon/bin/mysql-8.0/
...
tmpdir                            /tmp
transaction-alloc-block-size      8192
transaction-isolation             REPEATABLE-READ
transaction-prealloc-size         4096
transaction-read-only             FALSE
transaction-write-set-extraction  XXHASH64
updatable-views-with-limit        YES
validate-user-plugins             TRUE
verbose                           TRUE
wait-timeout                      28800

Para ver los valores actuales de las variables:

  mysql> SHOW VARIABLES;
Para ver valores estadísticos y el estado actual del servidor:
  mysql> SHOW STATUS;
Esta información también está disponible mediante el comando mysqladmin:
  $> mysqladmin variables 
  $> mysqladmin extended-status

Valores predeterminados de la configuración del servidor

El servidor MySQL tiene muchos parámetros operativos, que puede cambiar al iniciar el servidor utilizando opciones de línea de comandos o archivos de configuración (archivos de opciones). También es posible cambiar muchos parámetros en tiempo de ejecución. Para obtener instrucciones generales sobre la configuración de parámetros al inicio o en tiempo de ejecución, consulte la Sección 5.1.7, “Opciones de comando del servidor” y la Sección 5.1.8, “Variables del sistema del servidor” .

Después de completar el proceso de instalación, puede editar el archivo de opciones predeterminado en cualquier momento para modificar los parámetros utilizados por el servidor. Por ejemplo, para utilizar una configuración de parámetro en el archivo que se comenta con un carácter # al principio de la línea, elimine # y modifique el valor del parámetro si es necesario. Para deshabilitar una configuración, agregue un # al principio de la línea o elimínelo.

Para las plataformas que no son de Windows, no se crea ningún archivo de opciones predeterminado durante la instalación del servidor o el proceso de inicialización del directorio de datos. Cree su archivo de opciones siguiendo las instrucciones dadas en la Sección 4.2.2.2, “Uso de archivos de opciones” . Sin un archivo de opciones, el servidor simplemente comienza con su configuración predeterminada.

Validación de la configuración del servidor

El servidor termina tan pronto como se encuentra un error. Para que se produzcan comprobaciones adicionales, corrija el problema inicial y vuelva a ejecutar el servidor con --validate-config. La opción --validate-config se puede usar con la opción --defaults-file para validar solo las opciones en un archivo específico.

$> mysqld --validate-config
2018-11-05T10:40:02.712141Z 0 [ERROR] [MY-000067] [Server] unknown variable 'tx_read_only=ON'.
2018-11-05T10:40:02.712178Z 0 [ERROR] [MY-010119] [Server] Aborting

Opciones de comando del servidor

En este punto vamos a ver algunas de las opciones de comando del servidor. Para ver la lista completa: Opciones de comando del servidor.

  • --help, -?

Muestra un breve mensaje de ayuda y termina. Utiliza las opciones --verbosey --help para ver el mensaje completo.

  • --basedir=dirname
Formato de línea de comandos --basedir=dir_name
Variable de sistema ´basedir´
Scope Global
Dynamic No
SET_VAR Se aplica una sugerencia No
Tyoe Nombre del directorio
Default parent of mysqld installation directory

La ruta al directorio de instalación de MySQL. Esta opción establece la variable del sistema basedir.

El ejecutable del servidor determina su propio nombre de ruta completo al inicio y usa el padre del directorio en el que se encuentra como valor predeterminado.

  • --datadir=dir_name
Command-Line Format --datadir=dir_name
System Variable datadir
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type Directory name
  • --default-time-zone=timezone
Command-Line Format --default-time-zone=name
Type String

Establezca la zona horaria predeterminada del servidor. Esta opción establece la variable time_zone del sistema global. Si no se da esta opción, la zona horaria predeterminada es la misma que la zona horaria del sistema.

  • --initialize e --initialize_insecure

La primera opción se usa para inicializar una instalación de MySQL creando el directorio de datos y llenando las tablas en el esquema mysql del sistema.

La segunda opción se usa igual que la anterior, pero no crear una contraseña para el usuario root. Será tarea del administrador crear una cuanto antes.

Command-Line Format --initialize[={OFF|ON}]
Type Boolean
Default Value OFF
  • --language=lang_name
Command-Line Format --language=name
Deprecated Yes; use lc-messages-dir instead
System Variable language
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type Directory name
Default Value /usr/local/mysql/share/mysql/english/

El idioma que se utilizará para los mensajes de error.

  • --lc-messages=locale_name
Command-Line Format --lc-messages=name
System Variable [lc_messages]
Scope Global, Session
Dynamic Yes
[SET_VAR] Hint Applies No
Type String
Default Value en_US

La configuración regional que se utilizará para los mensajes de error. El valor predeterminado es en_US. El servidor convierte el argumento en un nombre de idioma y lo combina con el valor de --lc-messages-dir para generar la ubicación del archivo de mensaje de error. Consulte la Sección 10.12, “Configuración del idioma de los mensajes de error” .

  • --lc-messages-dir=dir_name
Command-Line Format --lc-messages-dir=dir_name
System Variable [lc_messages_dir]
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type Directory name

El directorio donde se encuentran los mensajes de error. El servidor usa el valor junto con el valor de --lc-messagespara generar la ubicación del archivo de mensaje de error. Consulte la Sección 10.12, “Configuración del idioma de los mensajes de error”.

  • --log_error=file_name
Command-Line Format --log-error[=file_name]
System Variable [log_error]
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type File name

Establezca el destino predeterminado del registro de errores. Esto afecta a los receptores de registros que basan su propio destino de salida en el destino predeterminado. Consulte la Sección 5.4.2, "El registro de errores" .

Si la opción no nombra ningún archivo, el destino predeterminado del registro de errores en Unix y sistemas similares a Unix es un archivo nombrado *host_name*.err en el directorio de datos. 

  • --port=port_num | Command-Line Format | --port=port_num | | -- | -- | | System Variable | [port] | | Scope | Global | | Dynamic | No | | [SET_VAR] Hint Applies | No | | Type | Integer | | Default Value | 3306 | | Minimum Value | 0 | | Maximum Value | 65535 |

El número de puerto que se utilizará al escuchar las conexiones TCP / IP. En sistemas Unix y similares a Unix, el número de puerto debe ser 1024 o superior a menos que el usuario root del sistema operativo inicie el servidor. Establecer esta opción en 0 hace que se utilice el valor predeterminado.

  • --socket=path
Command-Line Format --socket={file_name|pipe_name}
System Variable [socket]
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type String
Default Value (Windows) MySQL
Default Value (Other) /tmp/mysql.sock

En Unix, esta opción especifica el archivo de socket de Unix que se utilizará al escuchar las conexiones locales. El valor predeterminado es /tmp/mysql.sock. Si se da esta opción, el servidor crea el archivo en el directorio de datos a menos que se proporcione un nombre de ruta absoluto para especificar un directorio diferente. 

  • --tmpdir=dir_name
Command-Line Format --tmpdir=dir_name
System Variable [tmpdir]
Scope Global
Dynamic No
[SET_VAR] Hint Applies No
Type Directory name

La ruta del directorio que se utilizará para crear archivos temporales. Puede resultar útil si su directorio /tmp predeterminado reside en una partición que es demasiado pequeña para contener tablas temporales. 

--tmpdir puede ser una ubicación no permanente, como un directorio en un sistema de archivos basado en memoria o un directorio que se borra cuando se reinicia el servidor. 

  • --sql-mode=value[,value[,value...]]
Command-Line Format --sql-mode=name
System Variable [sql_mode]
Scope Global, Session
Dynamic Yes
[SET_VAR] Hint Applies Yes
Type Set
Default Value ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
Valid Values ALLOW_INVALID_DATES,ANSI_QUOTES, ERROR_FOR_DIVISION_BY_ZERO,HIGH_NOT_PRECEDENCE, IGNORE_SPACE, NO_AUTO_VALUE_ON_ZERO, NO_BACKSLASH_ESCAPES, NO_DIR_IN_CREATE, NO_ENGINE_SUBSTITUTION, NO_UNSIGNED_SUBTRACTION, NO_ZERO_DATE,NO_ZERO_IN_DATE, ONLY_FULL_GROUP_BY,PAD_CHAR_TO_FULL_LENGTH, PIPES_AS_CONCAT,REAL_AS_FLOAT, STRICT_ALL_TABLES, STRICT_TRANS_TABLES, TIME_TRUNCATE_FRACTIONAL

Establezca el modo SQL. Consulte la Sección 5.1.11, "Modos SQL del servidor".

Gestión de Conexiones

Interfaces de conexión

El servidor es capaz de escuchar las conexiones del cliente en múltiples interfaces de red. Los subprocesos del administrador de conexiones manejan las solicitudes de conexión del cliente en las interfaces de red que escucha el servidor:

  • En todas las plataformas, un subproceso de administrador maneja las solicitudes de conexión TCP / IP.

  • En Unix, el mismo hilo del administrador también maneja las solicitudes de conexión de archivos de socket de Unix.

  • En Windows, un subproceso de administrador maneja las solicitudes de conexión de memoria compartida y otro maneja las solicitudes de conexión de canalización con nombre.

  • En todas las plataformas, se puede habilitar una interfaz de red adicional para aceptar solicitudes administrativas de conexión TCP / IP. Esta interfaz puede usar el subproceso del administrador que maneja las solicitudes TCP / IP " ordinarias " , o un subproceso separado.

El servidor no crea subprocesos para manejar interfaces que no escucha. Por ejemplo, un servidor de Windows que no admite conexiones de canalización con nombre habilitadas no crea un subproceso para manejarlas.

Para controlar y monitorear cómo el servidor administra los subprocesos que manejan las conexiones del cliente, son relevantes varias variables de sistema y estado: - thread_cache_size: Variable del sistema que determina el tamaño de la caché de los subprocesos. De forma predeterminada, el servidor ajusta automáticamente el valor al inicio - threads_cached y threads created: Para monitorear el número de subprocesos en la caché y cuántos subprocesos se han creado. - thread_stack: Cuando la pila de subprocesos es demasiado pequeña, esto limita la complejidad de las instrucciones SQL que el servidor puede manejar - max_connections: Para controlar el número máximo de clientes simultáneos. Si el servidor rechaza una conexión porque se alcanza el límite de max_connections, incrementa la variable de estado connection_errors_max_connections. -

mysql> show status like ‘Threads%’;
+——————-+——–+
| Variable_name | Value |
+——————-+——–+
| Threads_cached | 25 |
| Threads_connected | 6 |
| Threads_created | 378847 |
| Threads_running | 1 |
+——————-+——–+
4 rows in set (0.00 sec)
Significado: Threads_cached: Número de threads en la thread cache, no tiene porque coincidir con thread_cache_size si se estan usando.\ Threads_connected: Conexiones actualmente activas, lo que en SHOW PROCESSLIST seria el count final: Incluye todas las conexiones activas estén Running, Sleep, Sorting, Connect...\ Threads_created: Número de threads creados, lo que indica que ha fallado la thread cache. Podemos establecer un ratio respecto Connections para saber si debemos ampliarla\ Threads_running: Número de threads que no están en Sleep, por lo tanto en ejecución.

Gestión de conexiones administrativas

A partir de MySQL 8.0.14, el servidor permite dedicar un puerto TCP / IP para conexiones administrativas, como se describe en las siguientes secciones.

La interfaz de conexión administrativa tiene estas características:

  • El servidor habilita la interfaz solo si la variable del sistema admin_address está configurada al inicio para indicar la dirección IP para ella. Si admin_address no está configurado, el servidor no mantiene una interfaz administrativa.

  • La variable admin_port del sistema especifica el número de puerto TCP/IP de la interfaz (predeterminado 33062).

  • No hay límite en la cantidad de conexiones administrativas, pero las conexiones solo se permiten para los usuarios que tienen el provilegio SERVICE_CONNECTION_ADMIN.

  • La variable create_admin_listener_thread del sistema permite que los DBA elijan al inicio si la interfaz administrativa tiene su propio hilo independiente. El valor predeterminado es OFF; es decir, el subproceso del administrador para las conexiones ordinarias en la interfaz principal también maneja las conexiones para la interfaz administrativa.

Estas líneas en el archivo my.cnf del servidor habilitan la interfaz administrativa en la interfaz lookup y la configuran para usar el número de puerto 33064 (es decir, un puerto diferente del predeterminado):

[mysqld]
admin_address=127.0.0.1
admin_port=33064
Los programas cliente de MySQL se conectan a la interfaz principal o administrativa especificando los parámetros de conexión adecuados. Si el servidor que se ejecuta en el host local utiliza los números de puerto TCP/IP predeterminados 3306 y 33062 para las interfaces principal y administrativa, estos comandos se conectan a esas interfaces:

mysql --protocol=TCP --port=3306
mysql --protocol=TCP --port=33062`

caché del host

La caché del host está habilitada de forma predeterminada. La variable host_cache_size del sistema controla su tamaño, así como el tamaño de la table host_cache del esquema de rendimiento que expone el contenido de la caché. El tamaño de la caché se puede configurar al inicio del servidor y se puede cambiar en tiempo de ejecución. Por ejemplo, para establecer el tamaño en 200 al inicio, coloque estas líneas en el my.cnfarchivo del servidor :

[mysqld]
host_cache_size=200

Para cambiar el tamaño a 300 en tiempo de ejecución, haga lo siguiente:

SET GLOBAL host_cache_size=300;

Establecer host_cache_sizeen 0, ya sea al inicio del servidor o en tiempo de ejecución, deshabilita la caché del host.