doc:guides:mysql_replication

Replicació MySQL

El servidor Mestre (Master) és el més senzill de configurar, només cal habilitar els logs binaris i donar-li un identificador únic. Per això editem el fitxer de configuració /etc/mysql/my.cnf i a la secció del servidor [mysqld] hi afegim:

[mysqld]
log-bin=mysql-bin
server-id=1

Després d'aquests canvis cal reiniciar el servei. La replicació només es pot dur a terme per socket TCP (xarxa) i cal crear un usuari:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'usuari'@'servidor-esclau' IDENTIFIED BY 'password'

Semblant a abans, com a mínim cal configurar un identificador de servidor diferent al fitxer /etc/mysql/my.cnf:

[mysqld]
server-id=2

Podem configurar la replicació amb MySQL en funcionament o, si sempre serà un servidor esclau (no pretenem fer-lo master) podem configurar-la en el mateix fitxer de configuració amb els següents paràmetres:

[mysqld]
master-host=servidor-master
master-user=usuari
master-password=password

Aquest apartat només és necessari si el mestre ja té dades que volem replicades a l'esclau. Si estem configurant dos nous servidor podem saltar-lo.

Podem fer el traspàs de dades copiant el datadir del MySQL en brut o (més recomanable) fer-ho amb un mysqldump. Sigui quin sigui el procés (que no documentaré aquí). Cal seguir uns petits passos per assegurar la integritat de les dades i la correcte replicació.

Ens conectem a una sessió MySQL i bloquejem les taules per tal de no fer-hi modificacions:

mysql> FLUSH TABLES WITH READ LOCK;

Ara mateix el servidor mestre MySQL deixarà fer consultes però qualsevol modificació serà bloquejant 1).

És convenient no tancar la sessió on hem fet el LOCK, ja que al tancar-la l'alliberarà automàticament. Aquest és el moment per passar la informació d'un servidor a l'altre sigui copiant el directori complet de dades o amb un dump.

Quan ja tinguem les dades copiades (encara que no les haguem introduït en l'esclau) ja podem alliberar el lock, però abans és important saber en quin punt transaccional estava MySQL (les coordenades de log binari), en el mestre executem:

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 29667003 |              |                  | 
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.01 sec)

En aquest punt tenim:

  • Una fotografia exacta snapshot de les BD en un moment exacte de temps (base de dades integre)
  • La coordeanada a partir de la qual aplicar els canvis transaccionals que es produeixin mentre o passem a l'esclau.

Ara anem a l'esclau i importem (ja sigui amb el dump o els fitxers en brut) les dades. Quan ja estigui fet podem configurar i iniciar la replicació.

mysql> CHANGE MASTER TO
  -> MASTER_HOST='idoru.l3jane.net',
  -> MASTER_USER='replicator',
  -> MASTER_PASSWORD='XXXXXXX',
  -> MASTER_LOG_FILE='mysql-bin.000001',
  -> MASTER_LOG_POS=29667003;
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

Podem comprovar que estan sincronitzats amb SHOW MASTER STATUS i SHOW SLAVE STATUS

FIXME Cal revisar-ho

Si cau el mestre i volem que l'esclau actuï ara com a Mestre:

mysql> STOP SLAVE;
mysql> RESET MASTER;
mysql> CHANGE MASTER TO MASTER_HOST='';

Si el mestre no ha caigut (senzillament volem canviar de servidor), n'hi ha prou en fer un FLUSH LOGS; al mestre


1)
el procés quedarà a l'espera fins que s'alliberi el lock
  • doc/guides/mysql_replication.txt
  • Last modified: 2021/06/10 21:44
  • by 127.0.0.1