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