Replicació bbdd per mysql
dilluns, 18 d'abril de 2011 19:20
Escrit per Silvia Gallego
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