GNU/Linux >> Tutoriales Linux >  >> Debian

Replicar una base de datos maestra usando MariaDB 10 en Debian 8

La replicación de bases de datos crea redundancia que puede proteger contra la pérdida de datos y permitir un rendimiento optimizado para las aplicaciones. Este tutorial cubrirá los aspectos básicos de la replicación de una base de datos maestra de MariaDB 10.0 existente en uno o más esclavos. En los siguientes ejemplos, el sistema operativo host es Debian 8.

Estas instrucciones pueden aplicarse a otros sistemas operativos, pero tenga en cuenta que varios comandos y ubicaciones de archivos predeterminadas serán diferentes. Específicamente, debe sustituir los nombres de ruta de /etc/mysql/my.cnf , /var/lib/mysql , el nombre y la ruta predeterminados de su archivo de registro binario y los comandos para iniciar, detener y reiniciar mysqld de acuerdo con las especificaciones de su sistema.

1. Verificar conectividad

Antes de continuar, asegúrese de que el maestro y el esclavo puedan comunicarse entre sí en la red y que cada uno tenga una entrada para el otro en sus respectivos /etc/hosts. archivos Cada host debe poder hacer ping el otro, y debería poder ssh entre sí como un usuario normal.

2. Habilitar registro binario de mysqld en maestro

En el host maestro, verifique que el registro binario esté habilitado. Invocando mysqld con los interruptores --verbose --help mostrará los valores operativos para el demonio MariaDB. Como root:

mysqld --verbose --help | grep log-bin
...
log-bin         (No default value)
...

El valor de la entrada log-bin define la convención de nomenclatura de los archivos de registro binarios. En Debian, estos archivos residen en /var/lib . Si el valor de log-bin es (Sin valor predeterminado) , deberá habilitar el registro modificando el archivo de configuración my.cnf . En Debian, my.cnf reside en el directorio /etc/mysql .

Abra /etc/mysql/my.cnf en un editor de texto y busque el [mysqld] grupo. Si no existe, créelo e ingrese una línea que simplemente diga log-bin .

[mysqld]
log-bin

Incluir esta entrada habilitará el registro binario cuando se reinicie mysqld.

Puede elegir establecer un valor para log-bin , p.ej. log-bin=nombre de archivo , para definir un nombre personalizado para el archivo de registro binario. En este tutorial, no estableceremos un valor y se utilizarán los nombres de archivo de registro predeterminados.

Reiniciar mysqld:

service mysql restart

Verifica que el cambio haya tenido efecto:

mysqld --verbose --help | grep log-bin
...
log-bin         mysqld-bin
...

Como se muestra aquí, el nombre de archivo de registro binario predeterminado en Debian comienza con mysqld-bin , p.ej. mysqld-bin.nnnnnn .

3. Otorgar derechos a un usuario de replicación

Se recomienda que un usuario de replicación dedicado realice todas las tareas de replicación. En estos ejemplos, nombraremos al usuario repluser y establezca la contraseña de este usuario en la cadena replpass .

Otorgue a este usuario los privilegios globales SUPER , RECARGAR y ESCLAVO DE REPLICACIÓN . Estos permitirán que el usuario de la replicación ejecute comandos de superusuario, vacíe los cachés de la base de datos y obtenga actualizaciones del servidor maestro.

Ingrese el cliente MariaDB como raíz de la base de datos:

mysql -u root -p

En el indicador de MariaDB, ingrese el comando:

GRANT SUPER, RELOAD, REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY 'replpass';

Aquí, el comodín del nombre de host '% ' permite que el usuario de replicación se conecte desde cualquier host.

Verifique que se hayan otorgado los derechos:

SHOW GRANTS FOR 'repluser'\G;

4. Vacíe los cachés de la base de datos y establezca las tablas en solo lectura

En preparación para hacer una instantánea de las bases de datos, vacíe todas las tablas y configúrelas en READ LOCK . Esto debe hacerse rápidamente, fuera de las horas pico o durante un período de mantenimiento del sistema.

En el maestro:

FLUSH TABLES WITH READ LOCK;

Ahora que las tablas están bloqueadas, verifique el estado del maestro:

MOSTRAR ESTADO DEL MAESTRO;

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 |      995 |              |                  |
+-------------------+----------+--------------+------------------+

Su información será diferente, pero anote los valores de Archivo y Posición . Utilizará esta información en el paso 7.

Salga del cliente MariaDB:

\q

5. Bases de datos de instantáneas para el host esclavo

Cree un archivo de la base de datos o bases de datos que existen en el maestro que desea replicar. Cada una de estas bases de datos tiene su propio directorio en /var/lib/mysql . En este ejemplo, tar crear una única base de datos, que resida en la ruta /var/lib/mysql/dbname .

Este comando archiva una única base de datos. Si está archivando bases de datos adicionales, agregue sus nombres de ruta completos al comando, p. /var/lib/mysql/nombrebd1 /var/lib/mysql/nombrebd2 ...

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

Ahora, como usuario normal nombre de usuario , transfiera este archivo a una cuenta de usuario normal en el host esclavo:

rsync -avP mysql-master.tar.bz2 [username]@slavehost:~/.

o, usando scp:

scp mysql-master.tar.bz2 [username]@slavehost:~/.

Luego, SSH al host esclavo:

ssh [username]@slavehost

Como root, detenga mysqld en el esclavo:

service mysql stop

...y extraiga el archivo:

tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

6. Configurar ID de servidor para maestro y esclavo

