Página Inicial > Linux > Replicação MySQL no CentOS

Replicação MySQL no CentOS

Opa,

Nesse post eu tentarei mostrar como fazer replicação de banco de dados MySQL no CentOS.

Primeiro devemos configurar o servidor MySQL master para “escutar” na rede local comentando as linhas abaixo do arquivo my.cnf (caso existam):

# vim /etc/my.cnf

[mysqld]
#skip-networking
#bind-address            = 127.0.0.1

Agora vamos habilitar o log do banco que desejamos replicar e informar que o servidor MySQL é o servidor master:

# vim /etc/my.cnf

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1

Agora criamos o diretório onde serão armazenados os logs e ajustamos as permissões:

# mkdir /var/log/mysql
# chown mysql: -R /var/log/mysql/

Reiniciamos o serviço (não o servidor):

# /etc/init.d/mysqld restart

É necessário conceder privilégios de replicação para o usuário que será utilizado:

# mysql -u root -p
Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘example’@’%’ IDENTIFIED BY ‘senha_example’;
mysql> FLUSH PRIVILEGES;

Aproveite e faça um LOCK nas tabelas para poder realizar o dump (OBS.: Seu banco será “somente leitura” nesse momento):

mysql> USE exampledb;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+——————+———-+—————+——————+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| mysql-bin.000001 |       98   | example |                  |
+——————+———-+—————+——————+

IMPORTANTE: Anote essas informações pois elas serão necessárias para a ativação da replicação.

mysql> quit;

Faça um dump da base para importar no servidor slave (existe outro método para importar os dados com o comando LOAD DATA FROM MASTER;, mas enquanto os dados são replicados o servidor master fará um LOCK nas tabelas até a conclusão da replicação, portanto preferi esse método):

# mysqldump -u root -p –opt exampledb > exampledb.sql
Enter password:

Retire o LOCK das tabelas:

# mysql -u root -p
Enter password:

mysql> UNLOCK TABLES;
mysql> quit;

Com isso a configuração do servidor master está pronta, agora vamos acessar o servidor slave e criar o banco:

# mysql -u  root -p
Enter password:

mysql> create database exampledb;
mysql> quit;

Copie o dump gerado da base no servidor master (no meu caso utilizei o scp e o arquivo estava no home do root):

# scp root@servidor_slave:/root/exampledb.sql .

Importe o dump no servidor slave:

# mysql -u root -p exampledb < exampledb.sql
Enter password:

Agora devemos configurar o servidor MySQL para que ele seja um servidor slave:

# vim /etc/my.cnf

[mysqld]
server-id=2
master-host=192.168.0.100
master-user=example
master-password=senha_example
master-connect-retry=60
replicate-do-db=exampledb

E reiniciar o serviço (novamente, só precisa reiniciar o serviço):

# /etc/init.d/msyqld restart

Acesse o servidor slave e execute os comandos abaixo para ativar a replicação:

# mysql -u root -p
Enter password:

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.0.100′, MASTER_USER=’example’, MASTER_PASSWORD=’senha_example’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> quit;

OBS.: MASTER_LOG_FILE é o nome do arquivo de log (File) que foi exibido no comando SHOW MASTER STATUS no servidor master e MASTER_LOG_POS é a posição (Position) que foi exibida com o mesmo comando.

Verificando no log do servidor slave:

# tail -f /var/log/mysqld.log
—– inicio do log —–
090617 10:17:03 [Note] Slave SQL thread initialized, starting replication in log ‘mysql-bin.000001’ at position 98, relay log ‘/var/run/mysqld/mysqld-relay-bin.000001’ position: 4
090617 10:17:03 [Note] Slave I/O thread: connected to master ‘replica@192.168.0.100:3306’,  replication started in log ‘mysql-bin.000001’ at position 98
—– fim do log —–

Pronto! Provavelmente a replicação já deve estar funcionando, bastando realizar os testes no banco master e verificar se os dados estão sendo replicados no servidor slave.

Fonte: http://www.howtoforge.com/mysql_database_replication

Categories: Linux Tags: , ,
  1. 18, junho, 2009 em 11:39 | #1

    Ahhhh Agostinho, tá na hora de cobrar por esses posts cara.
    Mamão com açúcar demais. 😀

  1. Nenhum trackback ainda.