Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Replicação de Mysql
Colaboração: Renato Rudnicki
Data de Publicação: 11 de Maio de 2009
Para quem precisa implementar replicação de mysql, segue o tutorial abaixo. O mesmo foi testado em sistema centos 5.1, como mysql 5.x
Configurando o master
IP MASTER: 192.168.0.199 IP SLAVE: 192.168.0.200 NOME DO DB: teste
- criar senha para mysql
mysqladmin --user=root password dicas-l mysqladmin --user=root --password reload
- criar banco de dados
mysql -u root -p mysql> CREATE DATABASE teste; mysql> use teste; mysql> CREATE TABLE senhas ( usuario text, senha text, uid text, gid text, gecos text, home text, shell text ); mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO 'dicas-l'@'%' IDENTIFIED BY 'dicas-l'; FLUSH PRIVILEGES;
- edite o
/etc/my.cnflog-bin = /home/mysql/logs/mysql-bin.log binlog-do-db=teste server-id=1
- crie o diretorio
/home/mysql/logs - crie o arquivo
mysql-bin.loge mude para dono e grupo do mysqlchown -R mysql.mysql /home/mysql chmod -R 775 /home/mysql /etc/init.d/mysql restart
Configurando o slave
- edite o
/etc/my.cnfserver-id=2 master-host=192.168.0.199 master-connect-retry=60 master-user=dicas-l master-password=dicas-l replicate-do-db=teste relay-log = /var/lib/mysql/slave-relay.log relay-log-index = /var/lib/mysql/slave-relay-log.index
- crie os arquivos
slave-relay.logeslave-relay-log.index - mude para dono e grupo do mysql
chown -R mysql.mysql /home/mysql chmod -R 775 /home/mysql /etc/init.d/mysql restart
Configurando o master
mysql -u root -p flush tables with read lock; mysqldump teste -u root -p > /home/database.sql;gzip /home/database.sql; scp /home/database.sql root@192.168.0.200:/home
Configurando o slave
mysql -u root -p create database teste; gunzip /home/database.sql.gz mysql -u root -p teste </home/database.sql
Configurando o master
show master status; +---------------------+----------+--------------+---------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------------+----------+--------------+---------------------+ | mysql-bin.000001 | 21197930 | teste,teste | | +---------------------+----------+--------------+---------------------+
Configurando o slave
mysql -u root -p slave stop; CHANGE MASTER TO MASTER_HOST='192.168.0.199', MASTER_USER='dicas-l', MASTER_PASSWORD='dicas-l', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=21197930; slave start;
Configurando o master
unlock tables;
Configurando o slave
show slave status\G;
Configurando o master e testando
use teste; LOAD DATA INFILE '/etc/passwd' INTO TABLE senhas FIELDS TERMINATED BY ':' ; select * from senhas;
Testando o slave
select * from senhas;
MYSQL MASTER [root@master ~]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 log-bin=/home/mysql/logs/mysql-bin.log binlog-do-db=teste server-id=1 [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
MYSQL SLAVE
[root@slave home]# cat /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 server-id=2 master-host=192.168.0.199 master-user=dicas-l master-password=dicas-l replicate-do-db=teste relay-log=/var/lib/mysql/slave-relay.log relay-log-index=/var/lib/mysql/slave-relay-log.index [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
Observaçoes
- é importante usar a linha
GRANT REPLICATION SLAVE ON *.* TO 'dicas-l'@'%' IDENTIFIED BY 'dicas-l';
e não a linhaGRANT REPLICATION SLAVE ON tabela.* TO 'dicas-l'@'%' IDENTIFIED BY 'dicas-l';
- é importante seguir a ordem:
slave stop; CHANGE MASTER TO MASTER_HOST='192.168.0.199', MASTER_USER='dicas-l', MASTER_PASSWORD='dicas-l', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=21197930; slave start;
- não se deve apagar dados diretamente no mysql slave, se não, ira quebrar a replicação.
- se quebrar a replicação, deve-se utilizar novamente os comandos abaixo no
server slave:
slave stop; CHANGE MASTER TO MASTER_HOST='192.168.0.199', MASTER_USER='dicas-l', MASTER_PASSWORD='dicas-l', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=21197930; slave start;
- para adicionar mais bancos, configure o
my.cnfdo slave com este parametro: replicate-do-db=teste, novo feito isso, refaça os passos desde o inicio.
Observacoes adicionais
Este tutorial assume que você está montando uma estrutura do inicio, ou seja, os bancos ainda não possuem dados. Caso você precise adicionar um slave de um master que já está em funcionamento, é necessário parar as transações no master ou travar as tabelas, fazer um dump do servidor, e rodar "show master status" para saber qual é a posição e o arquivo de logs corrente do master. Pode-se neste ponto liberar as transações do banco. Após isso carregue o dump no slave, e inicie o slave da seguinte maneira:
mysql> CHANGE MASTER TO -> MASTER_HOST='IP do master', -> MASTER_USER='replica', -> MASTER_PASSWORD='senha', -> MASTER_LOG_FILE='slackware-bin-000002', -> MASTER_LOG_POS=450; mysql> START SLAVE;
MASTER_LOG_FILE: deve ser configurado com o mesmo nome do arquivo de log
obtido com "show master status". MASTER_LOG_POS: Posição obtida com "show
master status".
Desta forma o slave será iniciado e irá transferir apenas os logs/transações a partir de determinada posição. Ou seja, o que está faltando desde o momento do dump até o momento corrente.
Uma forma muito interessante se sincronizar os slaves com o master é utilizando LOAD DATA FROM MASTER para copiar os dados do master para o slave. Este comando copia todos os dados do master, restaura no slave e ainda ajusta a posição nos logs. Ou seja, depois da cópia seu slave estará sincronizado com o master e ainda estará com o offset de log sincronizado.
Muito bom para quem quer evitar o trabalho de um dump ou uma cópia
binária. Para evitar inconsistência LOAD DATA FROM MASTER também faz uso de
FLUSH TABLES WITH READ LOCK em todas as tabelas. Dessa forma não há
perda de dados.
Para utilização desse comando o usuário de replicação deve possui privilégios SUPER e RELOAD no master. E também precisa privilégio SELECT na tabela que será copiada.
Alguns comandos úteis
# Mostra status do master e informações sobre os arquivos de logs
mysql> show master status;
# Mostra status do slave
mysql> show slave status \G
# Para slave
mysql> stop slave;
# starta slave
mysql> start slave;
# reseta slave. zera seqüência dos logs binários.
mysql> reset slave
# Mostra as threads em execucão no servidor.
mysql> SHOW PROCESSLIST\G
[mysqld]
log-bin # Ativa log binário, necessário para cada master
binlog-do-db=teste # Especifica para quais bancos devem ser gerados logs binários.
# Omita esta opção para gerar logs de todos os bancos.
server-id=1 # Id que identifica o servidor. Deve ser único para cada server
log-slave-updates # Ativa log-slave-updates . Obrigatório para replicação em cadeia
max_allowed_packet = 10M # Aumente max_allowed_packet se vc possui um banco muito grande
# Ou ajuste o tamanho dos arquivos de log para não ultrapassar max_allowed_packet
master-host = 192.168.0.3 # Ip do server debian/master
master-user = replica # usuário para replicação
master-password = senha # senha
master-port = 3306 # porta utilizada para replicação, padrão=3306
Treinamento on-line gratuito de Introdução ao Slackware Linux
Colaboração: Bruno T. Russo
Gostaria de comunicar à toda comunidade o treinamento de Introdução ao Slackware Linux.
O treinamento é gratuito e será realizado on-line.
Sobre o treinamento
Este é um treinamento introdutório ao Slackware Linux, onde são apresentados os conceitos do Software Livre e a utilização básica do Slackware Linux. São abordados os seguinte tópicos:
- Instalação
- Inicialização do sistema
- Gerenciador de boot
- Usuários e Grupos de Usuários
- Introdução ao SHELL
- Sistemas de Arquivos
- Comandos para manipulação de diretórios
- Comandos para manipulação de arquivos
- Redirecionadores e coringas
- Permissões de arquivos
- Gerenciamento de processos
- Introdução ao VI
- Compactadores
- Instalando e removendo pacotes
- Agendamento de tarefas
- Fundamentos de rede
- Kernel e Módulos
A quem se destina
Iniciantes no universo do GNU/Linux e/ou Software Livre.
Por que fazer este treinamento
- Você irá aprender os conceitos básicos de um Sistema Slackware Linux.
- Você faz o treinamento a hora que quiser e quando puder.
- O treinamento é 100% gratuito.
Endereço eletrônico:
<contato (a) solucaolivre com br>
Bruno Tadeu Russo, é Bacharel em sistemas de Informação, pela Universidade Presbiteriana Mackenzie, e atualmente cursa MBA em gestão de Projetos. Utiliza Linux desde 1999. Atualmente trabalha e uma Consultoria, onde é coordenador de infra-estrutura. Desde 2002 utiliza a distribuição Slackware.
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
28 Jul 2011, 15:47
Valeu!
10 Jul 2011, 10:47
vou utilizar para instalar o mysql no suse pois estou apanhando para faze-lo.
19 Mai 2011, 09:49
24 Set 2010, 17:07
Estava com problemas ao tentar configurar o SLAVE para replicação, mas graças ao seu manual(que ficou bem explicativo) o slave funcionou corretamente.



