Buenos días, inicio este hilo como un intento desesperado por aprender a hacer replicación como corresponde.
Tengo dos equipos, en un cliente de la empresa donde trabajo, en la misma LAN, ambos con IP fija supuestamente. Uno es llamado Original, y el otro es Suplente.
A modo de práctica, hay instalado un equipo en mi lugar de trabajo y tengo mi notebook. Ambos serán la simulación de "suplente" y "original" respectivamente.
Tengo entendido que MySQL no ofrece por defecto replicación master-master, y que por tanto debe realizarse la configuración master-slave en las dos vías.
He seguido esto:
http://codigoxules.o...lave-con-mysql/
No tan al pie de la letra, como por ejemplo no cambiar el bin-address porque al cambiarlo con la IP (que son dinámicas, tanto en el equipo de prueba como el mio) no me dejaba hacer conexiones localhost.
Y como la configuración es a dos vías, puse relay-log en ambos equipos.
Para probar, al menos, creería que no debiera de haber problemas que las IP sean dinámicas. Lo importante es que en la LAN del cliente si esté fija.
Deshabilité los puertos entrada y salida 3306 en el firewall también (en ambos equipos) pensando en que tal vez sea necesario, hago ping perfectamente, y lo máximo que he conseguido es que la replicación funcione desde el equipo hacia mi PC, y no desde mi PC hacia el equipo. NOTA: los pasos se siguieron asumiendo que el "equipo1" sea el mio. Es decir, que todos los pasos se siguieron tomando como punto de partida desde mi PC.
Antes había leído otros manuales:
https://www.digitalo...ter-replication
https://docs.bluehos...r-en-mysql.html
Y hasta había visto unos videos. Como este:
Cada manual tiene sus diferencias, y la verdad es que ando mareado, en cual confiar, para configurar adecudamente. Acudo a ustedes que son los maestros y que me brinden alguna referencia más segura para seguir.
Adjunto lo que me dice el show slave status \G tanto de mi equipo alias "Original", como el "suplente" de práctica. Por si sirve de ayuda para comprender el lio que me estoy dando.
Original:
mysql> show slave status \G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.100.39 Master_User: replicador Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos: 1241 Relay_Log_File: mysql-relay-bin.000006 Relay_Log_Pos: 1454 Relay_Master_Log_File: mysql-bin.000003 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: 1241 Relay_Log_Space: 1874 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: 2 Master_UUID: 3e8f5870-c0d1-11e8-9448-40e230af11f6 Master_Info_File: c:\wamp64\bin\mysql\mysql5.7.21\data\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 mysql>
Suplente:
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.100.146 Master_User: replicador Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 1406 Relay_Log_File: mysql-relay-bin.000006 Relay_Log_Pos: 978 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1050 Last_Error: Error 'Table 'tabla1' already exists' on query. D efault database: 'testrep'. Query: 'CREATE TABLE `testrep`.`tabla1` ( `id` INT(2 ) NOT NULL , `nombre` VARCHAR(5) NOT NULL ) ENGINE = MyISAM' Skip_Counter: 0 Exec_Master_Log_Pos: 765 Relay_Log_Space: 5057 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: 0 Last_IO_Error: Last_SQL_Errno: 1050 Last_SQL_Error: Error 'Table 'tabla1' already exists' on query. D efault database: 'testrep'. Query: 'CREATE TABLE `testrep`.`tabla1` ( `id` INT(2 ) NOT NULL , `nombre` VARCHAR(5) NOT NULL ) ENGINE = MyISAM' Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 8293291a-92c2-11e8-bda8-5404a61727ee SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 181228 11:13:37 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 mysql>
Pueden ver que slave_sql_running me dice NO. ¿Que tengo que hacer?
Y esto es lo que, actualmente, me dice el master en Original:
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 1406 | testrep | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql>
Y en suplente figura en cambio un 000003 y posición 1241.
¿Cómo he probado la replicación? Pues, yo cree en mi equipo la DB y luego la importé (dispongo de mysqlmyadmin en ambos equipos) en el suplente.
Luego hice unos inserts en tabla1 y estos no se reflejan en suplente. Pero he aquí, que si hago un insert desde el suplente si se reflejan los cambios en mi equipo.
Soy consciente de que en un ambiente real hay que tener configurado un buen sistema de auto increment y de offset. Pero al menos para practicar estamos bien así. Ya me urge aprenderlo bien, porque necesitamos realizar "para ayer" esto en el cliente. Llevo ya una semana con esto, y hoy recién logré parcialmente funcionar... la semana pasada a pesar de hacer ping, ni siquiera había podido hacer ninguna replicación (aunque fue siguiendo el video y esos dos manuales que puse antes)
Les agradecería un buen norte.
Saludos,