Así es como configuré la replicación Master-Slave con MariaDB. Dado que MariaDB es una bifurcación de MySQL, debe seguir los mismos pasos.
Mi configuración
Supongo que ya tiene dos servidores Maria/MySQL en ejecución. Esas son las características de la mía:
- OS:Prueba de Debian 'Ratón de biblioteca'
- Versión de MariaDB:10.5.12
Estoy trabajando con dos máquinas virtuales, para crear la esclava he duplicado la máquina virtual maestra.
- Maestro:192.168.122.13
- Esclavo:192.168.122.223
Si no tienes una base de datos maria o mysql, aquí en unixcop tenemos un par de tutoriales, también aquí, aquí o aquí.
Maestro
Como he dicho antes, asumo que ya tienes un maria o mysql ejecutándose. Necesitamos hacer alguna configuración en el maestro, luego en el host esclavo.
Edite /etc/mysql/mariadb.conf.d/50-server.cnf
(o el archivo apropiado en su configuración) y cambie las siguientes líneas:
bind-address = <your.master.host.ip> server-id=1
Reinicie MariaDB y cree un usuario con privilegios de replicación:
MariaDB [(none)]> CREATE USER 'esclavo'@'192.168.122.223' IDENTIFIED BY 'SlavePass' ; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'esclavo'@'192.168.122.223'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Elige el nombre de usuario y la contraseña que quieras, esclavo significa esclavo en español Configure la dirección IP de su esclavo MariaDB. A continuación, podría ver el estado con SHOW MASTER STATUS.
El (casi, volveremos más adelante) último paso en el maestro es copiar todos los datos en el servidor maestro al esclavo. Vamos a crear un volcado con:
root@my1:~# mysqldump -u root --all-databases -p --master-data > data.sql
Esclavo
En el servidor esclavo, primero cambie el archivo de configuración /etc/mysql/mariadb.conf.d/50-server.cnf
en las mismas líneas que el maestro:
bind-address = <your.slave.host.ip> server-id=1
Reinicie MariaDB y cargue el volcado desde el maestro con:
root@my2:/home/gonz# mysql -uroot < data.sql
Luego detenga el esclavo, configure el host maestro e inicie el esclavo con los siguientes comandos:
root@my2:/home/gonz# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.12-MariaDB-1-log Debian 11 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)]> stop slave; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.122.13', MASTER_USER='esclavo',MASTER_PASSWORD='SlavePass'; MariaDB [(none)]> START SLAVE;
No olvide cambiar la IP del host, el usuario y la contraseña a sus valores si solo está copiando y pegando esos comandos;).
Pruebas y arreglos
Deberias hacer eso. Si todo funciona como se esperaba, debería tener replicación maestro-esclavo con MariaDB.
Ahora puede crear una base de datos en el maestro y esa base de datos debería aparecer automáticamente en el esclavo. Pero no funcionó para mí. Creé una base de datos en el maestro con:
MariaDB [(none)]> CREATE DATABASE somedatabase;
Y no fue replicado en el esclavo. Para ver por qué, he ejecutado en el servidor esclavo:
MariaDB [(none)]> show slave status\G ;
Cuando busqué en Google ese error, me sugirieron eliminar al usuario esclavo y vaciar los privilegios. Esto en el servidor esclavo, también detenga el esclavo antes de eliminar al usuario e inicie el esclavo después de vaciar los privilegios:
MariaDB [(none)]> stop slave; MariaDB [(none)]> drop user 'esclavo'@'192.168.122.223'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> start slave;
Y esto me solucionó, como puede ver en la captura de pantalla, ahora hay una base de datos en el servidor esclavo. Y está vacío. Luego volví al maestro para crear una tabla y completar con datos:
El último paso es verificar en el esclavo si se creó la tabla y hay datos dentro:
Solo para estar seguro, puede verificar el estado del esclavo una vez más (o en cualquier otro momento en el futuro si algo parece estar mal).
Y finalmente configuré la replicación maestro-esclavo con MariaDB.