De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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
IP MASTER: 192.168.0.199 IP SLAVE: 192.168.0.200 NOME DO DB: teste
mysqladmin --user=root password dicas-l mysqladmin --user=root --password reload
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;
/etc/my.cnf
log-bin = /home/mysql/logs/mysql-bin.log binlog-do-db=teste server-id=1
/home/mysql/logs
mysql-bin.log
e mude para dono e grupo do mysql
chown -R mysql.mysql /home/mysql chmod -R 775 /home/mysql /etc/init.d/mysql restart
/etc/my.cnf
server-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
slave-relay.log
e slave-relay-log.index
chown -R mysql.mysql /home/mysql chmod -R 775 /home/mysql /etc/init.d/mysql restart
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
mysql -u root -p create database teste; gunzip /home/database.sql.gz mysql -u root -p teste </home/database.sql
show master status; +---------------------+----------+--------------+---------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------------+----------+--------------+---------------------+ | mysql-bin.000001 | 21197930 | teste,teste | | +---------------------+----------+--------------+---------------------+
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;
unlock tables;
show slave status\G;
use teste; LOAD DATA INFILE '/etc/passwd' INTO TABLE senhas FIELDS TERMINATED BY ':' ; select * from senhas;
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
[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
GRANT REPLICATION SLAVE ON *.* TO 'dicas-l'@'%' IDENTIFIED BY 'dicas-l';e não a linha
GRANT REPLICATION SLAVE ON tabela.* TO 'dicas-l'@'%' IDENTIFIED BY 'dicas-l';
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;
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;
my.cnf
do slave com este
parametro: replicate-do-db=teste, novo feito isso, refaça os passos desde
o inicio.
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.
# 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
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:
A quem se destina
Iniciantes no universo do GNU/Linux e/ou Software Livre.
Por que fazer este treinamento
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários