Replicacion de Mysql en FreeBSD Master To Slave

Replicacion de Mysql en FreeBSD

Master To Slave

El punto es.. mantener tus B.D sincronizanadas y no tener perdida de datos , y tener nuestros backups al día.

Manos a la Obra

Requerimientos mínimos

Tener Acceso root tanto en el sistema como en las base de datos.

Servidor 1 FreeBSD 6.3 (será Nuestro servidor Master)

Mysql Server mysql-server-5.0.51a (Corriendo N cantidad de Base de datos)

Servidor 2 FreeBSD 7.0

Mysql Server mysql-server-5.0.67_1 (Sin Bases de datos)

La teoría es replicar las bases de datos del Servidor 1 al Servidor 2 Y ya en el servidor 2 sacarle un backup a todas nuestras base de datos, para no sobre cargar nuestro servidor 1 que se encuentra en producción.

Aquí pueden replicar 1 base de datos o todas las base de datos mi caso es el segundo.

Les recomiendo se lean http://dev.mysql.com/doc/refman/5.0/es/replication.html antes de comenzar todo.

y si por algun motivo algo no les funciona revisen de nuevo sus configuraciones en ambos servidores por que si no pasaran horas tratando de dar con el problema y resultara que se les fue algún carácter raro en los archivos de configuración de mysql “Experiencia Personal” , al mejor cazador se le va la liebre no?.

Manos a la obra.

En nuestro Servidor 1 Que es nuestro servidor Master de Mysql daremos de alta

un usuario que nos servira para replicar las bases de datos con esta sentencia

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘replicador’@’host_esclavo’ IDENTIFIED BY ‘mi_contraseña’;

Donde replicador=Es el usuario que nos permitira hacer la replica de nuestras bases de datos

hosts_esclavo=la ip o el host de nuestro servidor esclavo

mi_contraseña= Sera igual a la contraseria del usuario que replicara las bases de datos.

En nuestro Servidor 2 Ingresamos la misma sentencia

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘replicador’@’host_master’ IDENTIFIED BY ‘mi_contraseña’;

El Unico cambio aqui sera el host_master que sera igual a la Ip o el nombre del host.

Siguiente paso configuración de los servidores de Base de Datos tanto en el Servidor 1 (Master) Como en el Servidor 2 (Slave)

Editaremos En el Servidor1 (Master) El archivo my.cnf , si usamos Linux/Unix/Windows usaremos nuestro editor de texto preferido.

nano /var/db/mysql/my.cnf

Agregaremos estas opciones

[mysqld]

server-id = 1

log-bin = /var/log/mysql/bin.log

Donde server-id es un numero con el que se identificare al servidor maestro.

La segunda linea log-bin es la ruta de la bitacora binaria, Asegurarnos que ese directorio exista y que el usuario mysql sea el propietario y tenga

permisos de escritura sobre el mismo directorio.

#mkdir /var/log/mysql; chown mysql.mysql /var/log/mysql

Para Nuestro Servidor Esclavo o Slave, añadiremos unas lineas extras al archivo de configuración de my.cnf

Buscamos la sección

[mysqld]

server-id= 2

master-host = host_maestro,com # o la IP del servidor maestro

master-port = 3306

master-user = replicador

master-password = mi_contraseña

log-bin = /var/log/mysql/bin.log

log-bin-index = /var/log/mysql/log-bin.index

log-error = /var/log/mysql/error.log

relay-log = /var/log/mysql/relay.log

relay-log-info-file = /var/log/mysql/relay-log.info

relay-log-index = /var/log/mysql/relay-log.index

Y ahora que ? Ya tenemos las configuraciones tanto en el servidor 1 (master) como en el Servidor2(Slave)

El siguiente paso sera copiar todas las BD del Servidor 1 Hacia el Servidor2

Pero si el servidor Master esta en produccion si sacamos un respaldo de nuestro servidor master

y lo llevamos al servidor slave, podrian existir inconsistencias en nuestras base de datos

Para eso tendremos que prevenir todo eso.

En nuestro servidor master hacemos esto

mysql> SHOW VARIABLES LIKE ‘max_connections’;

+—————–+——-+

| Variable_name | Value |

+—————–+——-+

| max_connections | 100 |

+—————–+——-+

mysql> SET GLOBAL max_connections = 0;

Lo que hicimos es indicarle a mysql que ya no podran realizarse conexiones a la BD y solo se reserva

1 sola conexion que es para root .

Y procedemos a sacar el dump de todas las bases de datos.

# mysqldump –user=root –password=mi_root_pwd –extended-insert –all-databases –master-data > /tmp/backup.sql

Necesita explicacion? .

Procederemos a llevarnos nuestro backup de nuestras BD hacia el servidor esclavo ya sea usando

scp or ftp como sea de nuestro agrado tranferirlas.

Ok Cuando Establecimos las conexiones a 0 y al sacar el dump de eso

Nos agrega unos datos que probablemente necesitaremos mas adelante.

####

— Position to start replication from

CHANGE MASTER TO MASTER_LOG_FILE=’bin.00046′ ;

CHANGE MASTER TO MASTER_LOG_POS=8827 ;

###

O podemos obtener estos datos en el servidor master

En el servidor maestro visualizamos el estado del servidor:

mysql> SHOW MASTER STATUSG

File: bin.00046

Position: 8827

Binlog_Do_DB:

Binlog_Ignore_DB:

1 row in set (0.00 sec)

Bueno nos quedamos en la parte de mover el backup hacia nuestro servidor esclavo y restauraremos

todas las bases de datos con la siguiente sentencia.

Siguiente paso

#mysql –user=root –password=mi_root_pwd < /tmp/backup.sql

Si no nos da ningun error eso quiere decir que todas nuestras bases de datos fueron restauradas en nuestro

servidor slave.

Iniciamos con esta sentencia nuestro servidor SLAVE no olviden regresar a 100 la opcion de max_connection.

#mysql>CHANGE MASTER TO MASTER_HOST=’ip-maestro’,MASTER_USER=’slave’, MASTER_PASSWORD=’slaveabdul’,MASTER_LOG_FILE=’bin.00046′, MASTER_LOG_POS=8827;

#mysql> START SLAVE;

Aqui si todo esta bien se empezaran a sincronizar los ultimos cambios del servidor master

al servidor slave.

Facil no?

Ahora si necesitamos sacar un respaldo en nuestro servidor Slave

Solo basta con parar la replicacion

mysql> STOP SLAVE;

Y sacar el dump de cualquier base de datos y luego volver a arrancarlo

mysql> START SLAVE;

O podemos sacar respaldos Automatizados, mediante este script en bash.

#!/bin/sh

fecha=`date +%Y%m%d`

mysqladmin –user=root –password=mi_root_pwd stop-slave

mysqldump –user=root –password=mi_root_pwd –lock-all-tables –all-databases > /roa/mysql/respaldo-$fecha.sql

mysqladmin –user=root –password=mi_root_pwd start-slave

Se le pueden agregar mas opciones pero ya es cuestion de uno. Si son algo paranoicos podremos hacerlo sobre ssh-tunels para Mysql aqui en un tutorial que anteriormente escribi espero que le sirva

Dudas a [email protected],[email protected]

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.