Displaying posts with tag: DBA (reset)
Clausula CASE de MySQL

Al realizar queries podemos modificar lo que devolvemos usando la clausula CASE, vamos a ver un ejemplo:

Supongamos que tenemos una columna que nos devuelve 4 o 2:

mysql> show status like 'wsrep%';
(...)
| wsrep_local_state            | 4                                               |
| wsrep_local_state_comment    | Synced                                          |
(...)
mysql> show status like 'wsrep%';
(...)
| wsrep_local_state            | 2                                                           |
| wsrep_local_state_comment    | Donor/Desynced                                              |
(...)

Mediante CASE podemos transformar el 2 en un 1 y el 4 en un 0, mucho más fácil de tratar con, por ejemplo, checks de nagios. En este caso se trata de una query contra information_schema.GLOBAL_STATUS:

mysql> SELECT case VARIABLE_VALUE when 4 then …
[Lea más]
Actualización de MySQL 5.1 a 5.5 desde paquetes community

En el caso que necesitemos hacer una actualización desde los paquetes community de MySQL nos encontraremos que no podemos simplemente actualizarlos. Vamos a ver los pasos:

Primero deberemos parar el MySQL limpiamente (evidentemente, necesitaremos backups por si algo sale mal):

/etc/init.d/mysql stop

Si intentamos hacer la actualización directamente veremos que no nos deja:

# ls
MySQL-client-5.5.37-1.rhel5.x86_64.rpm  MySQL-server-5.5.37-1.rhel5.x86_64.rpm  MySQL-shared-5.5.37-1.rhel5.x86_64.rpm
# rpm -Uvh MySQL-*
Preparing...                ########################################### [100%]
Repackaging...              
   1:MySQL-client-community #   1:MySQL-server-community ########################################### [ 33%]
   2:MySQL-shared-community ########################################### [ 67%]
Upgrading...                
   1:MySQL-client …
[Lea más]
mysqldump: Guardar la posición del master

Al realizar un backup con mysqldump nos puede interesar conservar la posición de los binlogs para poder hacer recuperaciones en un punto en el tiempo en lugar del último backup

Para que el mysqldump guarde la posición deberemos usar la opción –master-data:

Si usamos –master-data=1 se guardará la posición mediante el comando CHANGE MASTER, esto es más adecuado si queremos importar los datos en un slave, pero en el master producirá un error:

(...)
--
-- Position to start replication or point-in-time recovery from
--

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
(...)

Si usamos –master-data=2 el CHANGE MASTER estará comentado, por lo que nos podrá valer tanto …

[Lea más]
MySQL Point in Time Recovery mediante binlogs y mysqldump

Vamos a ver cómo realizar una recuperación de datos de una base de datos MySQL en un determinado punto en el tiempo mediante backups con mysqldump y los binlogs activados

Primero vamos a preparar una base de datos de ejemplo:

mysql> create database jordidb;
Query OK, 1 row affected (0.00 sec)

mysql> use jordidb
Database changed
mysql> create table tbl(id int);
Query OK, 0 rows affected (0.03 sec)

mysql> insert into tbl values (1),(2),(3);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from tbl;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

