Ecco come ho configurato la replica Master-Slave con MariaDB. Poiché MariaDB è un fork di MySQL, dovresti seguire gli stessi passaggi.
La mia configurazione
Presumo che tu abbia già due server Maria/MySQL in esecuzione. Queste sono le mie caratteristiche:
- OS:Debian testando "Bookworm"
- Versione MariaDB:10.5.12
Sto lavorando con due macchine virtuali, per creare lo slave ho duplicato la vm master.
- Maestro:192.168.122.13
- Schiavo:192.168.122.223
Se non hai un database maria o mysql, qui su unixcop abbiamo un paio di tutorial, anche qui, qui o qui.
Maestro
Come ho detto prima, presumo che tu abbia già una maria o mysql in esecuzione. Abbiamo bisogno di fare qualche configurazione sul master, quindi sull'host slave.
Modifica /etc/mysql/mariadb.conf.d/50-server.cnf
(o il file appropriato nella tua configurazione) e modifica le seguenti righe:
bind-address = <your.master.host.ip> server-id=1

Riavvia MariaDB e crea un utente con privilegi di replica:
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;
Scegli il nome utente e la password che desideri, esclavo significa schiavo sullo spagnolo. Imposta l'indirizzo IP del tuo slave MariaDB. Successivamente puoi vedere lo stato con SHOW MASTER STATUS.

L'ultimo passaggio (quasi, torneremo più tardi) sul master è copiare tutti i dati nel server master sullo slave. Creiamo un dump con:
root@my1:~# mysqldump -u root --all-databases -p --master-data > data.sql
Schiavo
Sul server slave, cambia prima il file di configurazione /etc/mysql/mariadb.conf.d/50-server.cnf
nelle stesse righe del master:
bind-address = <your.slave.host.ip> server-id=1
Riavvia MariaDB e carica il dump dal master con:
root@my2:/home/gonz# mysql -uroot < data.sql
Quindi arresta lo slave, imposta l'host master e avvia lo slave con i seguenti comandi:
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;
Non dimenticare di modificare l'ip host, l'utente e la password con i tuoi valori se stai solo copiando e incollando quei comandi;).
Test e riparazione
Dovrebbe farlo. Se tutto funziona come previsto, dovresti avere la replica master-slave con MariaDB.
Ora puoi creare un database sul master e quel database dovrebbe apparire automaticamente nello slave. Ma non ha funzionato per me. Ho creato un database sul master con:
MariaDB [(none)]> CREATE DATABASE somedatabase;
E non è stato replicato sullo schiavo. Per capire perché, ho eseguito nel server slave:
MariaDB [(none)]> show slave status\G ;

Quando ho cercato su Google quell'errore, hanno suggerito di eliminare l'utente esclavo e svuota i privilegi. Questo sul server slave, arresta anche lo slave prima di eliminare l'utente e avvia lo slave dopo aver scaricato i privilegi:
MariaDB [(none)]> stop slave; MariaDB [(none)]> drop user 'esclavo'@'192.168.122.223'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> start slave;

E questo mi è stato risolto, come puoi vedere nello screenshot ora c'è un database di database sul server slave. Ed è vuoto. Sono quindi tornato al master per creare una tabella e popolare con i dati:

L'ultimo passaggio è controllare sullo slave se la tabella è stata creata e se sono presenti dati all'interno:

Per sicurezza, puoi controllare lo stato dello slave un'altra volta (o qualsiasi altra volta in futuro se qualcosa sembra non andare).

E infine ho impostato la replica master-slave con MariaDB.