Búsqueda de sitios web

Configurar la replicación maestro-esclavo de MariaDB en CentOS 7


¿Por qué la replicación de MariaDB?

Como sabrás, MariaDB es un sustituto directo de MySQL. Es un servidor SQL robusto, escalable y confiable que viene con un amplio conjunto de mejoras.

La replicación de MariaDB es un método para almacenar múltiples copias de datos en muchos sistemas, y los datos se copiarán automáticamente de una base de datos (maestra) a otra base de datos (esclava). Si un servidor deja de funcionar, los clientes aún pueden acceder a los datos de otra base de datos del servidor (esclavo).

En este artículo, veamos cómo configurar la replicación maestro-esclavo de MariaDB en CentOS 7. Este método funcionará en todas las distribuciones de Linux, incluidas RHEL, CentOS, Ubuntu y openSUSE, etc. Todo lo que necesita saber es cómo instalar MariaDB en la distribución específica que utiliza.

Guión

Usaré los siguientes dos sistemas para este tutorial. Pero puedes usar cualquier distribución de Linux para configurar la replicación de MariaDB. Sólo la instalación de MariaDB será diferente para los diferentes sistemas operativos Linux. Consulte el siguiente enlace para obtener más información sobre la instalación de MariaDB en varias distribuciones de Linux.

  • Instalación de la pila LAMP en Linux

Aquí están los detalles de mis sistemas de prueba:

  • MariaDB Master: Servidor mínimo CentOS 7 de 64 bits
  • Dirección IP maestra: 192.168.1.150/24
  • Esclavo MariaDB: Servidor mínimo CentOS 7 de 64 bits
  • Dirección IP esclava: 192.168.1.151/24

Instale MariaDB en el servidor maestro y esclavo

Ejecute el siguiente comando en el servidor maestro y esclavo para instalar MariaDB.

yum install mariadb-server mariadb

Inicie el servicio MariaDB y permita que se inicie automáticamente en cada reinicio:

systemctl start mariadb
systemctl enable mariadb

Establecer la contraseña raíz de MariaDB en el servidor maestro y esclavo

De forma predeterminada, la contraseña raíz de MariaDB/MySQL está vacía. Entonces, para evitar el acceso no autorizado, establezcamos la contraseña del usuario root.

Ingrese el siguiente comando para configurar la contraseña del usuario root de MySQL:

mysql_secure_installation

Salida de muestra:

/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y ## Enter Y and press Enter
New password:   ## Enter new password
Re-enter new password:  ## Enter password again
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y  ## Enter Y and press Enter
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y  ## Enter Y and press Enter
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y  ## Enter Y and press Enter
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y  ## Enter Y and press Enter
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Después de instalar MariaDB en ambos servidores, pasemos a la configuración de replicación.

Primero, configuraremos el servidor maestro.

Configurar MariaDB Maestro

El primer y más importante paso es permitir el puerto predeterminado de MySQL “3306” a través del Firewall o Router.

Como usamos CentOS 7, podemos permitir el puerto como se muestra a continuación.

firewall-cmd --permanent --add-port=3306/tcp

Vuelva a cargar las reglas del firewall usando el comando:

firewall-cmd --reload

Luego, edite el archivo /etc/my.cnf,

vi /etc/my.cnf

Y agregue las siguientes líneas en la sección [mysqld]:

[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=unixmen
[...]

Aquí unixmen es el nombre de la base de datos que se replicará en el sistema esclavo.

Una vez que haya terminado, reinicie el servicio MariaDB usando el comando:

systemctl restart mariadb

Ahora inicie sesión en MariaDB como usuario root:

mysql -u root -p

Cree un usuario y contraseña esclavo. Por ejemplo, usaremos sk como nombre de usuario del esclavo y centos como contraseña:

MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'sk'@'%' IDENTIFIED BY 'centos';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 |      460 | unixmen      |                  |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> exit
Bye

Anote el archivo (mariadb-bin.000001) y el número de posición (460); es posible que necesite estos valores más adelante.

Haga una copia de seguridad de la base de datos del servidor maestro y transfiérala al esclavo

Ingrese el siguiente comando para volcar todas las bases de datos maestras y guardarlas. Transferiremos estas bases de datos al servidor esclavo más adelante:

mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql

Esto creará un archivo llamado masterdatabase.sql en su directorio de trabajo actual. Esto llevará algún tiempo dependiendo del tamaño de la base de datos.

Vuelva a iniciar sesión en MySQL como usuario root:

mysql -u root -p

Y desbloquea las tablas:

MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

Copie el archivo masterdatabase.sql a su servidor esclavo.

Aquí, voy a copiar este archivo a la carpeta /home de mi servidor esclavo. Entonces el comando será:

scp masterdatabase.sql [email :/home

Recuerde, 192.168.1.151 es la dirección IP de mi servidor esclavo MariaDB.

Configurar el esclavo MariaDB

Hemos realizado la instalación del lado Maestro. Ahora tenemos que empezar del lado del esclavo. Instale los paquetes MySQL en el servidor esclavo como se indica en la sección de instalación de MariaDB. Además, no olvide permitir el puerto "3306" a través del firewall/enrutador.

Luego, edite el archivo /etc/my.cnf,

vi /etc/my.cnf

Y agregue las siguientes entradas en la sección [mysqld] como se muestra a continuación.

[mysqld]
server-id = 2
replicate-do-db=unixmen
[...]

Aquí, unixmen es el nombre de la base de datos del servidor maestro. Tenga en cuenta que debe utilizar un server-id diferente para los servidores maestro y esclavo.

Guardar y salir del archivo.

Luego, importe la base de datos maestra usando el comando:

mysql -u root -p < /home/masterdatabase.sql 

Recuerde, ya hemos copiado el archivo masterdatabase.sql del servidor maestro al directorio /home/ del servidor esclavo.

Reinicie el servicio MariaDB para que los cambios surtan efecto.

systemctl restart mariadb

Ahora, inicie sesión en MariaDB como usuario root usando el comando:

mysql -u root -p

Y dígale al servidor esclavo dónde buscar el archivo de registro maestro que hemos creado en el servidor maestro usando el comando MOSTRAR ESTADO MAESTRO; (Archivo –mariadb-bin.000001 y Posición – 460). Asegúrese de haber cambiado la dirección IP, el nombre de usuario y la contraseña del servidor maestro como propios:

MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.150', MASTER_USER='sk', MASTER_PASSWORD='centos', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=460;
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> SLAVE START;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.150
                  Master_User: sk
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000001
          Read_Master_Log_Pos: 460
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 531
        Relay_Master_Log_File: mariadb-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: unixmen
          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: 460
              Relay_Log_Space: 827
              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)

Pruebe la replicación de MariaDB

Lado maestro:

Vaya a su servidor maestro MariaDB e inicie sesión en el indicador de MySQL usando el comando:

mysql -u root -p

Luego, cree una base de datos llamada unixmen y agregue algunas tablas y entradas en ella. Tenga en cuenta que el nombre recién creado debe ser el mismo que el del archivo my.cnf tanto del servidor maestro como del esclavo.

MariaDB [(none)]> create database unixmen;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use unixmen;
Database changed

MariaDB [unixmen]> create table sample (c int);
Query OK, 0 rows affected (0.01 sec)

MariaDB [unixmen]> insert into sample (c) values (1);
Query OK, 1 row affected (0.01 sec)

MariaDB [unixmen]> select * from sample;
+------+
| c    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

MariaDB [unixmen]> 

Lado del esclavo:

Ahora, vaya al servidor esclavo y verifique que las entradas creadas anteriormente se hayan replicado en la base de datos del servidor esclavo.

Inicie sesión en el indicador de MariaDB como usuario root:

mysql -u root -p

Luego, ejecute los siguientes comandos para verificar si las entradas se han replicado correctamente.

MariaDB [(none)]> use unixmen;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [unixmen]> select * from sample;
+------+
| c    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

MariaDB [unixmen]>

Eso es todo. Ahora las tablas creadas en el servidor maestro se han replicado automáticamente en el servidor esclavo.

Quizás quieras consultar nuestro artículo anterior sobre la replicación maestro-esclavo de MySQL en CentOS 6.

  • Configurar la replicación maestro-esclavo en el servidor MySQL

¡Feliz fin de semana!