Replicació bbdd per mysql

Tenim només dos servidors, un farà de Master i l'altre d'esclau. El primer estarà actiu i quan caigui tindrem l'Esclau per treballar. Quan restablim el Master pararem l'esclau, farem una còpia manual de l'Esclau sobre el Master i tornarem a conectar l'Esclau.

Servidor Master: veuipcat1
Servidor Esclau: veuipcat2

Passos a seguir:

  • Farem una còpia backup del servidor Master i l'instal·larem sobre l'esclava.
  • Donarem permisos a l'esclava per sincronitzar-se amb la Master.
  • Crearem un compte perquè l'esclau es connecti al master.

Configuració dels servidors:
Editem l'arxiu my.cnf en el Master. Descomentem les línies:

[root@veuipcat1 ~]# vim /etc/mysql/my.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log # Log
log-bin = mysql-bin # Arxiu de rèplica
#replicate-do-db = bbdd-replicar
#replicate-ignore-table = taula-ignorar-1
#replicate-ignore-table = taula-ignorar-2
#binlog-do-db = bbdd-nomes-crear-logs
#bind-address = localhost # Recorda de commentar aquesta linia per Debian

Editem l'arxiu my.cnf en l'Esclau. Descomentem les línies:

[root@veuipcat2 ~]# vim /etc/mysql/my.cnf
[mysqld]
server-id = 2
#replicate-do-db = bbdd-replicar
#replicate-ignore-table = taula-ignorar-1
#replicate-ignore-table = taula-ignorar-2
#binlog-do-db = bbdd-nomes-crear-logs

Rearranquem els servidors:

[root@veuipcat1 ~]# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

[root@veuipcat2 ~]# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..

Copia backup del Master

Crear un compte d'usuari de l'esclau al servidor Master:

[root@veuipcat1 ~]# mysql
mysql> GRANT REPLICATION SLAVE ON *.* TO 'usuari_esclau'@'host_o_ip_esclau' IDENTIFIED BY 'password_esclau';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Bloquejar les taules per fer còpia de backup:

# Per mysql 4
mysql> LOCK ALL TABLES READ ONLY;

# Per mysql 5:
# una a una : mysql> LOCK TABLES trans READ, customer WRITE;
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.01 sec)

Fer la copia de les bases de dades (bd1, bd2, bd3):

[root@veuipcat1 ~]#mysqldump -p --databases bd1 bd2 bd3 > bbdd_dump_240409.sql

Veure l'estat del Master:

[root@veuipcat1 ~]#mysql -p
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 1309 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Desbloquejar les taules:

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

Duplicació manual a l'Esclau:

Copia el backup del Master:

[root@veuipcat2 ~]# mysql -p < /usr/src/tars/bbdd_dump_ref20_240409.sql

Definir les variables de replicació:

[root@veuipcat2 ~]# mysql -p

mysql> CHANGE MASTER TO MASTER_HOST= 'host_o_ip_esclau';
Query OK, 0 rows affected (0.02 sec)

mysql> CHANGE MASTER TO MASTER_USER='usuari_esclau';
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_PASSWORD='password_esclau';
Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001';
Query OK, 0 rows affected (0.01 sec)

mysql> CHANGE MASTER TO MASTER_LOG_POS=1309;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql>

Veiem l'estat del Esclau:

mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 10.0.1.11
Master_User: slave_ref20
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1309
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 98
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: No
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: 1309
Relay_Log_Space: 98
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: NULL
1 row in set (0.00 sec)

Ja hem acabat :P

Registrat!