Blog Informáticos Murcia

Desde Murcia hacia el resto del mundo.

Blog Informáticos Murcia

Desde Murcia hacia el resto del mundo.

Escenario:
– Tenemos 2 servidores. Ambos tienen instalado MySQL 5.7

-NOTA: Tanto en el servidor master como en el servidor slave sería conveniente que realizases una copia de seguridad de fichero
/etc/mysql/mysql.conf.d/mysqld.cnf
En mi caso realizo la copia de seguridad para probar el Master – Slave pero después de realizar la prueba quiero dejar los servidores independientes y si tengo el backup será muchos mas fácil eliminar las configuraciones especificas de cada uno para ser master y slave.

1-Paso: Nos vamos al servidor Master y configuramos el fichero my.cnf
Descomentando la lineas indicadas y configurandolo segun nuestro parámetros.


sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Descomentando la siguientes lineas

bind-address = 127.0.0.1 #Sustituir ip por la del servidor slave
server-id = 1 #Id que asignamos al master
log_bin      = /var/log/mysql/mysql-bin.log
binlog_do_db = ctidb
binlog_do_db = ctidb2

Nota:
binlog_do_db –> Aqui se puede seleccionar la base de datos que quieres que se sincronice con el slave. En mi caso quiero sincronizar dos base de datos «ctidb» y «ctidb2», si quisieramos mas pues añadiriamos tantas lineas como deseemos.
Si deseamos copiar cualquier tabla, podemos comentar «bindlog_do_db» y se copiarian todas las tablas.

Paso2:
Reiniciamos el servidor MySQL para aplicar los cambios.

sudo service mysql restart

Paso3:
Nos conectamos a la base de datos y le damos privilegios al usuario que utilizamos para que el esclavo se conecte al master.

mysql -u root -p

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

Paso 4:
Bloqueamos la base de datos para que nadie pueda realizar ningun cambio.

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

Escrimibmos el comando para ver el estado en el que se ha quedado el master. Nos tendremos que apuntar el numero de «position» Que es la posicion en la que empezará el master a replicar.

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

En otro terminal deberás realizar la copia de seguridad de todas tus bases de datos con mysqldump.
Una vez que tengas realizada la copia de seguridad puedes desbloquear la tabla con el siguiente comando.

UNLOCK TABLES;

Paso5:
Configuramos la base de datos MySQL del slave.
Para ello crearemos la base de datos y restauraremos la copia de seguridad de las bases de datos del master.
ejemplo:

CREATE DATABASE newdatabase;
EXIT;
mysql -u root -p newdatabase < /path/to/newdatabase.sql
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Configuramos el fichero de mysql configurando:
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
#binlog_do_db = newdatabase

Reiniciamos el servidor slave para aplicar los cambios.

sudo service mysql restart

El siguiente paso es habilitar la replicación desde el shell de MySQL.

Abra el shell MySQL una vez más y escriba los siguientes detalles, reemplazando los valores para que coincidan con su información:
CHANGE MASTER TO MASTER_HOST='192.168.5.81',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  154;

Activamos el slave

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

Comprobamos el estado de la replicacion.

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.5.81
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 154
              Relay_Log_Space: 154
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1593
                Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 200120 09:44:58
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

En mi caso tengo un error. Tengo el mismo UUID tanto en el máster como en esclavo.(debido a que he utilizado un clon del master para hacer el esclavo) En otro post pongo como solucionarlo.

Una vez solucionado aparecera algo como esto.

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.5.81
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay-bin.000003
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          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: 154
              Relay_Log_Space: 527
              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
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: e8e96aff-38ff-11ea-ac47-e2f299251813
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.