LinuxParty

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Configuración de replicación de bases de datos MySQL en Ubuntu

La replicación en MySQL permite tener una copia exacta de una base de datos maestra (master) en otro servidor esclavo (slave), y que todos los cambios realizados en la master se reflejen automáticamente en el esclavo. No es una política de respaldo, ya que los borrados accidentales también se replican, pero sí ayuda a proteger datos ante fallos de hardware.

1. Prerrequisitos

  • Servidor server1 (master): Ubuntu, IP 192.168.0.100, base de datos exampledb ya creada.
  • Servidor server2 (slave): Ubuntu, IP 192.168.0.101, sin exampledb.
  • Acceso root en ambos sistemas (SSH + sudo).

2. Instalación de MySQL

En ambos servidores:

sudo apt-get update
sudo aptitude install mysql-server mysql-client

Durante la instalación, configura la contraseña para el usuario root@localhost .


3. Configuración del servidor master (server1)

a) Escucha en todas las interfaces

Edita /etc/mysql/my.cnf y comenta o elimina:

# bind-address = 127.0.0.1

Reinicia MySQL y verifica:

sudo /etc/init.d/mysql restart
netstat -tap | grep mysql

Aparecerá algo así: tcp 0 0 *:mysql ... LISTEN ... mysqld .

b) Crear usuario de replicación

Conéctate al shell de MySQL:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;

c) Habilitar binlogs y definir servidor master

En /etc/mysql/my.cnf, sección [mysqld], añade:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exampledb

Reinicia MySQL .

d) Crear snapshot consistente

En MySQL shell:

USE exampledb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Anota el campo File (ej. mysql-bin.000001) y Position (ej. 19467) .

Sin cerrar esta sesión, en otra terminal:

mysqldump -u root -pyourrootsqlpassword --opt exampledb > snapshot.sql
scp snapshot.sql Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:/tmp/

Luego, en la sesión SQL:

UNLOCK TABLES;
QUIT;

4. Configuración del servidor esclavo (server2)

a) Ajustes en my.cnf

En /etc/mysql/my.cnf, agrega bajo [mysqld]:

server-id = 2
master-connect-retry = 60
replicate-do-db = exampledb

Reinicia MySQL.

b) Preparar base de datos e importar snapshot

mysql -u root -p -e "CREATE DATABASE exampledb;"
mysql -u root -pyourrootsqlpassword exampledb < /tmp/snapshot.sql

c) Configurar replicación

En MySQL shell de server2:

CHANGE MASTER TO
  MASTER_HOST='192.168.0.100',
  MASTER_USER='slave_user',
  MASTER_PASSWORD='slave_password',
  MASTER_LOG_FILE='mysql-bin.000001',  -- según snapshot
  MASTER_LOG_POS=19467;               -- según snapshot

START SLAVE;
SHOW SLAVE STATUS\G

Revisa que Slave_IO_Running: Yes y Slave_SQL_Running: Yes, y que Seconds_Behind_Master: 0.


5. Verificación final

Haz pruebas de inserción en el master:

USE exampledb;
CREATE TABLE test (id INT PRIMARY KEY AUTO_INCREMENT, msg VARCHAR(50));
INSERT INTO test (msg) VALUES ('¡Hola slave!');

En server2, verifica:

USE exampledb;
SELECT * FROM test;

Deberías ver los mismos datos, confirmando que la replicación funciona correctamente.


6. Conclusión

Este esquema master-slave es ideal para:

  • Distribuir carga de lectura.
  • Asegurar alta disponibilidad.
  • Realizar backups sin afectar producción.

⚠️ Recuerda siempre mantener sincronizados server-id, binlog_do_db, y credenciales. Guarda los binlogs para poder reconstruir el slave en caso de fallos.


7. Próximos pasos

No estás registrado para postear comentarios



Redes:



   

 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías