Punto informatico Network
Canali
20090625115954_737063149_20090625115932_18826826_sl_sync.png

Come replicare un database MySQL su più server (Windows/Linux)

12/10/2010
- A cura di
Zane.
Tecniche Avanzate - MySQL consente di "fotocopiare" i database gestiti da un singolo server principale su molteplici server secondari: un'ottima soluzione per distribuire il carico oppure per approntare una procedura di backup efficiente ed automatica.

Download

Tag

Passa qui con il mouse e visualizza le istruzioni per utilizzare i tag!

server (2) , windows (1) , linux (1) , mysql (1) , database (1) , amministrazione (1) , dba (1) , backend (1) .

Valutazione

  •  
Voto complessivo 4 calcolato su 18 voti

Per prima cosa, ci occuperemo di predisporre il server master. Aprite quindi il relativo file di configurazione di MySQL sulla macchina principale.

Se state operando sotto Windows, tale file si trova nella cartella d'installazione del programma stesso: per impostazione predefinita, C:\Programmi\MySQL\MySQL Server <versione>\my.ini.

Se invece il vostro sistema utilizza Linux... individuare il corrispondente my.cnf è meno immediato, poichè il percorso varia da distribuzione a distribuzione. /usr/local/mysql/ potrebbe essere un buon candidato. In caso ancora non lo troviate, aiutatevi con find / -name "my.cnf".

Una volta aperto il file, individuate la sezione [mysqld] . Fate attenzione: è presente anche una sezione [mysql] (senza la "d" finale) che, però, non è quella che ci interessa!

Una volta trovata la linea giusta, modificatela aggiungendo subito sotto due parametri, così come indicato di seguito

Il risultato dovrà essere quello riportato in immagine

MLIShot_01.jpg

Dopo aver apportato tale variazione, salvate la modifica. Notate che, su Windows Vista e successivi con Controllo Account Utente (UAC) attivo, dovrete dapprima salvare il documento in una cartella non-"di sistema" come il desktop, quindi sovrascrivere manualmente il vecchio file con quello nuovo.

Riavviate ora il database: se MySQL è installato come servizio di sistema (impostazione predefinita), aprite un prompt di comando amministrativo e quindi lanciate net stop mysql seguito da net start mysql. Sotto Linux usate semplicemente service mysqld restart.

Creare un account per la replicazione

I vari slave dovranno accedere al server presentando credenziali d'accesso valide. Sebbene qualsiasi utente dotato di un certo privilegio possa essere usato, raccomando vivamente di creare un account adibito alla sola replicazione dei dati.

Per farlo, accedete al database del master (mysql -uNomeUtenteAmministratore -pRelativaPassword se lavorate da linea di comando) e quindi impartite CREATE USER 'Replicator'@'%' IDENTIFIED BY 'RepliCarter';.

Appare evidente che il nome utente scelto, Replicator, e la relativa password, RepliCarter (se non capite l'ironia, è normale..) sono del tutto arbitrari.

Una volta creato l'utente, impartite GRANT REPLICATION SLAVE ON *.* TO 'Replicator'@'%';: questo doterà l'account di replicazione dell'unico privilegio necessario ad operare.

Notate che REPLICATION SLAVE deve essere obbligatoriamente assegnato all'intero server. Tentare di limitarlo ad uno specifico database, con qualcosa simile a GRANT REPLICATION SLAVE ON miodatabase.* TO 'Replicator'@'%'; restituirà, per qualche motivo che va ben oltre la mia comprensione, un errore.

Gli amministratori di sistema più cauti vorranno limitare al solo indirizzo dello slave la possibilità di autenticarsi con tale account. Per farlo, è sufficiente sostituire (in entrambi i comandi) a 'Replicator'@'%' la stringa 'Replicator'@'192.168.0.75' o 'Replicator'@'192.168.0.%' (per tutta la rete locale) oppure 'Replicator'@'slave.miodominio.it' o 'Replicator'@'%.miodominio.it' (per tutto il dominio).

Preparasi a qualche disagio

Il prossimo passaggio inibirà per qualche tempo le operazioni di scrittura sul database. Più precisamente, tutti i tentativi di modificare i dati verranno posti in attesa fino alla fine dell'operazione: questo potrebbe comportare qualche timeout o altri tipi di disagi per gli utenti della base di dati.

Se la vostra applicazione è predisposta per consentire l'uso del servizio anche in sola-lettura, potete facilmente attenuare l'inconveniente agendo su questa caratteristica.

In caso contrario, il consiglio è quello di prevenire completamente tali problemi inibendo del tutto l'accesso al database. Se MySQL funge unicamente da backend ad un sito web, il risultato si può ottenere facilmente arrestando il server HTTP. In caso contrario, lo scenario è più complesso e sarà necessario ragionare caso per caso.

Generare una copia del database per i client

Dovete ora "fotocopiare" manualmente il contenuto del master sullo slave.

Per farlo, useremo mysqldump sul master, per poi importare il file da esso generato sul server secondario.

Il comando da usare (all'interno di un prompt di comando amministrativo) per "dumpare" i tre database di nome miodatabase è mysqldump -uroot -pmiapassword --databases miodatabase1 miodatabase2 miodatabase3 --add-drop-database --master-data > C:\dump_del_database_master.sql (sotto Linux è necessario solamente sostituire C:\ con un percorso adeguato al file system, come /usr/).

Prestate particolare attenzione a non dimenticare il parametro --master-data del comando! Questo semplifica moltissimo la procedura e, per come è stato impostato il discorso fino ad ora, è indispensabile per mantenere integri i dati esportati.

Notate anche che, sempre per garantire l'integrità dei dati, dovrete indicare nel comando tutti i nomi dei database che vorrete poi replicare.

La vostra priorità è ora probabilmente quella di ripristinare la piena operatività del server. Potete procedere non appena l'operazione di dump si sarà conclusa.

A questo punto, trasportate il file generato da mysqldump sullo slave (FTP, SCP, Desktop Remoto... perfino un servizio di filehosting va benissimo, se siete disperati e poco preoccupati della riservatezza delle informazioni) e tenetelo pronto: servirà fra poco.

Per una trattazione più approfondita di mysqldump si veda l'articolo "Guida rapida al backup e ripristino dei database MySQL".

Pagina successiva
Configurazione degli slave
Pagina precedente
Come replicare un database MySQL su più server (Windows/Linux)

 

Segnala ad un amico

Tuo nome Tuo indirizzo e-mail (opzionale)
Invia a:
    Aggiungi indirizzo email
    Testo

    © Copyright 2020 BlazeMedia srl - P. IVA 14742231005

    • Gen. pagina: 0.18 sec.
    •  | Utenti conn.: 58
    •  | Revisione 2.0.1
    •  | Numero query: 43
    •  | Tempo totale query: 0.02