Eu criei uma configuração master-slave do mysql e as coisas parecem boas. o "show status master"; no escravo não mostra nenhum erro. esta é a saída
Slave_IO_State: Waiting for master to send event
Master_Host: 109.123.100.58
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 106
Relay_Log_File: relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
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: 106
Relay_Log_Space: 106
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:
No entanto, a replicação no escravo não parece estar acontecendo quando o mestre sofre alterações
No mestre. MOSTRAR ESTADO MASTER
+------------------+----------+--------------+-------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+-------------------------+
| mysql-bin.000001 | 639495 | | mysql,informationschema |
+------------------+----------+--------------+-------------------------+
no escravo SHOW PROCESSLIST produz
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
| 174 | system user | | NULL | Connect | 25777 | Waiting for master to send event | NULL |
| 175 | system user | | NULL | Connect | 25777 | Has read all relay log; waiting for the slave I/O thread to update it | NULL |
| 199 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+-----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec)
Estou esquecendo de algo
mysql
replication
Soyeed
fonte
fonte
SHOW MASTER STATUS
também, acho que a parte superior está faltando.SHOW MASTER STATUS
o escravo . Esta informação não é relevante, a menos que o escravo também esteja servindo como mestre para outros escravos mais a jusante.SHOW PROCESSLIST
no mestre, vê a conexão de entrada do escravo? Você deve. Além disso, eu tentariaSTOP SLAVE IO_THREAD;
entãoSTART SLAVE IO_THREAD;
o escravo e veria como a saída deSHOW SLAVE STATUS
(no escravo) muda, se é que o faz.Respostas:
A saída que você apresentou é muito confusa. Por um lado, o mestre mostra:
O escravo
PROCESSLIST
indica que a replicação funciona (o encadeamento IO está conectado ao mestre, o encadeamento SQL está aguardando).O escravo
SHOW SLAVE STATUS
novamente afirma que está tudo bem, mas a posição do mestre está106
.Todas essas saídas são emitidas aproximadamente ao mesmo tempo? Caso contrário, eles não são valiosos.
Gostaria de verificar o seguinte:
109.123.100.58
realmente seu mestre?SHOW PROCESSLIST
na lista principal a ligação feita pelo escravo sob oreplica
usuário?server-id
configurações diferentes para mestre e escravo?replicate-do-*
oureplicate-ignore-*
configurações no seumysql.cnf
arquivo?fonte
+-------+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+------+---------+------+-------+------------------+ | 23243 | root | localhost | NULL | Query | 0 | NULL | SHOW PROCESSLIST | +-------+------+-----------+------+---------+------+-------+------------------+
Melhor do que usar binlog-ignore-db é usar a filtragem do lado do escravo. Eu estava preso em uma situação semelhante, sim, levei um dia inteiro para descobrir:
Perdi algo grande !!!
A diferença entre
No lado escravo. E
não funcionou para mim na mesa. Eu tive que usar
Eu acho que isso teria funcionado para um curinga
... Agora, vamos descobrir como replicar a mesma tabela de vários mestres. Ok, eu descobri, o MySQL não suporta nativamente; MariaDB 10 faz.
Também tive outro problema inicialmente: minha senha tinha mais de 32 caracteres. Vaia!
fonte
Eu também me deparei com este problema. A causa raiz era ter o mestre
server_id=0
. O MariaDB possui um comportamento especial para oserver_id=0
qual não permitirá que a replicação funcione.Quando comecei a indexar com base em 1, tudo funcionou bem.
fonte
Você não disse ao escravo qual banco de dados replicar: a variável Replicate_Do_DB está vazia.
Tente adicionar a linha
replicate-do-db = name_of_db (onde "name_of_db" é o nome do banco de dados a ser replicado)
no seu my.cnf (no escravo) e reinicie o servidor escravo.
Edição: Eu não acho que minha resposta é a solução certa, enquanto isso ;-)
Talvez dê uma olhada nesta página: http://dev.mysql.com/doc/refman/5.1/en/replication-problems.html
fonte
+------------------+----------+--------------+-------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+-------------------------+ | mysql-bin.000004 | 106 | | mysql,informationschema | +------------------+----------+--------------+-------------------------+
entry binlog_ignore_db = mysql binlog_ignore_db = informationschema