Configurando y Optimizando un servidor. my.cnf
- marzo 1, 2010
- 4 comentario/s
- SysAdmin Tags: mysql, tutoriales
Tengo un servidor con Linux CentOs, es un servidor dedicado y que me lo dieron con la configuración por defecto.
Lo que venia notando es que al cambiar la web de un servidor a otro, la web iba muy muy lenta.
Me preguntaba porque si he escrito toda la web desde 0 con Cakephp Framework, los modelos y las vistas están cacheados y se ha cambiado a un nuevo servidor mucho mas potente
- Pentium E2200 Dual Core 2,2 GHz (2 cores, 1 MB caché, 800 FSB)
- 2 GB SDRAM DDR2
- 2 x 250 GB SATA (7.200rpm)
- 2.000 GB de transferencia al mes
- SAS 6iR internal RAID controler
- 100MB de ancho de banda
porque me iba tan mal la web?
El tema es la configuracion por defecto de los servidores no es la optima para albergar una web, un servidor puede estar configurado para ser un servidor web, un servidor de correo, un servidor de juegos o simplemente se puede usar esa máquina como un ordenador normal.
Para ello hay que configurar varios aspectos, inicialmente: El apache, y el MySQL.
Lo primero que hice es optimizar el MySQL, y con esto el rendimiento del servidor mejoró notablemente.
Conectados como root en la máquina (los paths aqui indicados son los míos, verificar los vuestros.)
Lo primero un backup
cp /etc/my.cnf /etc/my.cnf.backup
abrimos el archivo con vuestro editor favorito.
vi /etc/my.cnf
por defecto en mi my.cnf sólo venia lo siguiente:
[mysqld] set-variable=local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
He añadido una serie de parámetros nuevos
[mysqld] set-variable=local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # nueva configuracion # este parámetro es fundamental, hay que registrar las consultas lentas, todas las que duren mas de 2 segundos. # asi se puede ver las consultas que se hacen y que tienen que ser optimizadas log-slow-queries=/var/log/mysql-slow-queries.log long_query_time = 2 log-queries-not-using-indexes query_cache_limit=1M query_cache_size=32M query_cache_type=1 max_connections=500 interactive_timeout=100 # Reducido wait_timeout para prevenir que clientes inactivos retengan una conexion. wait_timeout=30 connect_timeout=10 # establecido a 128 para que no use mas memoria thread_cache_size=128 key_buffer=64M join_buffer=1M max_allowed_packet=16M table_cache=512 record_buffer=1M sort_buffer_size=2M read_buffer_size=2M max_connect_errors=10 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # nueva configuracion open_files_limit=8192 # nueva configuracion [mysql] no-auto-rehash #safe-updates # nueva configuracion [isamchk] key_buffer=64M sort_buffer=64M read_buffer=16M write_buffer=16M [myisamchk] key_buffer=64M sort_buffer=64M read_buffer=16M write_buffer=16M [mysqlhotcopy] interactive-timeout
- query_cache_size:
MySQL 4 proporciona una característica que puede resultar muy útil - una caché de consultas. En una situación en la base de datos tiene que ejecutar varias veces las mismas preguntas en el mismo conjunto de datos, devolviendo el mismo resultado cada vez, MySQL puede cachear resultados, evitando la sobrecarga de ejecución a través de los datos una y otra y es extremadamente útil en servidores con mucha carga. - key_buffer_size:
El valor de key_buffer_size es el tamaño del búfer utilizado con los índices. Cuanto mayor sea el buffer, más rápido terminará el comando SQL y el resultado será devuelto. Se supone que lo mejor es ajustar el key_buffer_size con al menos un cuarto de la memoria del servidor, pero no más de la mitad de la cantidad total. Idealmente, será lo suficientemente grande como para contener todos los índices (el tamaño total de todos los archivos. MYI en el servidor). - table_cache:
El valor predeterminado es 64. Cada vez que MySQL tiene acceso a una tabla, se coloca en la caché. Si el sistema accede a muchas tablas, es más rápido para tener estas en la caché. MySQL al ser multi-threaded, puede ejecutar muchas consultas sobre sobre una tabla a la vez, y cada uno de éstas abrirá una tabla. - sort_buffer:
El sort_buffer es muy útil para acelerar las operaciones de myisamchk (razón por la cual se fija mucho más alto para ese fin en los archivos de configuración por defecto), pero también puede ser útil cuando se realizan todos los días un gran número de ordenaciones o clasificaciones. - thread_cache:
Si se tiene un servidor con mucha carga que está recibiendo una gran cantidad de conexiones rápida, hay que configurar la thread_cache lo suficientemente alto para que el valor d threads_created en SHOW STATUS deja de aumentar. Esto debe tomar parte de la carga fuera de la CPU. - tmp_table_size:
(no incluido en el archivo de configuracion, pero este parámetro también se puede configurar)."Created_tmp_disk_tables" son el número de tablas temporales implícitos en el disco creado durante la ejecución declaraciones y "Created_tmp_tables" están basados en memoria. Obviamente, es malo si tiene que ir a la disco en lugar de la memoria todo el tiempo.
También lee este post, como crear el log slow queries
Éstos valores son los idóneos para mi servidor, aunque tampoco estoy muy seguro pues todavía estoy comprobando la respuesta que está dando mi máquina antes esta nueva configuración, y la estoy ajustando a las necesidades de la web.
Lo mejor es que vayáis ajustando poco a poco éstos parámetros. Si sabéis de algún parámetro que se me haya escapado comentármelo please
Tags de búsquedas:
my cnf, configurar my cnf, my cnf centos, fichero my cnf en centos, configurar my cnf mysql, /etc/my cnf, mysql 5 config my cnf, donde estan los archivos de configuracion de mysql en centos, donde esta my cnf, configuara my cnf
Posts Relacionados:
- Configurando y Optimizando un servidor. log slow queries Lo primero es editar el my.cnf Conectados como root en la máquina (los paths aqui indicados son los míos, verificar los vuestros.) abrimos el archivo con vuestro editor favorito. Añadimos...
- Configurando y Optimizando un servidor. Nuevas mejoras en my.cnf y arrancando en utf8 Siguiendo la optimización del servidor comentada en otros post, por ejemplo el de: Configurando y Optimizando un servidor. my.cnf voy a explicar y añadir una configuración que he ido mejorado....
- Optimizando consultas mysql. Creando y definiendo indices. Manage index Los índices se utilizan para buscar las filas con valores de columna específica rápidamente. Sin un índice, MySQL debe comenzar con el registro primero y luego leer a través de...
- Guia rápida para Instalar y configurar un servidor samba. Samba es la implementación de un código libre para la utilización del protocolo SMB (Server Message Block) el cual permite la compartición de archivos, impresoras y recursos en una red...
- pautas y consejos para comparar y elegir un servidor dedicado Desde hace mucho tiempo, aproximadamente 4 meses, llevo buscando un nuevo servidor dedicado para el nuevo desarrollo de la web de la empresa donde trabajo. Es un proyecto que actualmente...

Te ha ayudado el artículo? Colabora!
RSS Feed
Me parece un excelente articulo, estaria genial que actualizaras estos post dando a saver si aun funcionan correctamente en este año, si algo ha cambiado, etc.
Tambien seria buena idea que nos dejaras un tutorial sobre optimización del kernel
Buen dia, Pedro…. ya tengo funcionando el mysql server en Centos 5.6 y va bien…hice ajustes segun me sugeriste y esta caminando bien…. ahora bien, algunas variables no me las esta aceptando…. no se si es porque las tengo despues del [Mysql_safe] pero intenté colocar esa seccion de ultimo y no camina…. te ha pasado alguna vez????
Buenas,
no nunca me ha pasado. Prueba a ver si es un problema, con letras mayusculas, minusculas, espacios, etc.. cada archivo de configuracion ya sea apache, mysql, samba, etc.. tiene un formato determinado, ten cuidado que lo estés escribiendo bien. Échale un ojo a todas las directivas posibles de mysql para [mysql_safe] en la docu oficial de mysql http://dev.mysql.com/doc/refman/5.1/en/mysqld-safe.html
Excelente articulo.
Gracias, me ha ayudado mucho.
tengo consultas complejas sobre db grandes y la configuración ha optimizado las mismas visiblemente.