Modificar /etc/mysql/my.cnf en el maestro, agregando la entrada server-id=n en el [mysqld] grupo, donde n es un entero único que identifica al servidor. Comúnmente, n =1 para el servidor maestro, pero n puede ser cualquier entero único en el rango [1 , 2^32-1 ]. Estableceremos nuestro maestro en server-id=1 , y nuestro esclavo de server-id=100 .

(Si mi.cnf no existe en el esclavo, créalo. Si existe, busque un id de servidor existente entrada y elimine el comentario/edite esa línea).

En /etc/mysql/my.cnf en el host maestro:

[mysqld]
server-id=1

En /etc/mysql/my.cnf en el host esclavo:

[mysqld]
server-id=100

7. Desbloquee tablas e inicie/reinicie mysqld en maestro y esclavo

En el servidor maestro, en el cliente MariaDB como raíz de la base de datos, desbloquee las tablas:

mysql -u root -p
UNLOCK TABLES;
\q

Reinicie mysqld en el maestro:

service mysql restart

E iniciarlo en el esclavo:

service mysql start

Puede verificar que el nuevo id de servidor valor ha entrado en vigor en cada host. Como root:

mysqld --verbose --help | grep server-id

8. Configurar la identidad del maestro en el esclavo

En el esclavo, configure la identidad del servidor maestro. Introduzca el cliente de MariaDB:

mysql -u root -p

Ejecute el siguiente comando, reemplazando los valores de MASTER_LOG_FILE y MASTER_LOG_POS con el registro binario Archivo y Posición que registró en el paso 4 y los valores de MASTER_HOST , MASTER_USER y MASTER_PASSWORD con tus propios valores.

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=995;

9. Activar esclavo

En el esclavo, en el cliente MariaDB como raíz de la base de datos:

START SLAVE;

Ahora puede comprobar el estado del esclavo:

SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: masterhost
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000009
          Read_Master_Log_Pos: 1330
               Relay_Log_File: mysqld-relay-bin.000008
                Relay_Log_Pos: 1618
        Relay_Master_Log_File: mysqld-bin.000009
             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: 1330
              Relay_Log_Space: 2204
              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_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:

Si hay algún error en los procesos de replicación, los verá enumerados aquí.

10. Realice cambios en el maestro y verifique la replicación en el esclavo

Puede verificar que se está replicando creando una nueva base de datos en el maestro y viendo los cambios en el esclavo.

mysql -u root -p

Crear una nueva base de datos:

CREATE DATABASE repltest;
USE repltest

Cree una tabla e inserte un valor:

CREATE TABLE test (hello VARCHAR(10));
INSERT INTO test VALUES ('world');
\q

Ahora ingrese el cliente MariaDB en el esclavo:

mysql -u root -p
USE repltest
SELECT * FROM test;
+-------+
| hello |
+-------+
| world |
+-------+
1 row in set (0.00 sec)

11. Repita el proceso para esclavos adicionales

Puede repetir este proceso para cada esclavo adicional. Específicamente, realice estos pasos:

11 (un ). En el maestro, en el cliente MariaDB como raíz de la base de datos, vaciar y bloquear tablas:

FLUSH TABLES WITH READ LOCK;

Después de bloquear, mostrar el estado del maestro:

SHOW MASTER STATUS;

Anote el Archivo y Posición valores.

11 (b ). En el maestro, como root:

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

11 (c ). En el maestro, como usuario normal:

rsync -avP mysql-master.tar.bz2 [username]@slavehost2:~/.

11 (d ). En el esclavo, como root:

service mysql stop
tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

11 (e ). En /etc/mysql/my.cnf en el host esclavo, agregue o edite el server-id= línea en el [mysqld] grupo, donde el valor de server-id es nuevo y único:

[mysqld]
server-id=200

11 (f ). En el maestro, en el cliente MariaDB como raíz de la base de datos, desbloquee las tablas:

UNLOCK TABLES;

11 (g ). En el maestro, como root, reinicie mysqld:

service mysql restart

11 (h ). En el esclavo, como root, inicie mysqld:

service mysql start

11 (yo ). En el esclavo, en el cliente MariaDB como raíz de la base de datos, configure la identidad maestra y el nombre del archivo de registro binario y la posición del paso 10(a):

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.nnnnnn’, MASTER_LOG_POS=n;

11 (j ). En el esclavo, en el cliente MariaDB como raíz de la base de datos, active la replicación:

START SLAVE;

12. Solución de problemas:el esclavo no puede conectarse al maestro

Compruebe /var/mysql/my.cnf en el maestro para una dirección de enlace entrada. Si dirección de enlace está establecido en 127.0.0.1 , el servidor solo aceptará conexiones de localhost. Comente esta línea o establezca el valor en * para permitir conexiones desde todas las direcciones IPv4 e IPv6. Si modifica my.cnf , no olvide reiniciar mysqld.

Si las conexiones aún no funcionan, asegúrese de que su servidor permita conexiones en el puerto 3306 . En el maestro, enumere las tablas de firewall del kernel:

iptables -L

Puede crear una asignación para conexiones en el puerto 3306 con el siguiente comando, sustituyendo el nombre de su dispositivo de interfaz de red por eth0 según sea necesario:

iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT


Debian
  1. Cómo instalar MariaDB en Debian 9

  2. Cómo instalar MariaDB en Debian 10

  3. Cómo configurar la replicación síncrona multimaestro de MariaDB Galera con Debian 10

  4. Cómo instalar MariaDB 10.x en Debian 11

  5. Debian – ¿Usar dos pantallas en Debian?

Cómo instalar OwnCloud 9 en Debian 8

Cómo instalar WordPress en Debian 8

Cómo instalar MariaDB en Debian 8

Cómo instalar Nextcloud en Debian 8

Cómo instalar OwnCloud en Debian 9

Cómo instalar Joomla en Debian 10