Вы находитесь на странице: 1из 9

REPLICACION EN MYSQL

La réplica de MySQL permite tener una copia exacta de una base de datos de un
servidor principal (maestro) en otro servidor (esclavo), y todas las actualizaciones a la
base de datos en el servidor principal se repliegan inmediatamente a la base de datos
en el servidor auxiliar de modo que ambas bases de datos estén sincronizadas. Esto
no es una política de respaldo porque si se corre un comando de borrado de forma
accidental también será realizado en el esclavo; sin embargo las réplicas pueden
ayudar a proteger contra faltas de hardware. A continuación explicaremos
detalladamente cómo se realizaron las replicas desde el servidor de recursos humanos
hacia el servidor radius.

CONFIGURACION DEL MAESTRO

Para nuestro caso el servidor maestro es el servidor de Recursos Humanos, donde se


encuentra la base de datos llamada rrhh.

REQUISITOS PREVIOS

HABILTACION DE PUERTOS EN LINUX

Por firewall
#Denegamos todas las entradas

[root@uioabo01 ~]# iptables -A INPUT -j DROP

#Permitimos que se conecten a nuestro ssh(22)

[root@uioabo01 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#Habilitamos la conexion con el mysql

[root@uioabo01 ~]# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j


ACCEPT

CREACION DEL USUARIO DE MYSQL CON TODOS LOS PRIVILEGIOS

Ingreso al editor mysql

[root@uioabo01 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Creacion del usuario net_admin

mysql> grant all on *.* to 'net_admin'@'%' identified by 'net_admin';

Query OK, 0 rows affected (0.00 sec)

mysql>

Este Usuario lo creamos para poder acceder remotamente a la base de datos de


Recursos humanos y del radius donde se realizará la replicació,n no es indispensable
que se realice este proceso.

Creación del directorio de almacenamiento de los binarios del maestro

Donde voy aguardar los log

[root@uioabo01 ~]# mkdir /var/log/mysql

[root@uioabo01 ~]# chown mysql:mysql /var/log/mysql

[root@uioabo01 ~]# mkdir /var/log/mysql/replication

[root@uioabo01 ~]# chown mysql:mysql /var/log/mysql/replication


Configuración del archivo de configuración de mysql

[root@uioabo01 ~]# vi /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1

# dates replication

log-bin=/var/log/mysql/replication/master-bin

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

server-id=1

binlog-do-db=rrhh

replicate-do-table=rrhh.trabajador

low-priority-updates

innodb_flush_log_at_trx_commit=1

sync-binlog=1

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

Reiniciamos el servidor MySQL

[root@uioabo01 ~]# service mysqld restart

Parando MySQL: [ OK ]

Iniciando MySQL: [ OK ]
Comprobación de los logs binarios

De los logs binarios depende la sincronización entre el servidor master y el esclavo, el


master-bin.0000001 es el archivo de sincronización el mismo que deberá estar
también configurado en el esclavo como lo explicaremos a continuación

Comprobamos que el servicio está arriba y escuchando en el Puerto 3306/TCP:

[root@uioabo01 ~]# netstat -an|grep -i listen|grep -i 3306

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

Creacion del usuario de la replica

mysql> grant replication slave on *.* to 'user_radius'@'%' identified by


'user_radius';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges; ///todos los privilegios para el usuario

Query OK, 0 rows affected (0.00 sec)

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 |

+-------------------+----------+--------------+------------------+

| master-bin.000001 | 98 | RRHH | |

+-------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

CONFIGURACION DEL ESCLAVO

HABILTACION DEL PUERTO (RADIUS)


CREACION DEL USUARIO DE MYSQL CON TODOS LOS PRIVILEGIOS

Ingreso al editor mysql

[root@uioabo01 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Creacion del usuario net_admin

mysql> grant all on *.* to 'net_admin'@'%' identified by 'net_admin';

Query OK, 0 rows affected (0.00 sec)

mysql>

Al igual que el anterior usuario net_admin creado en el MASTER, este es solo para
poder acceder remotamente a nuestras bases de datos a través de un software para
acceso remoto, como la anterior vez, esto no es necesario para el proceso de replicas,
el acceso remoto puede ayudar bastante cuando no se tiene un amplio conocimiento
de los comandos de mysql, existen herramientas de acceso remoto como SQLyong
Enterprise que es con interfaz grafica el cual nos ayuda bastante.

Creación del directorio de almacenamiento de los binarios del esclavo

[root@uioabo01 ~]# mkdir /var/log/mysql

[root@uioabo01 ~]# chown mysql:mysql /var/log/mysql

[root@uioabo01 ~]# mkdir /var/log/mysql/replication

[root@uioabo01 ~]# chown mysql:mysql /var/log/mysql/replication

Configuración del archivo de configuración de mysql

[root@localhost ~]# vi /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Default to using old password format for compatibility with mysql 3.x

# clients (those using the mysqlclient10 compatibility package).

old_passwords=1
#data replication

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

log-bin-index=/var/log/mysql/replication/slave-relay-bin.index

server-id=2

master-host=10.10.10.15 // ip del master

master-user=user_radius //Usuario creado para replicas en el MASTER

master-password=user_radius //contraseña del Usuario anterior

master-port=3306

replicate-do-db=rrhh //Base de datos a replicar

replicate-do-table=rrhh.trabajador //table a replicar

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

Reiniciamos el servidor MySQL

[root@uioabo01 ~]# service mysqld restart

Parando MySQL: [ OK ]

Iniciando MySQL: [ OK ]
Comprobacion de los logs binarios

Comprobamos que el servicio está arriba y escuchando en el Puerto 3306/TCP:

[root@uioabo01 ~]# netstat -an|grep -i listen|grep -i 3306

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

Configuramos la replica y arrancamos la misma

mysql> slave stop;

Query OK, 0 rows affected (0.00 sec)

mysql>change master to master_log_file='master-bin.000001',


master_log_pos=98;

Query OK, 0 rows affected (0.11 sec)

El comando anterior es muy importante, ya que este nos sirve para la sincronización
entre el master y el esclavo, en master_log_file=’’ debemos poner el numero que esta
en el master al mimento de realizar la comprobación de los logs binarios, en este caso
'master-bin.000001', y en master_log_pos= el tamaño de los bytes, en este caso 98.
Esto se lo realiza en el servidor esclavo.

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

Cuando reiniciamos el servidor master es posible que el master_log_file cambie, si


esto sucede es probable que pierdan la sincronización, esto se soluciona haciendo
nuevamente los pasos anteriores de change master to con el numero de
master_log_file que tenga el servidor en caso de que haya cambiado.
En caso de tener el problema de que la tabla de nuestra base de datos es solo de
lectura debemos usar este comando en un terminal de cualquiera de los dos
servidores chown –R mysql:mysql /var/lib/mysql

NOTA: hay que tener en cuenta que la base de datos que queremos replicar del
servidor master debe estar también creada en el servidor esclavo, con el mismo
nombre y con por lo menos la tabla que queremos replicar. Las replicas se dan sobre
actualizaciones, es por eso que la tabla en el esclavo debe tener los mismo elementos
que la tabla en el master.

Вам также может понравиться