Showing entries 1 to 10 of 154
Próximo 10 Viejas entradas »
Displaying posts with tag: DBA (reset)
innodbchecksum: Uso de ibdata

En una base de datos con InnoDB nos podemos encontrar que tenemos un ibdata1 absurdamente grande y no acabamos de entender que hay en dicho fichero. Mediante un attach del bug #57611 de MySQL, podemos ver el tipo de páginas que contiene el ibdata

Si lo bajamos y lo compilamos, simplemente deberemos ejecutarlo indicando dónde tenemos el ibdata. Si el fichero es grande quiza nos interese añadir la opción -v para ver el progreso:

# ./innodbchecksum -v /mysql/data/mysql-data/ibdata1 
file /mysql/data/mysql-data/ibdata1 = 25436356608 bytes (1552512 pages)...
checking pages in range 0 to 1552511
page 19999 okay: 1.288% done
page 29999 okay: 1.932% done
page 39999 okay: 2.576% done
(...)
0       bad checksum
1189668 FIL_PAGE_INDEX
325740  FIL_PAGE_UNDO_LOG
15      FIL_PAGE_INODE
555     FIL_PAGE_IBUF_FREE_LIST
36328 …
[Lea más]
MySQL: extended insert

Al realizar dumps con mysqldump podemos hacerlo con los datos insertados mediante un único INSERT o bien un INSERT pode cada fila

# mysqldump --skip-extended-insert dbejemplo | grep ^INSER
INSERT INTO `a` VALUES (1);
INSERT INTO `a` VALUES (2);
INSERT INTO `a` VALUES (3);
# mysqldump --extended-insert dbejemplo | grep ^INSER
INSERT INTO `a` VALUES (1),(2),(3);

Dicho detalle también afecta al tiempo de importación

Vamos a usar una base de datos relativamente pequeña de ejemplo:

# du -hs /var/lib/mysql/dbejemplo/
57M     /var/lib/mysql/dbejemplo/

Creamos los dumps con y sin –extended-insert

# mysqldump --skip-extended-insert dbejemplo > /var/backup/test/skip-extended-insert.sql
# mysqldump --extended-insert dbejemplo > /var/backup/test/extended-insert.sql

En el caso del dump com extended …

[Lea más]
Total de transacciones InnoDB en MySQL

Para tener una idea de la actividad que tiene una base de dados normalmentr de usa SHOW PROCESLIST, pero es engañoso en algunos casos. Por ejemplo, si tenemos un pool de conexiones y también transacciones InnoDB abiertas veremos en ambos casos que estan en estado Sleep

Podemos verlo mediante la siguiente query:

mysql> select ps.id, ps.user,ps.host, ps.db, ps.command, ps.time, ps.state, trx.trx_state, ps.info from PROCESSLIST ps left join INNODB_TRX trx on ps.id=trx.trx_mysql_thread_id;
+----+------+-----------+--------------------+---------+------+-----------+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | user | host      | db                 | command | time | state     | trx_state | info …
[Lea más]
MySQL server health: the error files

As I already wrote on previous entrances, modify a few parameters while configuring the MySQL server can raise Error 1067 Can’t Start the Server  (still in spanish but being publish soon).Thanks to this error, I improve the knowkedge about MySQL, config the server, performance … although the topics I like the most is database design. But, you have to keep on learning, haven’t you? Navigating thrugh MySQL bugs I would like to thank the MySQL error team because I could know good practices every MySQL DBA should follow due to...read more

Esta entrada MySQL server health: the error files es contenido original de Manejando datos - Blog de bases de datos y programación. …

[Lea más]
CREATE TABLE en MySQL 5.6

En versiones anteriores a MySQL 5.6 podíamos crear tablas sin especificar el storage engine:

mysql> create table lol(id int);
Query OK, 0 rows affected (0.11 sec)

A partir de MySQL 5.6, por defecto, se quejará de error de sintaxis:

mysql> create table lol(int id);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int id)' at line 1

Si miramos el sql_mode que tenemos por defecto en MySQL 5.6 veremos que tenemos:

mysql> show variables like 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| sql_mode      | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | …
[Lea más]
Formato de la contraseña de MySQL

