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
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:
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;
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.