Wednesday, July 3, 2013

Entender el servidor MySQL

Original post: http://anothermysqldba.blogspot.com/2013/07/understand-your-mysql-server.html

Pensé que podría ser útil para escribir algunas pautas para ayudar a todos a entender diferentes aspectos de su servidor MySQL.

Estos datos se han recogido a través del tiempo y voy a hacer mi mejor esfuerzo para mensajes de referencia. En general consideran que las mejores fuentes de información que se enumeran a continuación:
Así que por el bien de este ejemplo vamos a suponer que acaba de tomar la responsabilidad de un servidor MySQL. ¿Cuál es la mejor forma de obtener la necesiten conocer la información ...

¿Conoces la contraseña a la base de datos? Si no está utilizando el mysql_config_editor (tan pre 5.6) se puede hacer un poco de investigación para averiguar. De lo contrario tienes que reiniciarlo y forzar su camino pulg Suponemos que no quieres para reiniciarlo. Si usted tiene que encontrar la manera de usar - skip-grant-tables revisar algunas entradas del blog con ejemplos anteriores: http://anothermysqldba.blogspot.com/search/label/--skip-grant-tables

Así que primero alguna posición para buscar la contraseña. Esto también significa que si haces una de estas personas pueden encontrar la contraseña más tarde.
  • averiguar si alguien utiliza la contraseña en la línea de comandos.
    • historia | grep mysql
  • crontab-l
    • Si ve scripts de copia de seguridad o etc se ven en las secuencias de comandos de una contraseña
  • localizar. my.cnf
  • . cat bash_history | grep mysql
  • tratar mysql sin contraseña, pero por supuesto, la esperanza es que su caja es seguro.
  • Con MySQL verificación 5.6 si tiene una cuenta configurada ya
    • mysql_config_editor impresión - todo
Aceptar lo que tiene la información de su cuenta y usted está en la caja.
Antes de pasar a un servidor MySQL saber un poco acerca de su servidor primero.
Parte de esta información puede ser que apenas conocen, pero para estar seguros.
Ejecute lo siguiente en un sistema Linux, por ejemplo, para obtener el sistema operativo, Distro, memoria, información del disco.
  • cat / etc / * de liberación
  • uname-a
  • df-ah
  • montar
  • libre-m
  • superior
  • Mirar por encima de este mensaje para obtener información swappiness http://www.mysqlplus.net/tag/swappiness/
  • Usted hace un archivo cnf específico que se utiliza?
    • ps-ef | grep mysql | grep cnf
    • Datadir:
      • ps-ef | grep mysql | grep datadir

Así que ahora saltar en el servidor MySQL y empezar a recopilar algunos datos. Mientras que una revisión del archivo my.cnf puede darle la mayor parte de esta información también se puede recoger desde el servidor.

show variables like '%log%';


Mire sobre su error (. Err) archivo para revisar cualquier problema. Este debe ser el primer sitio donde mires después de un error en el arranque y etc

Entonces, ¿cómo funciona el servidor? Recoger rápidamente el siguiente ejecuta el comando de estado.
  • Versión
  • Temas
  • Preguntas
  • Consultas lentas
  • Abre
  • Mesas Flush
  • Mesas abiertas
  • Las consultas por segundo promedio

mysql> status


El comando "mysqladmin extended-status" también puede darle información para usar con grep, pero dentro del servidor es también válida.

Mantenga un ojo en la siguiente información.
Algo de esto también se encuentra aquí http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56

Usted puede revisar el mensaje mencionado para ver una buena mesa que explica algunos de estos valores. Estos son los que creo que usted debe mantener un ojo en si.

> show status like 'Handler_read_first';
> show status like 'Key_reads';
> show status like 'Select_full_join';


Averigua el porcentaje global de las consultas se ejecuta lentamente. Esperemos que este es un número pequeño.
Utilice la información de estado para poblar estas variables para una comprobación rápida.