En las versiones recientes de MySQL (+4.1) el formato por defecto se trata de un hash formado por 40 carácteres:

mysql> select password("systemadmin.es");
+-------------------------------------------+
| password("systemadmin.es")                |
+-------------------------------------------+
| *3E04A027486FB53129AC5812D2CF8E4062899311 |
+-------------------------------------------+
1 row in set (0.00 sec)

Dicho hash corresponde al resultado de aplicar el SHA1 a la cadena que le pasamos dos veces, pero la segunda no sobre la cadena hexadecimal sino el hash binario, lo podemos ver en el código de MySQL:

/*
    MySQL 4.1.1 password hashing: SHA conversion (see RFC 2289, 3174) twice
    applied to the password string, and then produced octet sequence is
    converted to hex string.
    The result of this function is used as return value from PASSWORD() and
    is stored in the …
[Lea más]
Cliente MySQL 5.6: Ignorar comandos SQL

A partir de la versión 5.6.8 del cliente de MySQL podremos ver que tenemos algunas queries que son ignoradas del history.

Una forma común de obtener contraseñas de un MySQL era mirar en los ficheros .mysql_history en búsqueda de dichas contraseñas, por esto se ha añadido la opción –histignore para poder controlar que comandos acaban en el history del cliente de MySQL.

Por defecto, incluye las keywords IDENTIFIED y PASSWORD de la siguiente manera:

*IDENTIFIED*:*PASSWORD*

Por lo que cualquier comando, incluse una SELECT o un CREATE TABLE que incluya un campo llamado “password”, no se añadirá el history:

mysql> use mysql
Database changed
mysql> select user,password from mysql.user;
+------+-------------------------------------------+
| user | password                                  | …
[Lea más]
xtrabackup / innobackupex: Backup y restore con Galera

Para realizar backups en Galera, podemos usar xtrabackup.

La única diferéncia es que deberemos conservar la posición del backup, mediante la opción –galera-info se guarda automáticamente:

# innobackupex --galera-info /var/backups/xtrabackup

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

(...)

140826 16:57:33  innobackupex: Connection to database server closed
140826 16:57:33  innobackupex: completed OK!

Dentro del backup podemos encontrar el fichero xtrabackup_binlog_info:

# ls /var/backups/xtrabackup/2014-08-26_16-57-30/
backup-my.cnf           ibdata1                 mysql/                  test/                   xtrabackup_checkpoints  xtrabackup_info
binlog.000008           jordidb/                performance_schema/     xtrabackup_binlog_info
[Lea más]
xtrabackup / innobackupex: Backup y restore parcial

Mediante xtrabackup también podemos realizar tanto backups como restauraciones parciales. Vamos a ver cómo hacer un backup de una base de datos en concreto y a continuación cómo realizar una restauración parcial de una tabla.

Para realizar un backup parcial de una base de datos únicamente deberemos añadir la opción –databases para indicarla, por ejemplo:

# innobackupex --databases="db2" /var/backups/xtrabackup/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

(...)
innobackupex: Backup created in directory '/var/backups/xtrabackup/2014-08-26_19-51-43'
innobackupex: MySQL binlog position: filename 'binlog.000017', position 1496, gtid_executed …
[Lea más]
Balanceador software (PHP) para MySQL: mysqlnd_ms

Mediante la extensión mysqlnd_ms podemos automáticamente balancear las queries según sean de lectura o escritura entre el MySQL master y sus diferentes MySQL slaves. Vamos a ver cómo instalarla

En caso que no lo tengamos ya habilitado, deberemos recompilar PHP con mysqlnd habilitado para los diferentes métodos de acceso al MySQL. En el ejemplo lo usamos tanto para el clásico mysql (funciones llamadas mysql_), mysqli y para el PDO:

./configure' \
(...)
--enable-mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
(...)

A continuación deberemos instalar el modulo mysqlnd_ms para poder usar dicho balanceador mediante pecl:

# pecl install mysqlnd_ms

El el fichero de configuración del …

[Lea más]
Showing entries 1 to 10 of 154
Próximo 10 Viejas entradas »