GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo configurar la replicación de MariaDB en CentOS Linux

Es un proceso de creación de versiones duplicadas de la base de datos. El proceso de replicación no solo copia una base de datos, sino que también sincroniza los cambios del maestro a uno de los esclavos. Pero esto no significa que las bases de datos esclavas sean una copia idéntica de la maestra, porque la replicación se puede configurar para que solo se replique un esquema de tablas, columnas o filas, es decir, una replicación parcial. La replicación garantiza que esos objetos configurados específicos se mantengan sincronizados entre las diferentes bases de datos.

Conceptos de replicación de Mariadb

Copias de seguridad :la replicación se puede utilizar para copias de seguridad de bases de datos. Por ejemplo, tiene replicación maestra -> esclava. Si se pierde el maestro (el disco duro falla, por ejemplo), puede restaurar su base de datos desde el maestro.

Escalado :Puede usar la replicación maestra -> esclava para escalar la solución. Por ejemplo, si tiene algunas consultas SQL grandes y tiene una consulta SQL, al usar la replicación puede separar estas consultas para cada nodo de replicación. La escritura SQL debe realizarse solo en el maestro, para consultas de solo lectura se puede usar el servidor esclavo.

Solución para untar :puede utilizar la replicación para la distribución. Por ejemplo, puede distribuir diferentes datos de ventas a diferentes bases de datos.

Solución de conmutación por error :Por ejemplo, tiene, replicación maestro -> esclavo (1) -> esclavo (2) -> esclavo (3). Puede escribir un script para el monitoreo maestro, si el maestro falla, el script puede cambiar rápidamente el esclavo (1) nuevo para el maestro maestro -> esclavo (1) -> esclavo (2) y su aplicación continuará funcionando sin tiempo de inactividad

Demostración esquemática simple de replicación

Antes de comenzar, sepa qué es el registro binario e Ibdata1. El registro binario contiene un registro sobre todos los cambios en la base de datos, los datos y la estructura, así como el tiempo que tardó en ejecutarse cada declaración. Bin log consiste en establecer archivos de registro y un índice. Esto significa que las declaraciones SQL principales como CREAR, ALTERAR, INSERTAR, ACTUALIZAR y ELIMINAR se colocarán en este registro, las declaraciones como SELECCIONAR no se registrarán. Esta información se puede registrar en el archivo general query.log. En simple Ibdata1 es un archivo que contiene todas las tablas y toda la información sobre db.

Configuración del servidor maestro

Es bueno tener el servidor actualizado

sudo yum install update -y && sudo yum install upgrade -y

Estamos trabajando en el servidor centos 7

sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

Instalar MariaDB

sudo yum install mariadb-server -y

Inicie MariaDB y habilítelo para que se inicie al arrancar el servidor

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Salida:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

Comprobar el estado de MariaDB

sudo service mariadb status

o usar

sudo systemctl is-active mariadb.service

Salida:

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

Establecer contraseña de MariaDB

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

SOME_ROOT_PASSWORD - su contraseña raíz. En mi caso, usaré "q" - contraseña, luego intentaré iniciar sesión:

sudo mysql -u root -pSOME_ROOT_PASSWORD

Salida:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Escriba 'ayuda;' o '\h' para obtener ayuda. Escriba '\c' para borrar la declaración de entrada actual.

Vamos a crear una base de datos con una tabla con algunos datos

Crear base de datos/esquema

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

donde:

test_repl - Name of shcema which will be replicated

Salida:

Query OK, 1 row affected (0.00 sec)

Crear tabla de Personas

mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

Salida:

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

Inserta algunos datos

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

Salida:

Query OK, 5 row affected (0.00 sec)

Consultar datos

mysql> select * from Persons;

Salida:

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

Configurar MariaDB para la replicación

Deberá editar el archivo my.cnf en el servidor maestro para habilitar el registro binario y establecer la identificación del servidor. Usaré el editor de texto vi, pero el uso puede usar cualquier adecuado para usted, como nano, joe, etc.

sudo vi /etc/my.cnf 

y poner a config en la sección [mysqld] tales líneas.


log-basename=master
log-bin
binlog-format=row
server_id=1

Salida:

Luego reinicie MariaDB:

sudo service mariadb restart

Inicie sesión en MariaDB y verifique los registros binarios:

sudo mysql -u root -pq test_repl

mysql> MOSTRAR ESTADO DEL MAESTRO;

Salida:

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     3913 |              |                  |
+--------------------+----------+--------------+------------------+

Recuerde: Valores de "Archivo" y "Posición". NECESITARÁ ESTE VALOR EN EL SERVIDOR ESCLAVO

Crear usuario para replicación

mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;

Salida:

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Comprobar usuario en db

mysql> select * from mysql.user WHERE user="replication_user"\G;

Salida:

mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....

Crear volcado de base de datos (instantánea de todos los datos que se replicarán) formulario maestro

mysqldump -uroot -pSOME_ROOT_PASSWORD  test_repl > full-dump.sql

donde:

SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;

Debe recuperar el volcado de mysql (full-dump.sql) en el servidor esclavo. Es necesario para la replicación.

Configuración del servidor esclavo

Todos estos comandos que necesita realizar en el servidor esclavo

Supongamos que tenemos un servidor CentOS 7.x nuevo/actualizado con el último servidor mariaDB y puede iniciar sesión como root en el servidor maria DB (esto se describió en la primera parte del artículo)

Inicie sesión en la consola Maria DB y cree DB

mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;

Recuperar datos del maestro en el servidor esclavo

mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

donde:

full-dump.sql - its DB Dump that you have create at test server.

Inicie sesión en Maria DB y configure la replicación

mysql>     CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;

donde:

MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master

Iniciar modo esclavo

mysql> slave start;

Salida:

Query OK, 0 rows affected (0.00 sec)

Comprobar el estado del esclavo

mysql> show slave status\G;

Salida:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
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: 4175
Relay_Log_Space: 1089
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
1 row in set (0.00 sec)

En este paso, todo debería estar bien y no deberían aparecer errores.

Probar la replicación

En el servidor PRINCIPAL/MAESTRO agregue algunas entidades a la base de datos

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

Luego vaya al servidor ESCLAVO y verifique los datos replicados

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
...................
|        6 | LastName6 | FirstName6 | Address6 | City6 |
|        7 | LastName7 | FirstName7 | Address7 | City7 |
|        8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+

Puede ver que los datos se replican en el servidor esclavo. Significa que la replicación está funcionando. Espero que hayas disfrutado del artículo. Háganos saber si tiene alguna pregunta.


Cent OS
  1. Cómo configurar LVM en Linux / CentOS / Redhat

  2. Cómo configurar el repositorio YUM en Linux/Centos/Redhat | YUM en Linux/Centos/Redhat

  3. Cómo instalar y configurar docker en Rocky Linux/Centos 8

  4. Cómo instalar y configurar Redis 6 en Rocky Linux/Centos 8

  5. Cómo configurar OpenSSH en CentOS 7

Cómo instalar y configurar Nextcloud en CentOS 7 / RHEL 7

Cómo instalar y configurar Denyhost en Centos 7 Linux

Cómo instalar y configurar Cacti en CentOS 7

Cómo configurar la replicación FreeIPA en Rocky Linux/Alma Linux/Centos 8

Cómo instalar LAMP (Linux Apache, MariaDB, PHP) en CentOS 7

Cómo configurar la replicación de transmisión de PostgreSQL 12 en CentOS 8