sábado, 3 de agosto de 2013

MYSQL: REPLICACION DE BASES I

Ejemplo Básico de Replicación de Bases en Mysql

Esta receta es para replicar solo una base de datos del server master hacia el slave, en este caso es la base de datos llamada bacula.

Nota: La idea es tener una receta rápida para realizar una replicación básica entre servidores mysql.

Configuración MySQL Replicacion entre Servers Mysql

MysqlServer Master Server = 10.160.1.10
MysqlServer Slave Server = 10.160.1.20

Configure the master Bacula Server
Esto esta sobre un server Debian o Ubuntu

/etc/mysql/my.cnf

#bind-address            = 127.0.0.1
server-id               = 1
log-bin                 = /var/log/mysql/mysql-bin.log
expire-logs-days        = 20
max_binlog_size         = 104857600
binlog-do-db            =  bacula
binlog-ignore-db        = mysql,test

Restarteamos MySQL:

/etc/init.d/mysql restart

Luego creamos un usuario con permisos solamente para replicar de la siguiente manera:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'bacula_slave'@'10.160.1.20' IDENTIFIED BY 'R3plik4';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> USE bacula;
Database changed

mysql>  FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW MASTER STATUS;
+------------------+----------+---------------------------+------------------+
| File             | Position | Binlog_Do_DB              | Binlog_Ignore_DB |
+------------------+----------+---------------------------+------------------+
| mysql-bin.000007 |      197 | bacula                    |mysql,text        |
+------------------+----------+---------------------------+------------------+
1 row in set (0.00 sec)

Configuration on Slave Bacula Server

mysql> create database bacula;
Query OK, 1 row affected (0.00 sec)

Sobre el servidor Master hacemos un dump de la base de datos (bacula) y luego hacemos el deployment  sobre el server Slave:

Sobre servidro Master -> mysqldump bacula > bacula.sql
Sobre el servidor Slave -> mysql bacula < bacula.sql

Ahora debemos declarerle a Mysql cual es el servidor Slave, y cual el servidor Master esto lo configuramos desde my.cnf (/etc/mysql/my.cnf) del server Slave:

server-id=2
master-host=10.160.1.10
master-user=bacula_slave
master-password=R3plik4
master-connect-retry=60
replicate-do-db=bacula

Reiniciamos el servicio de Mysql

/etc/init.d/mysql restart  o service mysql restart

En el servidor Slave debemos configurar el Master: Los valores detallados se obtienen del servidor Master con la sentencia

SHOW MASTER STATUS

Obtenemos por lo tantos el valor de

MASTER_LOG_FILE ='Nombre del archivo de transaccion de Mysql'
MASTER_LOG_POS= Es la posicion donde se encuentra escribiendo en el momento de la consulta

Para que el servidor Slave comience a rebir data del Master debemos ejecutar los siguientes pasos:

Supongamos que el SHOW MASTER STATUS arrojo los siguientes valores:

MASTER_LOG_FILE = mysql-bin.000007
MASTER_LOG_POS =197

Por lo tanto:

1.-  mysql> SLAVE STOP;

2.- mysql> CHANGE MASTER TO MASTER_HOST='10.160.1.10', MASTER_USER='bacula_slave', MASTER_PASSWORD='R3plik4',  MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=197;

Query OK, 0 rows affected (0.00 sec)

3.- mysql> START SLAVE;

mysql> show slave status\G;
*************************** 1. row ***************************
            Slave_IO_State: Waiting for master to send event
              Master_Host: 10.160.1.10
              Master_User: bacula-slave
              Master_Port: 3306
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
              Read_Master_Log_Pos: 197
              Relay_Log_File: bacula-relay-bin.000002
              Relay_Log_Pos: 235
              Relay_Master_Log_File: mysql-bin.000007
              Slave_IO_Running: Yes
              Slave_SQL_Running: Yes
              Replicate_Do_DB: bacula
              Replicate_Ignore_DB:
              Replicate_Do_Table:
              Replicate_Ignore_Table:
              Replicate_Wild_Do_Table:
              Replicate_Wild_Ignore_Table:
              Last_Errno: 0
              Last_Error:
              Skip_Counter: 0
              Exec_Master_Log_Pos: 18069371
              Relay_Log_Space: 235
              Until_Condition: None
              Until_Log_File:
              Until_Log_Pos: 0
              Master_SSL_Allowed: No
              Master_SSL_CA_File:
              Master_SSL_CA_Path:
              Master_SSL_Cert:
              Master_SSL_Cipher:
              Master_SSL_Key:
              Seconds_Behind_Master: 0

1 row in set (0.00 sec)

Este log nos informa que la replicaciones esta funcionando para ellos debemos ver que:

              Slave_IO_Running: Yes
              Slave_SQL_Running: Yes

Probando desde el server Máster la replicación

Renombrar una columna usando CHANGE

ALTER TABLE t1 CHANGE a b INTEGER;

ALTER TABLE Job CHANGE ReadBytes ReadBytes2 bigint(20);


----------------------------------------------------------------------------------------------------------------------------------

No hay comentarios:

Publicar un comentario