FUNCIONAMIENTO DEL SERVIDOR MYSQL

* Funcionamiento:
1) Los clientes se conectan a servidor.
2) Los clientes inician autentificación, codifican y envían peticiones,
comprimen y cifran peticiones, cachean los resultados del servidor, …
3) El servidor procesa las peticiones y devuelve las respuestas.
4) Las peticiones son procesadas primero por la capa de manipulación, que las
desencripta, valida su sintaxis, las busca en la caché, y las envía al
correspondiente motor de almacenamiento.
5) Los motores de almacenamiento (MyISAM, InnoDB, Memory, …) manejan la
representación en memoria y disco de bases de datos, tablas e índices, así
como generación de estadísticas y algunos logs.
6) La capa de manejo escribe logs a disco, guarda y lee caches en memoria,
lee logs binarios de la red, … Los motores de almacenamiento guardan
datos (tablas, logs, …) en disco y en memoria, envía datos a otros
servidores remotos, …

* El servidor MySQL utiliza espacio en disco para almacenar lo siguiente:
– Los programas cliente y servidor, y sus librerías.
– Los ficheros de registro («logs») y de estado.
– Las bases de datos.
– Los ficheros de formato de tablas (‘*.frm’) para todos los motores de
almacenamiento, y los ficheros de datos y ficheros de índices para algunos
motores de almacenamiento.
– Los ficheros de «tablespaces» de InnoDB, si el motor de almacenamiento
InnoDB está activado.
– Tablas temporales internas que han sobrepasado el límite de tamaño en
memoria y deben ser convertidas a tablas en disco.

* El servidor MySQL utiliza espacio en memoria para almacenar lo siguiente:
– Gestores de conexión (cada conexión consume memoria).
– Buffers que guardan tablas temporales internas que no han sobrepasado el
límite de tamaño en memoria.
– Cachés: caché de hosts, la caché de tablas, la caché de consultas, …
– Una copia de la tabla de permisos.
– El contenido de las tablas HEAP (motor de almacenamiento en memoria). Su
fichero de formato (‘*.frm’) se continua guardando en disco.

* El servidor MySQL utiliza los siguientes buffers por cada cliente:
– Buffers de registros para las búsquedas secuenciales en tablas
(‘read_buffer_size’) y para leer las líneas después de una ordenación
(‘read_rnd_buffer_size’) normalmente conseguida mediante la cláusula ORDER.
– Buffer de join para las uniones de tablas.
– Buffer de ordenación para las operaciones de ordenación.
– Buffer de comunicaciones para intercambiar información con el cliente.
Comienza con un tamaño de ‘net_buffer_length’, pero si es necesario el
servidor aumenta su tamaño al señalado por ‘max_allowed_packet’.

* Los límites que el sistema operativo puede imponer al servidor MySQL son:
– El máximo número de ficheros abiertos por proceso limita el tamaño máximo
de la caché de tablas, que guarda los descriptores de ficheros para los
ficheros de tablas.
– El máximo número de hilos de ejecución por proceso limita el número de
clientes que se pueden conectar simultáneamente al servidor MySQL.
– El ‘backlog’ permitido por el sistema limita el número de conexiones de red
en cola debido a clientes que esperan a conectarse.
– El sistema de ficheros donde se guardan los datos limita el tamaño máximo
del fichero, pero este límite puede esquivarse repartiendo los datos en
varios ficheros.

* Para registrar los errores podemos iniciar el servidor mediante ‘mysqld_safe’.
Para ver los errores debemos buscar un fichero en el directorio de datos con
el nombre de la máquina y con el sufijo ‘.err’.

* Para registrar las modificaciones de datos de las tablas podemos iniciar el
servidor con la opción «–log-bin». Para ver dicho registro se utiliza la
herramienta ‘mysqlbinlog’.

* Ver la actividad del servidor:
mysql> SHOW STATUS;
shell> mysqladmin extended-status

* Ver la configuración del servidor:
mysql> SHOW VARIABLES;
shell> mysqladmin variables

* Lecturas para profundizar:
– http://dev.mysql.com/doc/refman/5.0/es/features.html
– http://dev.mysql.com/doc/refman/5.0/es/log-files.html