PDA

Ver la Versión Completa : Configurando MySQL



Giner OVH
12/11/2009, 22:45
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. En OVH, no administramos servidores.


Instalación

Sobre un sistema Debian:


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


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 (http://guias.ovh.es/WhatIsBasesMySQL)

GUÍA Conexión remota (http://guias.ovh.es/ConnexionDistanteMySQL)



Comandos de estado MySQL

show variables;
show status;

Exportar - http://guias.ovh.es/BackupBaseMySQL

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

Importar - http://guias.ovh.es/ImportBaseMySQL

$ 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

$ ps -A | grep mysql | wc -l

Procesos en cursos

$ ps -aux | grep mysql
$ mysqladmin –i10 processlist extended-status

Checkear todas las tablas y optimizarlas

$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 (http://dev.mysql.com/doc/refman/5.0/es/system-variables.html)
server-system-variables (http://dev.mysql.com/doc/refman/5.0/es/server-system-variables.html)
dynamic-system-variables (http://dev.mysql.com/doc/refman/5.0/es/dynamic-system-variables.html)

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.


key_buffer = 16M


max_allowed_packet

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


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 (http://www.devshed.com/c/a/MySQL/MySQL-Optimization-part-1/1/)


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.


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/es/too-many-connections.html


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.


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


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.


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.


query_cache_size = 16M


Backup MySQL

Tamaño máximo para el backup


[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.


[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.


[MYSQL_CLUSTER]
ndb-connectstring = 127.0.0.1



Certificados MySQL

Las siguientes rutas definen donde tenemos guardados los certificados SSL


ssl-ca = /etc/mysql/cacert.pem
ssl-cert = /etc/mysql/server-cert.pem
ssl-key = /etc/mysql/server-key.pem

kennysamuerto
12/11/2009, 23:28
Muy muy bueno.

Ademas se agradece que la gente de OVH participe, quienes mejor y con mas conocimiento sobre las maquinas.

Muchas Gracias Giner!

Giner OVH
13/11/2009, 01:23
Buenooo, nosotros ya hacemos las guías...
Mira que no sabía como empezar el post... editado!!!, primera linea, igual me lo pongo como firma... jejeje

Lo he hecho por el tema del foro nuevo y tal... pero esto es más para vosotros, aquel post que no respondimos...

Power
13/11/2009, 10:46
Hola,

Magnífica guía para configurar MySQL.
Muchas gracias Giner.

Saludos

cruzbac
23/11/2009, 15:40
muchas gracias por la info

Gura
07/12/2009, 18:11
Buenas tardes,

Hay varias cosas que habría que considerar a la hora de configurar la base de datos. No voy a entrar en el tamaño del dataset (datos+indices) y la cantidad de memoria del servidor, ni en usar si es necesario InnoDB en vez de MyISAM.

MySQL tiene unas opciones que podríamos tocar para arañar rendimiento. La explicación de estas la podréis encontrar en la documentación oficial de MySQL.

innodb_flush_method = O_DIRECT -> SOlo si tenemos RAID con BBU (los grandes de OVH con controladora RAID por hardware supongo que tendrán)

innodb_file_per_table -> Un fichero para cada tabla, en vez de un enorme ibdata

innodb_buffer_pool_size -> Lo más ajustado al 80% de la memoria de tu sistema si es una DB dedicada y SOLO tenemos tablas InnoDB

innodb_flush_log_at_trx_commit

sync-binlog



Por otro lado, Percona distribuye una versión de MySQL con notables mejoras de rendimiento.

http://www.percona.com/docs/wiki/release:start

Un saludo,

Rarok
13/01/2010, 22:08
Hay una utilidad que a la vez que sencilla me ha dado unos resultados bastante buenos, que es el mysqltuner (http://blog.mysqltuner.com/). Este script lo que hace es principalmente analizar los logs del mysql y los archivos de configuración y en función de los resultados recomienda unas optimizaciones u otras a la configuración del MySQL, únicamente dice lo que cambiar, él script no hace ningún cambio por si mismo.

Obviamente no es tan bueno, como una configuración detallada y analizada por un experto (o no tan experto) pero es una buena ayuda para los que están muy verdes y quieren hacer una optimización a grosso modo.

El script funciona en cualquier Unix con un mysql instalado y con perl, como nota "negativa" para hacer el análisis (es decir, en el momento en que lo ejecutamos) requiere acceso privilegiado al mysql.