Maestro-Esclavo con MySQL
En cierta ocasión surgió la necesidad de contar en forma centralizada y con un retraso menor a
una hora con la información que se estaba generando en cualquiera de las sucursales, por lo que
se implementa una solución que a continuación se detalla, considerando que en todas las
sucursales se cuenta con MySQL y servidores ya sea Linux o Windows.
Con anterioridad sehabía definido e implementado una vpn para tener acceso a los servidores de
cada sucursal de forma remota.
La idea es que cada una de las bases de datos contenidas en los respectivos servidores de cada
sucursal sea replicada de forma casi inmediata al servidor LINUX ubicado en las oficinas
corporativas.
Con esto en mente definiremos a cada uno de los servidores de cada instalación comomaestro; es
decir, la instancia de MySQL que se esté ejecutando ya sea en un servidor Windows o en un LINUX
será la que mande o le indique a una instancia esclava ubicada en el anteriormente mencionado
servidor LINUX que debe replicar la instrucción SQL realizada en la base de datos maestra.
Para cada sucursal, el puerto de MySQL siempre será el de omisión: 3306 y la identificación de los
servidoresdentro del archivo de configuración para MySQL, my.cnf será el indicado en la columna
master de la tabla que aparece a continuación:
server-id
pto. En
sucursal instalación corporativo master slave S.O.
ip de la vpn
A
baseA
3307
107
307 linux 192 168 253 10
B
baseB
3308
108
308
C
baseC
3309
109
309 linux 192 168 253 14
D
baseD
3310110
310
win 192 168 253 16
E
baseE
3311
111
311
win 192 168 253 18
win 192 168 253 12
Tabla 1.
En la instalación del corporativo, los parámetros para cada instancia del servicio MySQL están
definidos en el archivo de configuración mysql.cnf ubicado en el directorio /etc, de acuerdo a lo
especificado en la Tabla 1.
COMO DEFINIR LA PARTE MAESTRO DE LA RELACIONMAESTRO-ESCLAVO PARA MYSQL.
1. Editar my.cnf (o my.ini si el sistema operativo es Windows)
1.1. Comentar (si existen), las líneas:
skip-networking
bind-address = 127.0.0.1
1.2. Incluir las líneas:
Para Linux:
log-bin = /var/log/nombre-sucursal-bin.log (para Linux)
Para Windows:
log-bin = c:\Archivos de programa\Mysql\Mysql Server 5.0\nombre-sucursalbin.log
Para Linux y para Windows:binlog-do-db = nombre-base
server-id = número
Sustituir nombre-sucursal por el nombre de la sucursal de la que se trate, por ejemplo: A.
Sustituir nombre-base por el nombre de la base de datos que esté utilizando en la
sucursal, por ejemplo: baseA.
Sustituir número por el número que corresponda, indicado en la columna master de la
Tabla 1, siguiendo con nuestro ejemplo: 102.
1.3. Guardar loscambios y salir del editor.
1.4. Reiniciar MySQL
service mysqld restart
1.5. Crear usuario esclavo
mysql –u root [-ppassword]
Nota: si el usuario root tiene contraseña (como debería de ser), escribirla después del
modificador –p y sin dejar ningún espacio.
mysql>CREATE USER esclavo IDENTIFIED BY ‘password’;
mysql>GRANT REPLICATION SLAVE ON *.* TO esclavo@’%’ IDENTIFIED BY ‘password’;mysql>FLUSH PRIVILEGES;
mysql>use nombre-base;
mysql>FLUSH TABLES WITH READ LOCK;
Con esto aseguramos que ningún usuario pueda modificar las tablas de la base de datos,
se recomienda dar aviso de que se salgan para evitar contratiempos.
mysql>SHOW MASTER STATUS;
Debemos tomar nota de la información mostrada como resultado del comando, ya que se
utilizará mas tarde.
Ejemplo:+---------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+---------------+----------+--------------+------------------+
| mysql-bin.006 | 183 | exampledb | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql>quit;
1.6. Respaldar la Base de Datos
mysqldump –u root [–ppassword] --opt nombre-base [|bzip]...
Regístrate para leer el documento completo.