Displaying posts with tag: DBA (reset)
slave-skip-errors: Ignorar automáticamente errores de replicación por tipo

Cada aplicación es un mundo y cada uno de estos mundos tiene otro mundo dentro sobre la forma que utiliza la base de datos y cómo se pueden replicar los datos entre diferentes slaves. Mediante la directiva slave-skip-errors podemos ignorar errores de replicación automáticamente (por lo tanto simplemente se salta automáticamente la query)

En la documentación de MySQL podemos encontrar un listado de errores y sus descripciones. Por ejemplo si se intenta crear una tabla que ya existe en el slave obtendríamos el siguiente error:

  • Error: 1050 SQLSTATE: 42S01 (ER_TABLE_EXISTS_ERROR): Message: Table ‘%s’ already exists

Por lo que podemos añadir el código 1050 en el slave-skip-errors para ignorar …

[Lea más]
pt-variable-advisor: Revisión de las variables de MySQL automatizada

Al instalar una base de datos deberemos tener en consideración las variables de MySQL de acuerdo con el sistema en concreto y los datos. En el Percona Toolkit podemos encontrar la herramienta pt-variable-advisor que nos puede ayudar a ajustar las variables.

Si únicamente queremos usar dicha herramienta la podemos descargar mediante:

wget percona.com/get/pt-variable-advisor

Para usarla deberemos indicar el host y los datos de acceso:

# perl pt-variable-advisor localhost -p $(cat /var/mysql/.mysql.root.pass)
# WARN delay_key_write: MyISAM index blocks are never flushed until necessary.

# WARN innodb_log_file_size: The InnoDB log file size is set to its default value, which is not usable on production systems.

# NOTE log_warnings-2: Log_warnings must be set greater than 1 to log unusual events such as aborted connections.

# NOTE max_binlog_size: The …
[Lea más]
Configurar el número de conexiones SUPER extra de un MySQL

En el caso un MySQL llegue a max_connections, da el error “Too many connections” a todas las nuevas conexiones de usuario. Pero en el caso que se conecte un usuario con el privilegio SUPER, permite una conexión extra.

Dicha conexión extra puede quedar muy fácilmente ocupada por algún script que se conecta al MySQL con dicho privilegio o otro miembro del equipo de administradores. Por lo tanto, resulta útil que pueda ser configurable, por lo que he hecho un patch para ello.

En el código fuente de MySQL podemos ver que el código que necesitamos modificar es el siguiente:

(...)
  if (connection_count >= max_connections + 1 || …
[Lea más]
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated

Al actualizar a MySQL 5.6 veremos que nos aparecerá el siguiente WARNING en el log de MySQL:

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated

Tal y como podemos ver en la documentación de actualizar a MySQL 5.6, se modifica el comportamiento del tipo de datos TIMESTAMP. De momento se mantiene el comportamiento por defecto con el WARNING, pero en la siguiente versión va a desparecer dicho comportamiento. Para quitar el WARNING deberemos añadir la opción explicit_defaults_for_timestamp en el my.cnf.

Mediante dicha opción habilitaremos el nuevo comportamiento de TIMESTAMP

Tags: MySQL

[Lea más]
FATAL ERROR: Could not find my-default.cnf

Instalando MySQL 5.6 me encontré con el siguiente error:

# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/var/mysql
FATAL ERROR: Could not find my-default.cnf

If you compiled from source, you need to run 'make install' to
copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top
level of the extracted archive, or pass the --basedir option
pointing to that location.

Si hacemos un strace al proceso podemos ver:

stat64("./bin/my_print_defaults", 0x93500c4) = -1 ENOENT (No such file or directory)

Por lo tanto, lo que le pasa es que no esta encontrando binarios que necesita para la ejecución del script. Para solucionarlo simplemente deberemos indicar dónde esta instalado el MySQL mediante la …

[Lea más]
InnoDB: ERROR: the age of the last checkpoint is 9433961

En bases de datos MySQL con mucha actividad o que tratan con datos muy grandes sobre tablas InnoDB nos podemos encontrar con mensajes simulares a:

110221  1:28:31  InnoDB: ERROR: the age of the last checkpoint is 9433961,
InnoDB: which exceeds the log group capacity 9433498.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

El mensaje se refiere el redo log, son los ficheros llamados ib_logfile0 y ib_logfile1 que podemos encontrar en el datadir del MySQL. En estos ficheros se almacenan los cambios sobre tablas InnoDB para que, en caso de un crash de MySQL se ejecuten para completar las transacciones.

La variable que controla el tamaño de dichos ficheros es innodb_log_file_size, …

[Lea más]
InnoDB: Warning: a long semaphore wait

Actualizando un MySQL de la versión 5.1 a la versión 5.5 empezaron a salir errores como el siguiente:

InnoDB: Warning: a long semaphore wait:
--Thread 139816751400704 has waited at trx0trx.c line 754 for 241.00 seconds the semaphore:
Mutex at 0x1770d48 created file srv0srv.c line 1024, lock var 1
waiters flag 1

Causando que se queden colgadas las queries y por lo tanto colapsando el servidor MySQL.

La única forma de recuperar el MySQL era matando el proceso. Buscando el problema, encontré en los foros de MySQL que mediante la opción –skip-innodb_adaptive_hash_index se soluciona, pero no hay feedback al respecto. Aparentemente, dejando ya más de un mes de margen parece que efectivamente ha solucionado el problema.

Tags: …

[Lea más]
Check de Nagios para el log de MySQL

En el log del MySQL podemos encontrar errores, como tablas corruptas, que de otra forma deberíamos de detectar en la capa de aplicación

Tomando de ejemplo una tabla corrupta, tendríamos en el log entradas similares a la siguiente por cada query que use dicha tabla:

130107 20:00:19 [ERROR] /usr/local/mysql/bin/mysqld: Table './db/tbl' is marked as crashed and should be repaired

Otros errores comunes, como por ejemplo el Sort aborted (una query con sort que no se ha podido completar o la hemos matado) podemos ignorar el error para que no nos vaya saltando la alerta de Nagios:

120913 10:58:03 [ERROR] /usr/local/mysql51/libexec/mysqld: Sort aborted

En el caso que tengamos un sistema de ficheros dedicado para el datadir del MySQL, se nos quejará que el directorio …

[Lea más]
Importador/Exportador para MySQL: mydumper y myloader

De sobra es conocido que mysqldump no es la mejor forma de hacer backups por lo básica que es la herramienta. Anteriormente ya hemos hablado de otras herramientas como mylvmbackup que hace un backup físico (datafiles) de la base de datos, vamos a ver el caso de mydumper.

Dicha herramienta la ha creado Domas Mituzas que según dice:

My current occupations:
Database Engineer at Facebook
Systems Engineer at Wikimedia Foundation (Wikipedia)

Para instalarla haremos:

cd /usr/local/src
wget https://launchpad.net/mydumper/0.5/0.5.2/+download/mydumper-0.5.2.tar.gz
tar xzf mydumper-0.5.2.tar.gz 
cd mydumper-0.5.2

Necesitaremos tener instalado …

[Lea más]
Comparar número de registros de dos bases de datos MySQL-MariaDB

La semana pasada me surgió la necesidad de comparar 2 bases de datos casi idénticas en MySQL. Como me corria un poco de prisa, decidí crear una consulta simple para ver si todo estaba bien: SELECT table_name, engine, row_format , SUM( CASE WHEN table_schema = "base_datos_1" THEN table_rows ELSE NULL END) AS "base_datos_1" , SUM( …

Continuar leyendo »

The post Comparar número de registros de dos bases de datos MySQL-MariaDB appeared first on Manejando datos.