MySQL Server Sintonía pregunta

Original post: http://anothermysqldba.blogspot.com/2013/05/mysql-server-tuning-question.html



Me encontré con esta oferta de trabajo el otro día en elance.com o odesk.com.

La persona / empresa estaba buscando un "experto en optimización del servidor MySQL". No es una preocupación importante, pero al ver a MySQL MySQL escanda, que gi ve una …

[Lea más]
Cómo identificar MySQL consultas lentas y preocupaciones relacionados

Original Post: http://anothermysqldba.blogspot.com/2013/05/how-to-identify-mysql-slow-queries-and.html

Esta entrada de blog es parte de la serie de blog 

[Lea más]
MySQL: ignored in –skip-name-resolve mode

Al arrancar un servidor MySQL nos podmeos encontrar en los logs un error similar al siguiente:

110510  9:29:06 [Warning] 'user' entry 'root@systemadmin.es' ignored in --skip-name-resolve mode.

Esto se debe a la contradicción que existe entre usar nombres DNS y decirle en la configuración que no los resuelva:

# grep resol /etc/my.cnf 
skip-name-resolve

Las entradas que deban resolver nombres simplemente se ignoraran en los permisos, por lo que podemos pasar a usar IPs o rangos de IPs en lugar de nombres. O bien, eliminar la opción skip-name-resolve del arranque del MySQL.

Tags: MySQL
Relacionados

[Lea más]
Múltiples nodos de gestión en un MySQL Cluster (ndb)

Tal como vimos en la instalación de MySQL Cluster, el nodo de gestión (ndb_mgmd) se encarga de arbitrar el cluster. Vamos a ver cómo redundar dicho servicio.

Para añadir más de un nodo de gestión, deberemos modificar su fichero config.ini, añadiendo en la definición otro nodo, por ejemplo:

[ndb_mgmd]
hostname=10.10.88.15
PortNumber=1186
datadir=/var/mysql/mgm
nodeid=1

[ndb_mgmd]
hostname=10.10.88.14
PortNumber=1186
datadir=/var/mysql/mgm
nodeid=4

Deberemos recargar la configuración, si tenemos un nodo ya activo, con la opción –reload:

/opt/mysql-cluster/bin/ndb_mgmd --skip-daemon \
  -f /usr/local/etc/mysql/config.ini --reload \
  --configdir=/usr/local/etc/mysql/

En el otro nodo deberemos arrancar el nuevo daemon ndb_mgmd con la …

[Lea más]
MySQL, el extraño caso de un campo timestamp

Hace un tiempo descubrí una característica (tal vez sea un bug) sobre los campos timestamp de MySQL. Es probable que este documentado en alguna parte que todavía no he leído:

Cuando se añade un campo timestamp a una tabla, MySQL agrega mágicamente algunas características al nuevo campo creado como un «trigger» y la fecha actual como valor por defecto.

Aquí esta el script donde se produce el caso:

-- CREANDO UNA TABLA CUALQUIERA E INSERTANDO DATOS 
mysql> create table t(
    -> id int not null primary key auto_increment,
    -> val varchar(50)
    -> );
Query OK, 0 rows affected (0.15 sec)

mysql> insert into t (val) values ("foo") ,("var");
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t;
+----+------+
| id | val  |
+----+------+
|  1 | foo  |
|  2 | var  |
+----+------+
2 rows in set (0.00 sec)


-- AGREGANDO UN CAMPO TIMESTAMP Y MAS DATOS
mysql> alter …
[Lea más]
Snapshots de MySQL y la Query Cache

Algunos datos que pueden ser interesantes mostrar en un gráfico son las queries en la cache y la memoria libre de la query cache:

mysql> show status like 'Qca%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| Qcache_free_blocks      | 2          |
| Qcache_free_memory      | 400954376  |
| Qcache_hits             | 1014709429 |
| Qcache_inserts          | 149894868  |
| Qcache_lowmem_prunes    | 1785432    |
| Qcache_not_cached       | 57337894   |
| Qcache_queries_in_cache | 26915      |
| Qcache_total_blocks     | 53982      |
+-------------------------+------------+
8 rows in set (0.00 sec)

Si mostramos las queries en cache en gráfico podemos obtener algo similar a:

Queries en cache

Para el caso …

[Lea más]
Comprobación del estado de un slave de MySQL con Nagios

En un post anterior comenté que no es suficiente mirar el Seconds_Behind_Master para saber si se esta replicando correctamente un MySQL, por lo que las herramientas de monitorización se deben adaptar a esto.

El siguiente script comprueba no sólo Seconds_Behind_Master, sino también Last_Errno para dar por buena la sincronización entre master y slave. Los dos únicos parámetros que debemos definir en el script son:

  • SBMLIMIT: Número de segundos de retraso máximo que permitimos, no nos interesa que por una pequeña desincronización puntual nos este avisando
  • AUTOSTARTSLAVE: Si debe intentar arrancar el slave en caso que se lo encuentre parado

Por otro lado, espera que el password de …

[Lea más]
MySQL Vista global de las bases de datos

Cansado de tener que averiguar manualmente  cuanto espacio ocupan mis bases de datos, acabo de crear un procedimiento almacenado para tener una vista global de las bases de datos que tenemos en nuestro servidor MySQL.

En MySQL no hay disponible  un comando que nos permita tener una resumen global de las bases de datos, algo que se parezca a SHOW TABLE STATUS pero para todas las bases de datos. El comando SHOW DATABASES sólo lista las bases actuales pero no nos dice cuanto espacio ocupan o cuantas tablas hay, etc.

El procedimiento que escribí esta basado en la base de datos INFORMATION_SCHEMA, que contiene mucha información de todas las bases de datos existentes.

Ya antes en un post anterior mencioné que podemos tener todas estas «herramientas» en una base de datos llamada tools, es por eso que …

[Lea más]
El curioso caso de los int comparados con strings en MySQL

El MySQL a veces tiene comportamientos sorprendentes o acabas descubriendo porque stopped no es lo mismo que not running. Por ejemplo, comparando una cadena con un int puedes obtener resultados.

Vamos a suponer la siguiente tabla de ejemplo con datos:

mysql> create table test(id int, txt text);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into test values(1,"uno");
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(2,"dos");
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values(3,"tres");
Query OK, 1 row affected (0.00 sec)

Cualquier podría suponer que si comparamos el id con un string no obtendremos ningún resultado:

mysql> select * from test where id="asfsafsa";
Empty set, 1 warning (0.00 sec)

mysql> show warnings; …
[Lea más]
Cambio en los Senconds_Behind_Master en MySQL 5.6

En los cambios de MySQL 5.5 a MySQL 5.6 podemos encontrar el siguiente comentario que puede sonar raro:

Important Change: Replication: Formerly, the value of the Seconds_Behind_Master column in the output of SHOW SLAVE STATUS was always set to NULL whenever the SQL thread or the I/O thread was stopped. Now, this column is set to NULL only if the SQL thread is not running, or if the I/O thread is not running following a check to determine whether or not the SQL thread has processed all of the relay log. (If the SQL thread has finished processing and the I/O thread is running, Seconds_Behind_Master is 0.) (Bug #12946333)

Suena raro que se diferencie entre “stopped” y “not running”, pero tiene su explicación.

Podemos encontrarnos que los Seconds_Behind_Master vayan …

[Lea más]