Saltar al contenido

Optimizar Myql

  • por

 

NOTA: La configuración de MySQL debe ser acorde al uso que se le da al servidor, no existe una configuración ideal. Solo el administrador del propio servidor, el que lo monitoriza todos los días, sabrá que valores poner.

Instalación

Sobre un sistema Debian:

Código:
$ apt-get install mysql-server mysql-client libmysqlclient15-dev

Seguridad

Con la finalidad de proteger mysql y que nadie pueda acceder sin ser autentificado , debemos asignar una contraseña al usuario root:

Código:
mysqladmin -u root password tu_contraseña
mysqladmin -h server1.mi_dominio.com -u root password tu_contraseña

Gestión del servidor y procesos

GUÍA Introducción a MYSQL

GUÍA Conexión remota

Comandos de estado MySQL

Código:
show variables;
show status;

Código:
$ mysqldump -uUsuario -p dbnombre > dbnombre.sql
o
$ mysql -h nombre_de_host -u nombre_de_usuario -pcontraseña base_de_datos > fichero_dump.sql

Código:
$ mysql -uUsuario -p dbnombre < dbnombre.sql
o
$ mysql -h nombre_de_host -u nombre_de_usuario -pcontraseña base_de_datos < fichero_dump.sql

Número de procesos

Código:
$ ps -A | grep mysql | wc -l

Procesos en cursos

Código:
$ ps -aux | grep mysql
$ mysqladmin –i10 processlist extended-status

Checkear todas las tablas y optimizarlas

Código:
$mysqlcheck --optimize --all-databases

Monitorización

myTop es un monitor para MySQL de consultas en tiempo real.

Configuración y Optimización

Fichero de configuración: /etc/my.cnf o /etc/mysql/my.cnf

NOTA: No olvides hacer un backup de tu fichero original funcional.

NOTA: El fichero de MySQL permite no poner variables y dejarlas "por defecto", en muchos casos, puede ser interesante no poner variables, si no son necesarias.

La potencia de MySQL es muy grande y la versatilidad en su configuración también los es. Actualmente, y dado el relativo "bajo coste" de la memoria RAM, se hace posible el uso de memoria caché que mejore el rendimiento de nuestro servidor.

En caso de que el cometido del host sea exclusivamente servidor MySQL, podemos permitirnos el lujo de cachear hasta un 70-80% del total de la memoria disponible.

Si por el contrario, el host o servidor, cumple tareas como servidor web, correo, y más… pues debemos considerar ofrecer menos recursos.

En la web de MySQL podemos obtener un listado de todas las variables de configuración del sistema:

system-variables
server-system-variables
dynamic-system-variables

También debemos considerar los timeouts como medida de seguridad, pues reducen el riesgo de colapso del sistema a causa de fallos en la programación de las aplicaciones utilizadas.

La fórmula mágica

Memoria MySQL = key_buffer_size + max_connections * (join_buffer + record_buffer + sort_buffer + thread_stack + tmp_table_size)

Información de Variables

Los parámetros de MySQL se pueden definir a nievel de servidor, gestionando las directivas de "/etc/mysql/my.cnf", sin embargo, también es posible definir variables especificas por usuario, creando un fichero en "~/.my.cnf"

NOTA: Si va a realizar cambios en la configuración, y su sistema utiliza apparmor, deberá ajustar los valores en /etc/apparmor.d/usr.sbin.mysqld.

Definición de variables

key_buffer

Los bloques de índices para tablas MyISAM y ISAM se guardan en buffers y se comparten para todos los threads. key_buffer_size es el tamaño del buffer usado para los bloques de índices. El key buffer también se conoce como la key cache. El tamaño máximo permitido para key_buffer_size es 4GB.

Código:
key_buffer = 16M

max_allowed_packet

El tamaño máximo de un paquete o cualquier cadena de caracteres generada/intermedia.

Código:
max_allowed_packet = 16M

thread_stack

El tamaño de la pila para cada thread. Muchos de los límites detectados por el test crash-me dependen de este valor. El valor por defecto es lo suficientemente grande para un funcionamiento normal, y un seguro ante fallos de programación. 

Si trabajamos con consultas excesivamente complejas, deberiamos subir el valor. Es utilizada en aplicaciones de Benchmarck MySQL

Código:
thread_stack = 128k

thread_cache_size

Esta variable puede incrementarse para mejorar el rendimiento si tiene muchas nuevas conexiones.

El número de threads que el servidor debe cachear para reusar. Cuando un cliente desconecta, los threads de clientes se ponen en la caché si hay menos de thread_cache_size threads. Peticiones de threads se sirven reusando threads tomados de la caché cuando es posible.

Código:
thread_cache_size = 8

max_connections

El número de conexiones de cliente simultáneas permitidas. Incrementar este valor incrementa el número de descriptores de fichero que requiere mysqld.

Si obtiene un error Too many connections, revise le documentación:
http://dev.mysql.com/doc/refman/5.0/…nnections.html

Código:
max_connections = 100

thread_concurrency

Esta función permite a las aplicaciones dar al sistema de threads una piesta sobre el número deseado de threads que deben ejecutarse simultáneamente.

Código:
thread_concurrency = 10

Configuración de caché

table_cache

El número de tablas abiertas por todos los threads. Incrementar este valor incrementa el número de descriptores de ficheros que requiere mysqld. Puede chequear si necesita incrementar la caché de la tabla chequeando la variable de estado Opened_tables

Código:
table_cache = 64

query_cache_limit

No cachea resultados mayores que este número de bytes. El valor por defecto es 1048576 (1MB). Es un valor para cada consulta. Valores muy altos pueden provocar inestabilidad en servicios muy concurridos.

Código:
query_cache_limit = 1M

query_cache_size

La cantidad de memoria reservada para cachear resultados de consultas. El valor por defecto es 0, lo que desactiva la cache de consultas. Tenga en cuenta que la cantidad de memoria se reserva incluso si query_cache_type tiene como valor 0.

Código:
query_cache_size = 16M

Backup MySQL

Tamaño máximo para el backup

Código:
[mysqldump]
max_allowed_packet = 16M

Reparar tablas

Definimos del buffer mientras que MySQL examina las bases de datos en busca de posibles fallos o tablas corrompidas.

Código:
[isamchk]
key_buffer = 16M

Cluster MySQL

Definimos la IP del nodo cluster. 127.0.0.1 define que no hay cluster, y que nuestro servidor, es el único.

Código:
[MYSQL_CLUSTER]
ndb-connectstring = 127.0.0.1

Certificados MySQL

Las siguientes rutas definen donde tenemos guardados los certificados SSL

Código:
ssl-ca = /etc/mysql/cacert.pem
ssl-cert = /etc/mysql/server-cert.pem
ssl-key = /etc/mysql/server-key.pem

 

Deja una respuesta