set @slow_queries=<value in the status output>;
set @questions=<value in the status output>;
SELECT ROUND(100* (@slow_queries / @questions),2) "Slow Query percentage" \G


Aprenda a entender el resultado de: MOSTRAR INNODB ESTADO \ G
Mantenga un ojo en información de interbloqueo para que pueda empezar a depurar esos.

¿Su sistema tiene disparadores, eventos, procedimientos almacenados?

mysql> SELECT db, name FROM mysql.proc;
mysql> SELECT TRIGGER_SCHEMA , TRIGGER_NAME FROM information_schema.TRIGGERS ;
mysql> SELECT EVENT_NAME FROM information_schema.EVENTS ;


Conozca sus variables de servidor

show variables like '%innodb%';
show variables like '%thread%';
show variables like '%table%';
show variables like '%buffer%';
show variables like '%cache%';


Revise sus cuentas de usuario.
¿Todos tienen contraseñas válidas.

SELECT Host, User ,
CASE
WHEN CHARACTER_LENGTH(Password) = 16 THEN 'Pre-4.1 I should update this'
WHEN CHARACTER_LENGTH(Password) > 16 THEN 'Valid password'
WHEN CHARACTER_LENGTH(Password) =0 THEN ' BLANK PASSWORD so I just do not care if people steal my stuff'
END as Password
FROM mysql.user;


Entender su archivo de registro de InnoDB y averiguar un buen tamaño del buffer.
Baron publicado sobre esto aquí: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
Lea su correo a entender más acerca de esto. A continuación se muestra un ejemplo de cómo utilizar esta información también. He utilizado sus números para el ejemplo de ayudar. Como dijo el Barón, ejecute este cuando el tráfico es pesado para obtener información válida.

mysql>pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G pager;
mysql>SET @sequence1= 3836410803;
mysql>SET @sequence2= 3838334638;
mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) /2 as innodb_log_file_size_used ;
mysql>select (@@innodb_log_file_size / 1024) / 1024 as current_log_file_MB_size;


El tamaño del buffer.
Mientras que la siguiente consulta se publica por la red y da un punto de partida válido para una agrupación de almacenamiento intermedio, también he visto algunos números no válidos o poco realista basado en el servidor que tenía. Personalmente, revise los resultados de la consulta a continuación. Revise los resultados de mayor tráfico y la cantidad de datos que está enviando a los registros por puesto de Baron. Luego tomar en cuenta la cantidad de memoria que tiene en el servidor. Cuanto más su base de datos se ejecuta en la memoria más rápida es conseguir resultados, pero hay que tener en cuenta lo demás es la base de datos haciendo. Así que usted tiene que usar su propio juicio y la investigación para conseguir un buen precio para el tamaño del buffer. Otra opción podría ser utilizar el tools.percona.com , responda a las preguntas y ver lo que te dice.


mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) *2 as innodb_buffer_pool_GB_test ;

mysql>SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 3 PowerOf1024) B \G



A continuación, deberá revisar esta entrada del blog arca abierta para profundizar en sus índices y más etc. Gran información sobre ese puesto y el lugar en general.
http://code.openark.org/blog/mysql/useful-database-analysis-queries-with-information_schema


Para profundizar en más datos sobre el servidor ....


¿Cuáles son los cuadros más antiguos, tal vez tenga que archivar esos?

SELECT CONCAT(`TABLE_SCHEMA`, "." , `TABLE_NAME`) as name , `UPDATE_TIME`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql','test','performance_schema') AND `UPDATE_TIME` IS NOT NULL ORDER BY `UPDATE_TIME` LIMIT 25;



¿Qué está tomando más espacio?

SELECT concat(table_schema,'.',table_name) table_name,
concat(round(data_length/(1024*1024),2),'M') data_length
FROM information_schema.TABLES
ORDER BY data_length DESC LIMIT 5;


Esto es sólo un punto de partida para que usted entienda lo que está pasando con el servidor. Utilice los sitios que figuran en este sitio para aprender más.