Displaying posts with tag: DBA (reset)
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]
Posición inicial de los binlogs (MySQL)

Al realizar el SHOW MASTER STATUS para iniciar la replicación siempre me había preguntado porque la posición inicial no era ni 0 ni 1. Mediante SHOW BINLOG EVENTS podemos verlo:

El primer evento de un binlog contiene información sobre el formato del binlog, por lo tanto, es un evento que realmente no hace nada y que nos podemos saltar (realmente si lo aplicamos tampoco realiza ningún cambio):

mysql-master> show binlog events limit 2;
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+------------------+-----+-------------+-----------+-------------+---------------------------------------+
| mysql-bin.000355 |   4 | Format_desc |         1 |         106 | Server ver: 5.1.67-log, Binlog ver: 4 |
| …
[Lea más]
Buscar las foreign keys que referencian a una tabla en MySQL

En MySQL, mediante INFORMATION_SCHEMA podemos listar las tablas que tienen foreign keys hacia la tabla que nos interesa

Para ello deberemos hacer la siguiente query a la tabla KEY_COLUMN_USAGE:

SELECT table_name,column_name,constraint_name, referenced_table_name,referenced_column_name
FROM information_schema.key_column_usage
WHERE referenced_table_name = 'tabla';

Por ejemplo, suponiendo que tenemos las siguientes dos tablas:

mysql> CREATE TABLE fc1 (
    ->     i INT PRIMARY KEY,
    ->     j INT
    -> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.25 sec)

mysql> CREATE TABLE fc2 (
    ->     m INT PRIMARY KEY,
    ->     n INT,
    ->     FOREIGN KEY ni (n) REFERENCES fc1 (i)
    ->         ON DELETE CASCADE
    -> ) ENGINE = InnoDB;
Query OK, 0 rows affected (0.15 sec)

Mediante dicha query podremos listar …

[Lea más]
xtrabackup: Restaurar backup incremental

Tal y como vimos anteriormente, mediante xtrabackup podemos hacer backups incrementales sobre un full. Vamos a ver cómo restaurarlos.

Vamos a suponer que tenemos los siguientes backups:

# ls -la
total 36
drwxr-xr-x 9 root root 4096 Aug 26 19:06 .
drwxr-xr-x 3 root root 4096 Aug 26 14:04 ..
drwxr-xr-x 6 root root 4096 Aug 26 19:02 2014-08-26_19-02-14
drwxr-xr-x 6 root root 4096 Aug 26 19:03 2014-08-26_19-03-30
drwxr-xr-x 6 root root 4096 Aug 26 19:06 2014-08-26_19-06-41

Los renombro por tipo para simplificar la sintaxi:

# mv 2014-08-26_19-02-14 FULL
# mv 2014-08-26_19-03-30 INC1
# mv 2014-08-26_19-06-41 INC2

Primero deberemos preparar el backup aplicando las transacciones ya comiteadas (–apply-log –redo-only) tanto para el full como con los …

[Lea más]
Lost connection to MySQL server at reading initial communication packet

Intentando conectar a un MySQL me encontré con el siguiente error:

# mysql -h 192.168.157.97
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

Haciendo un tcpdump veremos que la conexión TCP se establece y se cierra correctamente:

# tcpdump -nni any 'host 192.168.157.97'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
16:31:44.812893 IP 192.168.157.97.54337 > 192.168.157.121.3306: Flags [S], seq 4035808194, win 5840, options [mss 1460,sackOK,TS val 2347458047 ecr 0,nop,wscale 7], length 0
16:31:44.812937 IP 192.168.157.121.3306 > 192.168.157.97.54337: Flags [S.], seq 1534874692, ack 4035808195, win 5792, options [mss 1460,sackOK,TS val 2340675374 ecr 2347458047,nop,wscale 7], length 0
16:31:44.813560 IP …
[Lea más]
xtrabackup / innobackupex: Restaurar full

No solo es importante tener los backups, también saber restaurarlos. Vamos a ver cómo restaurar un backup full hecho con xtrabackup

Primero deberemos asegurarnos que se trata de un backup, lo podemos ver mediante el fichero xtrabackup_checkpoints:

# cat FULL/xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0
to_lsn = 1862778
last_lsn = 1862778
compact = 0

A continuación deberemos aplicar los logs para hacer undo de transacciones no comiteadas o aplicar cambios pendientes de transacciones que ya esta comiteadas. Lo deberemos hacer mediante la opción –apply-log:

# innobackupex --apply-log /var/backups/xtrabackup/FULL/

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 …
[Lea más]
xtrabackup / innobackupex: Backups full y incremental

Podemos utilizar xtrabackup mediante el wrapper innobackupex para realizar backups de MySQL sin la asistencia de LVM de una forma muy similar a hotbackup. Vamos a ver un ejemplo de cómo realizar un full backup, un incremental y otro incremental del incremental anterior

Para realizar un backup simplemente deberemos indicar dónde dejar el backup:

# innobackupex /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.

Get the latest version of Percona XtraBackup, documentation, and help resources:

http://www.percona.com/xb/p

140824 19:04:44  innobackupex: Connecting to MySQL server with DSN …
[Lea más]
MySQL 5.6 con GTID: El slave también debe tener binlogs

Al montar un slave de MySQL resulta común evitar tener binlogs (si no es master de otro slave) para evitat el overhead de dicha escritura a disco

Pero si intentamos el mismo setup con GTID tendremos el siguiente error:

2014-08-25 19:39:19 1599 [ERROR] --gtid-mode=ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates
2014-08-25 19:39:19 1599 [ERROR] Aborting

No es posible tener un slave con GTID sin los binlogs activos también en el slave.

Esto se debe a la forma que se aplican las transacciones en el slave con GTID:

Primero el slave comprueba que el GTID de la transacción no se ha usado en su propio binlog, si es así, aplica la transacción y el GTID y lo escribe en su binlog. Por esto necesitamos tanto los binlogs (opción …

[Lea más]
MySQL 5.6: master slave con GTID

A continuación vamos a ver cómo montar la replicación master-slave en MySQL 5.6 con GTID

Primero deberemos asegurarnos que el master tiene las siguientes opciones en su my.cnf:

gtid_mode=ON
log_bin=binlog
log_slave_updates=1
enforce_gtid_consistency
expire_logs_days=7
server_id=1         
binlog_format=ROW

Creamos el usuario para la replicación con un GRANT:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slavepassword';
Query OK, 0 rows affected (0.01 sec)

A continuación mediante un snapshot LVM, mysqldump, …

[Lea más]