sql >> Base de Datos >  >> RDS >> Mysql

MySQL maestro a maestro replicación

La replicación se utiliza para mantener dos o más bases de datos sincronizadas mediante la replicación de DML/declaraciones o cambios de conjuntos de datos ejecutados desde un servidor maestro a uno o varios servidores esclavos.

Existen tres métodos para registrar los datos para la replicación:La replicación basada en sentencias (SBR) replica las sentencias SQL que modifican los datos. La replicación basada en filas (RBR) replica solo las filas modificadas. La replicación basada en mixtos (MBR) es una replicación basada en declaraciones y una replicación basada en filas. Anteriormente, para todas las versiones de mysqld, la replicación basada en sentencias era el método predeterminado de desconexión. La mayoría de los motores de almacenamiento admiten los tres enfoques para registrar datos.

La replicación MySQL Master-Master amplía el sistema y mejora el rendimiento al reducir la sobrecarga de la copia de seguridad y proporciona redundancia para la aplicación activa. Si no está obteniendo lo que es, es como dos servidores MySQL que se mantienen actualizados entre sí. Con la replicación, dos servidores MySQL separados actúan como un clúster. La agrupación de bases de datos es principalmente adecuada para configuraciones de aplicaciones de alta disponibilidad

La replicación maestro/maestro se logra configurando el servidor A para que sea un esclavo del servidor B y configurando el servidor B para que sea un esclavo del servidor A.

Suposición: Este artículo no proporciona los pasos para la instalación del servidor MySQL, asumo que el servidor Mysql (instancia única) se ha instalado en ambos servidores:

Para configurar un maestro MySQL a maestro de replicación en Servidores Linux necesitamos dos servidores, la información es como la siguiente:

servidor A :192.168.1.2

servidor B: 192.168.1.3

SO: RHL 6.4 x86_64

Servidor MySQL: 5.6.17 x86_64

Comprobaciones previas:

Deshabilitar el cortafuegos en ambos servidores:

service iptables stop
chkconfig iptables off
service iptables status

Ambos servidores deben ser accesibles entre sí. Para verificar la accesibilidad, haga ping a cada servidor.

Comente el atributo bind-address o configúrelo en (bind-address=0.0.0.0) en el archivo my.sandbox.cnf o my.cnf en ambos servidores. He mencionado my.sandbox.cnf, esto en caso de que estés usando MySQL::Sandbox

Primero, habilitaremos la replicación del servidor B al A

PASO 1:
EN el servidor A:192.168.1.2

edite my.sandbox.cnf o my.cnf y agregue los siguientes valores server-id debe ser> 0; en caso de que no conozca la ubicación del archivo my.cnf, use este comando en el shell del sistema operativo “mysql –help | grep my.cnf”, normalmente my.cnf está en el directorio /etc/

server-id=1
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=1
relay-log=serverA-relay-bin
relay-log-index=serverA-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverA-relay-log.info
log-bin=mysql-bin

EN servidor B:192.168.1.3

edite my.sandbox.cnf o my.cnf y agregue los siguientes valores server-id debe ser> 0;

server-id=2
replicate-same-server-id=0
auto-increment-increment=2
auto-increment-offset=2
relay-log=serverB-relay-bin
relay-log-index=serverB-relay-bin.index
master-info-file=mysqk-master.info
relay-log-info-file=serverB-relay-log.info
log-bin=mysql-bin

PASO 2:
EN el servidor A:192.168.1.2
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.3'  identified by 'warsaw';
flush privileges;
En el servidor B:192.168.1.3
create user 'syncstndby' identified by 'warsaw';
grant replication slave on *.* to 'syncstndby'@'192.168.1.2'  identified by 'warsaw';
flush privileges;
PASO 3:
EN EL SERVIDOR B:192.168.1.3
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)


mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      423 | |             | |
+------------------+----------+--------------+------------------+-------------------+

EN EL SERVIDOR A:192.168.1.2
CHANGE MASTER TO 
MASTER_HOST='192.168.1.3',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000002',  
MASTER_LOG_POS=423; 

Ahora pensará de dónde estoy eligiendo los valores para estos atributos, no se preocupe, lo estoy explicando, elija el valor MASTER_PORT de la consulta anterior (MOSTRAR VARIABLES GLOBALES COMO 'PUERTO') en este caso, nuestro puerto es 5617 , Elija el valor MASTER_LOG_FILE de la columna Archivo en la consulta anterior ("mostrar estado maestro;") que es Mysql-bin.000002), Elija el valor MASTER_LOG_POS de la posición de la columna en la consulta anterior que es 423)

PASO 4:

Ahora puedes iniciar el esclavo

mysql>start salve:
mysql> show slave status \G;

AHORA se ha habilitado la replicación de B a A

PASO 5 

En este paso probaremos la replicación del servidor B al A:

EN MAESTRO (servidor B):192.168.1.3
show schemas;
create database reptest;
create table reptest.simples (id int not null primary key) ;
insert into reptest.simples values (999),(1),(2),(3);
EN ESCLAVO:192.168.1.2 (servidor A)
show schemas;
use reptest;
select * from reptest.simples;

Ahora habilitaremos la replicación del servidor A al B

PASO 6:
EN EL SERVIDOR A:192.168.1.2
mysql > SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 5617 |
+---------------+-------+
1 row in set (0.00 sec)

mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 | |             | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

EN EL SERVIDOR B:192.168.1.3
CHANGE MASTER TO 
MASTER_HOST='192.168.1.2',
MASTER_USER='syncstndby',
MASTER_PASSWORD='warsaw',
MASTER_PORT= 5617, 
MASTER_LOG_FILE='mysql-bin.000004', 
MASTER_LOG_POS=120; 

Elija el valor MASTER_PORT  de la consulta anterior (MOSTRAR VARIABLES GLOBALES COMO 'PUERTO') en este caso, nuestro puerto es 5617, elija el valor MASTER_LOG_FILE de la columna Archivo en la consulta anterior ("mostrar estado maestro;") que es  Mysql-bin .000004), elija el valor MASTER_LOG_POS de la posición de la columna en la consulta anterior que es 120)

Ahora puedes iniciar el esclavo

mysql> show slave status \G;
mysql>start salve:
mysql> show slave status \G;

PASO 7

Bien, nuestro entorno está configurado. Ahora vamos a probar si nuestro entorno funciona o no.

ENCENDIDO 192.168.1.2 (servidor A)
insert into reptest.simples values (777),(41),(15),(61);

Aquí no hemos creado la tabla simple en la prueba de repetición de nombre de base de datos, ya que ya se replicó en el servidor A cuando se creó la prueba de repetición de base de datos y la tabla en el servidor B.

ENCENDIDO 192.168.1.3  (Servidor B)
use reptest;
select * from reptest.simples;

¡¡Viva!! puede ver que todo está configurado y nuestra replicación de maestro a maestro está configurada.

ADVERTENCIA: No es inteligente que su aplicación ejecute DML en ambos servidores al mismo tiempo. Escribir en ambos servidores al mismo tiempo genera una conmutación por error rápida y razonablemente duradera para una alta disponibilidad, pero no mejora el rendimiento. Ambos servidores tienen que realizar todo el DML, ya sea que el DML provenga directamente de los clientes o venga a través de la replicación