Ya hemos hablado de cómo crear un entorno con varios slaves mediante XtraBackup, pero también existe la posibildad (mucho más drástica) de copiar los datos de un slave a otro, mediante rsync. Normalmente, siempre usaremos la opción de XtraBackup, pues con XtraBackup se puede hacer un backup en caliente (sin necesidad de parar MySQL) y por tanto no se necesita ninguna interrupción en el servicio.
Sin embargo, también existe la opción de usar rsync, que en mi caso, he testeado bajo en siguiente entorno:
- Slave1 (origen): CentOS 6.3 con Percona 5.5 Release rel29.3, Revision 388
- Slave2 (destino): CentOS 6.3 con Percona 5.5 Release rel29.4, Revision 401
NOTA: Sí, he hecho el test con dos versiones ligeramente diferentes de Percona, ya que estoy en un entorno de test.
En mi caso, he seguido el siguiente proceso para realizar la copia:
1. Como primer paso, he entrado en ambos servidores, y he parado la replicación mysql:
mysql> slave stop;
2. Tras parar la replicación, me he asegurado de que estuviera parada, y a continuación, he parado los servicios mysql de ambos servidores:
mysql> show slave status\G;
Slave_IO_Running: No
Slave_SQL_Running: No
/etc/init.d/mysqld stop
3. A continuación, he realizado un backup de los datos del servidor destino (Slave2) símplemente renombrando la carpeta referente al dbpath:
slave2# mv /var/lib/mysql /var/lib/mysql.bkp
4. Finalmente, desde el servidor origen, he iniciado el rsync:
slave1# rsync -avprP -e ssh /var/lib/mysql/ [email protected]:/var/lib/
NOTA: Hemos de asegurarnos de que el servidor destino tenga iptables abierto para permitir la conexión ssh desde el servidor origen, así como que el usuario con el que conectamos con slave2 tenga permisos suficientes para la carpeta destino.
5. Tras finalizar la copia, he modificado el propietario del nuevo directorio, y he pasado a iniciar todos los servicios de nuevo, en ambos servidores.
slave2# chown mysql:mysql /var/lib/mysql -R
slave2# chmod 660 /var/lib/mysql/database/*
slave2# /etc/init.d/mysqld start
slave2 | mysql> start slave;
slave1# /etc/init.d/mysqld start
slave1 | mysql> start slave;
6. Para comprobar el nuevo slave, además de ejecutar un «show slave status\G» para verificar que la replicación esté corriendo, he ejecutado en el master una sentencia para verificar el número de slaves que están replicando:
master | mysql> SHOW SLAVE HOSTS;
+———–+——+——+———–+
| Server_id | Host | Port | Master_id |
+———–+——+——+———–+
| 2 | | 3306 | 1 |
| 3 | | 3306 | 1 |
+———–+——+——+———–+
Fuente: http://dba.stackexchange.com/questions/3354/what-is-the-difference-between-xtrabackup-and-rsync
Foto por simon69stretch