replicação do mysql 1x master, 1x slave

1

Acabei de configurar um mestre e um servidor escravo, mas não está funcionando ..

No meu site eu conecto ao servidor escravo e insiro algumas linhas, mas elas não aparecem no mestre e vice-versa. O que está errado?

Foi o que eu fiz:

Master:

-> /etc/mysql/my.cnf

[mysqld]
log-bin         = mysql-master-bin
server-id=1
# bind-address      = 127.0.0.1
binlog-do-db        = test_db


Slave:

-> /etc/mysql/my.cnf

[mysqld]
log-bin         = mysql-slave-bin
server-id=2
# bind-address      = 127.0.0.1
replicate-do-db     = test_db


Slave:

terminal 0 >
mysql> STOP SLAVE; // and drop tables


Master:

terminal 1 >
mysql> CREATE USER 'repl_slave'@'slave_ip' IDENTIFIED BY 'repl_pass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_slave'@'slave_ip';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
-- leave terminal open

terminal 2 >
shell> mysqldump -u root -pPASSWORD test_db --lock-all-tables > dump.sql

mysql> SHOW MASTER STATUS;


Slave:

terminal 3 >
shell> mysql -u root -pPASSWORD test_db < dump.sql

terminal 0 >
mysql> CHANGE MASTER TO
mysql> MASTER_HOST='master_ip',
mysql> MASTER_USER='repl_slave',
mysql> MASTER_PASSWORD='repl_pass',
mysql> MASTER_PORT=3306,
mysql> MASTER_LOG_FILE='mysql-master-bin.000003',   // terminal 2 > SHOW MASTER STATUS
mysql> MASTER_LOG_POS=4,                        // terminal 2 > SHOW MASTER STATUS
mysql> MASTER_CONNECT_RETRY=10;

mysql> START SLAVE;

mysql> SHOW SLAVE STATUS;

Aqui está o status do escravo:

Array
(
    [Slave_IO_State] => Waiting for master to send event
    [Master_Host] => xx.xx.xx.xx
    [Master_User] => repl_slave
    [Master_Port] => 3306
    [Connect_Retry] => 10
    [Master_Log_File] => mysql-master-bin.000003
    [Read_Master_Log_Pos] => 106
    [Relay_Log_File] => mysqld-relay-bin.000002
    [Relay_Log_Pos] => 258
    [Relay_Master_Log_File] => mysql-master-bin.000003
    [Slave_IO_Running] => Yes
    [Slave_SQL_Running] => Yes
    [Replicate_Do_DB] => test_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] => 106
    [Relay_Log_Space] => 414
    [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] => 0
    [Master_SSL_Verify_Server_Cert] => No
    [Last_IO_Errno] => 0
    [Last_IO_Error] => 
    [Last_SQL_Errno] => 0
    [Last_SQL_Error] => 
)
    
por clarkk 01.07.2012 / 12:33

2 respostas

4

De acordo com seu status de escravo, a replicação está funcionando corretamente. O que provavelmente será quebrado são suas expectativas. A replicação do MySQL é uma replicação unidirecional do mestre para o escravo sem a verificação da consistência no escravo. As linhas alteradas no escravo por um terceiro não serão replicadas de volta ao mestre, mas obviamente afetarão a consistência dos dados do escravo.

Na maioria dos casos, você não notará as linhas de dados alterados no escravo sem executar verificações manuais adicionais - consulte o Percona Toolkit (antigo Maatkit) para ferramentas facilita essa tarefa.

Você também deve remover o replicate_do_db da sua configuração, pois essa opção de filtragem é provavelmente não fazendo o que você pensa que é . Fora isso, deve funcionar fora da caixa. Se isso não acontecer, poste suas instruções SQL usadas para verificar a replicação de dados.

    
por 01.07.2012 / 13:03
2

On my website I connect to the slave server and I insert some rows, but they do not appear on the master...

Isso só acontecerá com a replicação multimestre. Nesse tipo de configuração, os servidores ambos são mestres. Isso é complicado e é fácil cometer erros. Você não vai querer fazer multi-master pela primeira vez.

Então, com um mestre normal - > configuração escravo, você não pode inserir linhas no escravo. O escravo é somente leitura para você. A única maneira pela qual novos dados entram no escravo é via replicação do mestre.

... and vice versa.

Se você inseriu linhas no mestre e elas não apareceram no escravo, existe um problema. O status de escravo parece bem para mim e não há atraso. Eu não vejo nada que faça com que ele não funcione, a menos que você tenha inserido algum outro banco de dados que não seja test_db .

    
por 01.07.2012 / 13:06