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]
Hoy es el día en que MyISAM ha dejado de ser necesario

Por supuesto, esto sólo es un título para llamar la atención. Por lo que yo sé no todas las tablas de sistema se pueden convertir a InnoDB todavía (por ejemplo, las tablas de privilegios), lo cual convierte la cabecera en técnicamente falsa. MyISAM es un motor muy simple, y eso tiene algunas ventajas inherentes (no hay carga extra debido a las transacciones, más fácil de “editar” manualmente, normalmente ocupa menos espacio en disco), pero también algunas desventajas bastante importantes: no es seguro en el caso de un cuelgue general, no hay claves foráneas, sólo bloqueos a nivel de tabla, problemas de consistencia, bugs en tablas muy grandes,… La versión 5.7.5 “Milestone 15”, presentada hoy en el Oracle Open World tiene …

[Lea más]
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]
Comment on Installing MySQL 5.7.2: error 1053 by Compilation of entrances on MySQL - Manejando datos

[…] also wrote about the problems when having error 1053 that I suffer a lot trying to find a solution, and … at the end, the solution was […]

Comment on MySQL 5.6 Config file. Step 5 by Compilation of entrances on MySQL - Manejando datos

[…] Personalizando el fichero de inicio […]

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]
Cambios en variables globales de configuración entre MySQL 5.6.20 y MySQL 5.7.4 “Milestone 14”

Mientras realizaba unos tests (que os enseñé posteriormente aquí) en el -todavía en desarrollo- MySQL 5.7 quise hacer un análisis de la configuración para ver si los cambios en el rendimiento eran debidos a los cambios en el código o simplemente a los parámetros por defecto de MySQL (algo que es muy común en una migración de 5.5 a 5.6 debido al tamaño por defecto del log de transacciones y otros parámetros por defecto). Éste es un post rápido con el objetivo de identificar las variables globales que se han modificado entre estas dos versiones.

Me podrían decir que con leer …

[Lea más]