LINUX

Cómo configurar la replicación 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 de manera que solo se replicará un esquema de tablas o columnas o filas, es decir, una replicación parcial. La replicación asegura 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 maestro -> replicación esclavo. Si se pierde el maestro (el disco duro falla, por ejemplo), puede restaurar su base de datos desde el maestro.

Escalada : Puede usar la replicación maestro -> esclavo para escalar la solución. Por ejemplo, si tiene algunas consultas grandes y SQL, al usar la replicación, puede separar estas consultas para cada uno de los nodos 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 de esparcimiento : 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, maestro -> esclavo (1) -> esclavo (2) -> esclavo (3) replicación. Puede escribir un script para la supervisión del maestro, si el maestro falla, el script puede cambiar rápidamente de esclavo (1) nuevo por maestro maestro -> esclavo (1) -> esclavo (2) y su aplicación continuará funcionando sin tiempo de inactividad

Demostración esquemática simple de replicación

principio de replicación de mysql

Antes de comenzar bien, sepa qué es el registro binario y Ibdata1. los 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 instrucción. Bin log consta de archivos de registro establecidos y un índice. Esto significa que las sentencias SQL principales como CREATE, ALTER, INSERT, UPDATE y DELETE se colocarán en este registro, las sentencias como SELECT no se registrarán. Esta información se puede registrar en el archivo query.log general. 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 en el arranque del servidor

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

Producción:

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

Verificar el estado de MariaDB

sudo service mariadb status

o usar

sudo systemctl is-active mariadb.service

Producción:

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

Establecer la 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 de root. En mi caso, usaré «q» – contraseña, luego intentaré iniciar sesión:

sudo mysql -u root -pSOME_ROOT_PASSWORD

Producción:

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;

Dónde:

test_repl - Name of shcema which will be replicated

Producción:

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)
);

Producción:

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");

Producción:

Query OK, 5 row affected (0.00 sec)

Verificar datos

mysql> select * from Persons;

Producción:

+----------+-----------+------------+----------+-------+
| 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 puedo usar cualquiera que sea adecuado para usted, como nano, joe, etc.

sudo vi /etc/my.cnf 

y poner a config en [mysqld] seccione tales líneas.


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

Producción:

maestro de configuración mariadb

Luego reinicia 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 MAESTRO;

Producción:

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

Recuerda : Valores de «Archivo» y «Posición». USTED NECESITARÁ ESTE VALOR EN SLAVE SERVER

Crear usuario para replicación

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

Producción:

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

Comprobar usuario en la base de datos

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

Producción:

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

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

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

Dónde:

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

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

Configuración del servidor esclavo

Todos estos comandos que debe realizar en el servidor esclavo

Supongamos que tenemos un servidor CentOS 7.x nuevo / actualizado con el último servidor mariaDB y que 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

Dónde:

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;

replicación de la configuración de mariadb

Dónde:

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 el modo esclavo

mysql> slave start;

Producción:

Query OK, 0 rows affected (0.00 sec)

Verificar el estado del esclavo

mysql> show slave statusG;

Producción:

*************************** 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ía haber errores aquí.

Prueba la replicación

En el servidor MAIN / MASTER agregue algunas entidades a DB

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 SLAVE 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 usted tiene alguna pregunta.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar