Configurar la replicación de MariaDB en Ubuntu/Debian
En esta guía, le mostraré cómo configurar la replicación maestro-esclavo de MariaDB en el servidor Ubuntu y Debian. MariaDB es una bifurcación desarrollada por la comunidad del sistema de gestión de bases de datos relacionales MySQL, que cuenta con una gran comunidad detrás de su desarrollo, seguridad y mejoras.
El proceso de replicación de MariaDB le permite mantener múltiples
Tenemos otros tutoriales que cubren la instalación y configuración del servidor MariaDB de un solo nodo tanto en Ubuntu como en Debian.
Paso 1: Instale MariaDB en Ubuntu/Debian
Tengo dos nodos que se utilizarán para configurar MariaDB
Node 1: 192.168.18.40
Node 2: 192.168.18.41
Instalar MariaDB en Ubuntu/Debian
Utilice los siguientes comandos para instalar el servidor MariaDB en el servidor Ubuntu/Debian. Agregue el repositorio usando los siguientes comandos.
curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s --
Luego instale los paquetes requeridos:
sudo apt update
sudo apt install mariadb-server mariadb-client
Establecer contraseña de root cuando se le solicite
$ sudo mariadb-secure-installation
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
Se requiere una prueba para confirmar la contraseña para acceder a la consola de la base de datos.
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.11.3-MariaDB-1:10.11.3+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Paso 2: configurar el servidor maestro MariaDB
Una vez que MariaDB esté instalado en ambos servidores, inicie sesión en el Nodo 1 (nodo maestro) a través de ssh y cambie la dirección de escucha a la dirección IP real del servidor. Edite el archivo /etc/mysql/my.cnf
y agregue la siguiente línea en la sección mysqld
.
#bind-address = 127.0.0.1
bind-address = 192.168.18.40
Establezca la ID del servidor, que será un identificador único del servidor maestro.
server-id = 100
Crear un usuario de replicación de base de datos
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 50
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> grant replication slave on *.* to mysql_replica@'%' identified by 'StrongPassword';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> exit
Bye
Reinicie el servidor MariaDB para que los cambios surtan efecto.
sudo systemctl restart mysql
Verifique el estado usando el comando ss
o netstat
.
# ss -tunelp | grep 3306
tcp LISTEN 0 70 192.168.18.40:3306 0.0.0.0:* users:(("mysqld",pid=16877,fd=22)) uid:111 ino:48116 sk:4 <->
Si tiene un firewall en ejecución, abra el puerto 3306
sudo ufw allow 3306
Paso 3: Configurar el servidor esclavo MariaDB
Inicie sesión en el servidor/servidores esclavos y configure MariaDB:
sudo vim /etc/mysql/my.cnf
Establezca los valores siguientes en la sección [mysqld]
.
[mysqld]
bind-address = 192.168.18.41
server-id = 101
log_bin = /var/log/mysql/mariadb-bin
read_only = 1
report-host = mariadb-slave1
expire-logs-days = 7
read_only=1: Esto configura el esclavo en solo lectura
server-id=101: este es un número de identificación de servidor único. El valor predeterminado será 1 si "master-host " no está configurado.
log_bin=/var/log/mysql/mariadb-bin: Esto habilita
Reinicie mariadb
después del cambio.
sudo systemctl restart mysql
Paso 4: Inicializar el proceso de replicación
Deberíamos estar listos para iniciar el proceso de replicación en el servidor esclavo. Comience verificando el Estado en el maestro:
MariaDB [(none)]> show master status\G
*************************** 1. row ***************************
File: mariadb-bin.000003
Position: 344
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.000 sec)
Tome nota del archivo de registro maestro actual y de su posición. Luego configura
Inicie sesión en el servidor MariaDB Slave como usuario root y configure la conexión al servidor Master
$ mysql -u root -p
CHANGE MASTER TO MASTER_HOST='192.168.18.40',
MASTER_USER='mysql_replica',
MASTER_PASSWORD='StrongPassword',
MASTER_LOG_FILE='mariadb-bin.000003',
MASTER_LOG_POS=344;
Luego comience la replicación en el esclavo:
mysql> start slave;
Query OK, 0 rows affected (0.002 sec)
Para verificar el estado del esclavo, use:
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.18.40
Master_User: mysql_replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000003
Read_Master_Log_Pos: 344
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 557
Relay_Master_Log_File: mariadb-bin.000003
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: 344
Relay_Log_Space: 867
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: 100
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_DDL_Groups: 0
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.001 sec)
Slave IO y SQL deben indicar el estado de ejecución:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
La verificación de la lista de procesos en el maestro también debería mostrar las conexiones de los servidores esclavos.
MariaDB [(none)]> select ID,user,host,db,command,time,state from information_schema.processlist order by time desc limit 5;
+----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+
| ID | user | host | db | command | time | state |
+----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+
| 38 | mysql_replica | 192.168.18.41:51522 | NULL | Binlog Dump | 988 | Master has sent all binlog to slave; waiting for binlog to be up |
| 2 | system user | | NULL | Daemon | 0 | InnoDB purge worker |
| 5 | system user | | NULL | Daemon | 0 | InnoDB shutdown handler |
| 1 | system user | | NULL | Daemon | 0 | InnoDB purge coordinator |
| 4 | system user | | NULL | Daemon | 0 | InnoDB purge worker |
+----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+
5 rows in set (0.000 sec)
Si es usuario de MySQL, marque Configurar la replicación maestro-esclavo de MySQL 8.0 en Ubuntu.
Libros de base de datos para leer:
- Los mejores libros para aprender bases de datos MySQL/MariaDB