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.