Cómo configurar la replicación de MySQL (maestro-esclavo) en RHEL, CentOS, Fedora


El siguiente tutorial tiene como objetivo proporcionarle una guía simple paso a paso para configurar la replicación de MySQL (maestro-esclavo) en RHEL 6.3/6.2/6.1/6/5.8, CentOS 6.3/6.2/6.1/6/5.8 y Fedora 17 , 16,15,14,13,12 usando la última versión de MySQL. Esta guía está especialmente escrita para el sistema operativo CentOS 6.3, pero también funciona con versiones anteriores de distribuciones de Linux con MySQL 5.x.

La replicación de MySQL es muy útil en términos de seguridad de datos, solución de conmutación por error, copia de seguridad de la base de datos del esclavo, análisis, etc. Usamos las siguientes cosas para llevar a cabo el proceso de replicación. En su escenario sería diferente.

  1. Working Linux OS like CentOS 6.3, RedHat 6.3 or Fedora 17
  2. Master and Slave are CentOS 6.3 Linux Servers.
  3. Master IP Address is: 192.168.1.1.
  4. Slave IP Address is: 192.168.1.2.
  5. Master and Slave are on the same LAN network.
  6. Master and Slave has MySQL version installed.
  7. Master allow remote MySQL connections on port 3306.

Tenemos dos servidores, uno es Master con IP (192.168.1.1) y otro es Slave como (192.168.1.2). Hemos dividido el proceso de instalación en dos fases para facilitarte las cosas, en la Fase I configuraremos el servidor Master y en la Fase II con el servidor Slave. Comencemos el proceso de configuración de la replicación.

Fase I: Configurar el servidor maestro (192.168.1.1) para la replicación

En la Fase I, veremos la instalación de MySQL, configurando la replicación y luego verificando la replicación.

Primero, proceda con la instalación de MySQL usando el comando YUM. Si ya tiene la instalación de MySQL, puede omitir este paso.

# yum install mysql-server mysql

Abra el archivo de configuración my.cnf con el editor VI.

# vi /etc/my.cnf

Agregue las siguientes entradas en la sección [mysqld] y no olvide reemplazar tecmint con el nombre de la base de datos que le gustaría replicar en Slave.

server-id = 1
binlog-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Reinicie el servicio MySQL.

# /etc/init.d/mysqld restart

Inicie sesión en MySQL como usuario root y cree el usuario esclavo y otorgue privilegios para la replicación. Reemplace slave_user con user y your_password con contraseña.

# mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 11128001 | tecmint		 |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> quit;

Anote los números de Archivo (mysql-bin.000003) y Posición (11128001), los requerimos más adelante en el servidor esclavo. A continuación, aplique READ LOCK a las bases de datos para exportar toda la base de datos y la información de la base de datos maestra con el comando mysqldump.

#  mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

Una vez que haya volcado todas las bases de datos, ahora vuelva a conectarse a mysql como usuario raíz y desbloquee las tablas.

mysql> UNLOCK TABLES;
mysql> quit;

Cargue el archivo de volcado de la base de datos en el servidor esclavo (192.168.1.2) usando el comando SCP.

scp /root/dbdump.db [email protected]:/root/

Eso es todo, hemos configurado correctamente el servidor maestro, pasemos a la sección Fase II.

Fase II: Configurar el servidor esclavo (192.168.1.2) para la replicación

En la Fase II, hacemos la instalación de MySQL, configuramos la replicación y luego verificamos la replicación.

Si no tiene MySQL instalado, instálelo usando el comando YUM.

# yum install mysql-server mysql

Abra el archivo de configuración my.cnf con el editor VI.

# vi /etc/my.cnf

Agregue las siguientes entradas en la sección [mysqld] y no olvide reemplazar la dirección IP del servidor maestro, tecmint con el nombre de la base de datos, etc., que le gustaría replicar con el maestro.

server-id = 2
master-host=192.168.1.1
master-connect-retry=60
master-user=slave_user
master-password=yourpassword
replicate-do-db=tecmint
relay-log = /var/lib/mysql/mysql-relay-bin
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
log-error = /var/lib/mysql/mysql.err
master-info-file = /var/lib/mysql/mysql-master.info
relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
log-bin = /var/lib/mysql/mysql-bin

Ahora importe el archivo de volcado que exportamos en el comando anterior y reinicie el servicio MySQL.

# mysql -u root -p < /root/dbdump.db
# /etc/init.d/mysqld restart

Inicie sesión en MySQL como usuario root y detenga el esclavo. Luego dígale al esclavo dónde buscar el archivo de registro maestro, que hemos anotado en el maestro con SHOW MASTER STATUS; comando como archivo (mysql-bin.000003) y posición (11128001) números. Debe cambiar 192.168.1.1 a la dirección IP del servidor maestro y cambiar el usuario y la contraseña en consecuencia.

# mysql -u root -p
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=11128001;
mysql> slave start;
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.1
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 12345100
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 11381900
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: tecmint
          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: 12345100
              Relay_Log_Space: 11382055
              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:
1 row in set (0.00 sec)

Verificación de la replicación de MySQL en el servidor maestro y esclavo

Es realmente muy importante saber que la replicación funciona perfectamente. En el servidor maestro, cree una tabla e inserte algunos valores en ella.

mysql> create database tecmint;
mysql> use tecmint;
mysql> CREATE TABLE employee (c int);
mysql> INSERT INTO employee (c) VALUES (1);
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

Verificando el SLAVE, ejecutando el mismo comando, devolverá los mismos valores en el esclavo también.

mysql> use tecmint;
mysql> SELECT * FROM employee;
+------+
|  c  |
+------+
|  1  |
+------+
1 row in set (0.00 sec)

Eso es todo, finalmente ha configurado la replicación de MySQL en unos simples pasos. Puede encontrar más información en MySQL Replication Guide.