A continuación generamos un mysqldump con los datos de posición de los binlogs (opción …

[Lea más]
Forzar sincronización (SST) en Galera

Si queremos forzar la sincronización de un determinado nodo con el resto, deberemos borrar el fichero grastate.dat

Primero deberemos apagar el nodo:

# /etc/init.d/mysql stop
Shutting down MySQL (Percona XtraDB Cluster).... SUCCESS! 

Luego borramos el fichero del datadir:

# rm -f /var/lib/mysql/grastate.dat 

Al volver a arrancar empezará la resincronización:

# /etc/init.d/mysql start
Starting MySQL (Percona XtraDB Cluster)....State transfer in progress, setting sleep higher
.. SUCCESS! 

En el nodo “donante“, si utilizamos xtrabackup para la sincronización, podemos encontrar el fichero innobackup.backup.log en el datadir con el log:

# cat innobackup.backup.log

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its …
[Lea más]
Malas costumbres en el my.cnf

Realizando una actualización de MySQL me encontré con una mala costumbre bastante común.

Al ejecutar el mysql_upgrade fallaba:

# mysql_upgrade 
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
FATAL ERROR: Upgrade failed

Por lo que me decidí a ejecutar los comandos manualmente:

mysqlcheck --all-databases --check-upgrade --auto-repair  
mysql < fix_priv_tables  
mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names

Ejecutando el primero (mysqlcheck) me encontré con el problema real:

# mysqlcheck --all-databases --check-upgrade --auto-repair
mysqlcheck: Got error: 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) when trying to connect

En el my.cnf estaban añadidas las opciones (cómo dónde deja el …

[Lea más]
Test de procesos de selección – parte 2

Siguiendo el post anterior sobre malas preguntas en test de procesos de selección, hoy veremos la siguiente pregunta:

¿Cuantos servidores MySQL puedes ejecutar al mismo tiempo en un solo servidor usando unicamente una sola IP?

Las opciones son las siguientes:

  • Es necesaria una IP para cada servicio, se deben añadir más IPs al servidor: Falso, podemos hacer escuchar el daemon en otro puerto.
  • MySQL usa el puerto 3306, se puede cambiar, pero no se recomienda: Que se el por defecto no quiere decir que no se pueda cambiar ni que no se recomienda, simplemente que debe tenerse en cuenta

La parte complicada viene con:

  • Puedes ejecutar tantos servicios como quieras: Dado que habla de IP, …
[Lea más]
Cómo calcular el consumo máximo de memoria de MySQL

Para poder dimensionar las variables referentes a tamaños de memoria de un MySQL deberemos tener en cuenta si se trata de un buffer global o bien por thread. Lo podemos calcular automáticamente con la salida de SHOW VARIABLES y esta herramienta online

Las variables siguientes se tratan de buffers globales:

  • key_buffer_size
  • query_cache_size
  • tmp_table_size
  • innodb_buffer_pool_size
  • innodb_additional_mem_pool_size
  • innodb_log_buffer_size

Mientras que las siguientes son por thread:

  • sort_buffer_size
  • read_buffer_size
  • read_rnd_buffer_size
  • join_buffer_size
  • thread_stack
[Lea más]
MySQL 5.6: [ERROR] Can’t find messagefile /usr/share/mysql/errmsg.sys

Instalando una base de datos con MySQL 5.6 nos podemos encontrar con el siguiente error al intentar inicializar el datadir:

# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/mysql --basedir=/usr/local/mysql
Installing MySQL system tables...2014-07-15 10:13:45 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
2014-07-15 10:13:45 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2014-07-15 10:13:45 6962 [ERROR] Can't find messagefile '/usr/share/mysql/errmsg.sys'

En realidad lo que esta ocurriendo es que no esta encontrando las variables necesarias para hacer la instalación, por lo que simplemente deberemos indicar mediante la opción …

[Lea más]
MySQL: Listar transacciones bloqueantes

Anteriormente hemos visto cómo sacar los datos del SHOW PROCESSLIST y además el estado de la transacción InnoDB si es el caso, pero aun así deberemos interpretar la salida para buscar las transacciones que están bloqueando. Si tenemos mucha concurrencia nos pude llegar a ser imposible. Mediante la tabla information_schema.innodb_lock_waits podemos resolver dicho problema

Mediante la tabla information_schema.innodb_lock_waits obtenemos la relación de qué transacción esta bloquenado a que otra:

mysql> desc information_schema.innodb_lock_waits;
+-------------------+-------------+------+-----+---------+-------+
| Field             | Type        | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+---------+-------+
| requesting_trx_id | varchar(18) | NO   |     | …
[Lea más]