Eu recentemente publicado sobre a construção de MySQL e garfos relacionados da fonte só para testar o processo e uma espécie geeky de diversão.
Isso tudo é atualmente apenas para fins de demonstração e avaliação. Se você está ansioso para uma solução pronta de produção com replicação circular confira o link abaixo pela primeira vez sobre o tungstênio-replicador.
Agora vou configurar a replicação circular através destes ambientes de servidores diferentes.Por quê?
- Confirme o quão fácil pode ser feito se isso pode ser feito.
- Maior problema é auto-incremento e eu quero três servidores e não apenas dois.
- É claro que o verdadeiro teste é mais com 5.6 e futuras versões.
- Espero que os erros por causa de características diferentes.
- Estou curioso como muitas vezes eu corro através deste.
Primeiro eu editei o arquivo de configuração relacionada para este servidor. Minha fonte pósreferências mais se precisar de mais informações.
Eu editei o seguinte:
- server-id = 1
- # Descomente a seguinte, se você quiser registrar atualizações
- log-bin = / var / lib / oracle_mysql / oracle_mysql-bin
- Formato de registo # binário - mixed recomendado
- binlog_format = misturado
>
+ ------------ +
| VERSION () |
+ ------------ +
| 5.5.31-log |
+ ------------ +
>show master status\G
*************************** 1. row ***************************
File: oracle_mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
SET GLOBAL auto_increment_offset=1;
SET GLOBAL auto_increment_increment=2;
> show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 2 |
| auto_increment_offset | 1 |
+--------------------------+-------+
- server-id = 2
- log-bin = percona_mysql-bin
- binlog_format = misturado
>
+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+
> show master status\G
*************************** 1. row ***************************
File: percona_mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
> show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 2 |
| auto_increment_offset | 2 |
+--------------------------+-------+
CHANGE
MASTER TO MASTER_HOST='localhost',
MASTER_USER='root',
MASTER_PASSWORD='',
MASTER_PORT=3309,
MASTER_LOG_FILE='oracle_mysql-bin.000001',
MASTER_LOG_POS=107,
MASTER_CONNECT_RETRY=10;
mysql_yoda> start slave;
> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3309
Connect_Retry: 10
Master_Log_File: oracle_mysql-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: percona-relay-bin.000002
Relay_Log_Pos: 260
Relay_Master_Log_File: oracle_mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- server-id = 3
- log-bin = maria_mysql-bin
- binlog_format = misturado
>
+--------------------+
| VERSION() |
+--------------------+
| 5.5.30-MariaDB-log |
+--------------------+
> show master status\G
*************************** 1. row ***************************
File: maria_mysql-bin.000001
Position: 245
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
CHANGE
MASTER TO MASTER_HOST='localhost',
MASTER_USER='root',
MASTER_PASSWORD='',
MASTER_PORT=3307,
MASTER_LOG_FILE='percona_mysql-bin.000001',
MASTER_LOG_POS=107,
MASTER_CONNECT_RETRY=10;
> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3307
Connect_Retry: 10
Master_Log_File: percona_mysql-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: mariadb-relay.000002
Relay_Log_Pos: 399
Relay_Master_Log_File: percona_mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
show global variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
Portanto, esta é uma cadeia de replicação retransmitida no momento e eu estava procurando fazer uma replicação circular.
Agora, se caso você ainda não percebeu como ainda, a compensação dos valores AUTO_INCREMENT por 3 servidores não faz muito sentido.
Para completar o círculo vou primeiro apenas criar um círculo entre MySQL e Percona. O banco de dados Percona também irá replicar para MariaDB.
CHANGE
MASTER TO MASTER_HOST='localhost',
MASTER_USER='root',
MASTER_PASSWORD='',
MASTER_PORT=3307,
MASTER_LOG_FILE='percona_mysql-bin.000001',
MASTER_LOG_POS=107,
MASTER_CONNECT_RETRY=10;
> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 3307
Connect_Retry: 10
Master_Log_File: percona_mysql-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: oracle_mysql-relay.000002
Relay_Log_Pos: 261
Relay_Master_Log_File: percona_mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
A replicação é fácil de configurar com os servidores que não têm tráfego. Então, para começar, eu queria confirmar que tudo realmente funcionou, apesar de o estado apresentou resultados positivos.
oracle_mysql>create database teamwork ;
oracle_mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| teamwork |
| test |
+--------------------+
percona>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| teamwork |
| test |
+--------------------+
MariaDB>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
Problemas já. Podemos ver que o Oráculo MySQL replicado para a instância Percona bem.
Então vamos testar isso de novo.
percona>create database community ;
MariaDB>show databases;
+--------------------+
| Database |
+ -------------------- +
| Information_schema |
| Comunidade |
| Mysql |
| Performance_schema |
| Teste |
+ -------------------- +
oracle_mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| community |
| mysql |
| performance_schema |
| teamwork |
| test |
+--------------------+
Assim, ironicamente, MariaDB funcionou bem com Percona e aceito na comunidade quando não aceitar trabalho em equipe que se originou através Oracle_mysql. Deve-se notar que Oracle_mysql que também aceitam o trabalho da comunidade de Percona.
Assim, podemos corrigi-lo e qual é o problema?
Bem, eu poderia apenas esperar e testar o MariaDB 10.0 versão e permitir que ele use multi-mestre .
Isso pode ser uma solução, porque eu poderia ter replicação circular com Oracle_mysql & Percona e depois usar MariDB para mantê-los tanto em xeque por ter dados replicados para ele e, em seguida, usá-lo para relatar. No entanto, isto pode causar problemas bem.
Então, o que pode ser feito para tornar tudo feliz entre todos eles?
Então, primeiro como um teste, eu moverei o mestre de Maria de Percona para MySQL.
CHANGE
MASTER TO MASTER_HOST='localhost',
MASTER_USER='root',
MASTER_PASSWORD='',
MASTER_PORT=3309,
MASTER_LOG_FILE='oracle_mysql-bin.000001',
MASTER_LOG_POS=708,
MASTER_CONNECT_RETRY=10;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
oracle_mysql>use community;
oracle_mysql>CREATE TABLE `tab1` (
-> `col1` int(11)
-> ) ;
.... After the percona insert below...
oracle_mysql>select * from tab1;
+------+
| col1 |
+------+
| 2 |
| 3 |
| NULL |
| 2 |
| 3 |
| 1 |
+------+
6 rows
percona>use community;
percona>INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1);
Query OK, 6 rows affected (0.06 sec)
MariaDB>use community;
MariaDB>select * from tab1;
Empty set (0.00 sec)
Assim, a replicação circular funciona, desde que eu uso MySQL para todas as gravações. Uma vez que eu escrevo para Percona ele não consegue replicar para MariaDB via Oracle_mysql.
Assim, o tempo para cavar os logs ....
# ./mysqlbinlog /var/lib/percona/percona-relay-bin.000008
SET @@session.collation_database=DEFAULT/*!*/;
CREATE TABLE `tab1` (
`col1` int(11)
)
/*!*/;
DELIMITER ;
# End of log file
# ./mysqlbinlog /var/lib/percona/percona_mysql-bin.000001
use `community`/*!*/;
SET TIMESTAMP=1367775597/*!*/;
INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1)
/*!*/;
# at 619
#130505 17:39:57 server id 2 end_log_pos 646 Xid = 111
COMMIT/*!*/;
DELIMITER ;
# End of log file
# ./mysqlbinlog /var/lib/oracle_mysql/oracle_mysql-relay.000002
use `community`/*!*/;
SET TIMESTAMP=1367775597/*!*/;
INSERT INTO tab1 VALUE (2),(3),(NULL),(2),(3),(1)
/*!*/;
# at 461
#130505 17:39:57 server id 2 end_log_pos 646 Xid = 111
COMMIT/*!*/;
DELIMITER ;
# End of log file
# ./mysqlbinlog /var/lib/oracle_mysql/oracle_mysql-bin.000003
SET @@session.collation_database=DEFAULT/*!*/;
CREATE TABLE `tab1` (
`col1` int(11)
)
/*!*/;
DELIMITER ;
# End of log file
# ./mysqlbinlog /var/lib/mariadb/mariadb-relay.000002
SET @@session.collation_database=DEFAULT/*!*/;
CREATE TABLE `tab1` (
`col1` int(11)
)
/*!*/;
DELIMITER ;
# End of log file
Como você pode ver a partir dos dados de log, com esta configuração atual você terá replicação circular e um escravo, mas você vai ter um escravo válido se só escrever para um senhor. Você pode mover-se facilmente que o escravo se o mestre caiu embora. As pessoas costumam olhar para a replicação circular como a resposta, isso mostra que ele pode ajudar, mas não resolve tudo. Novamente, se você está ansioso para uma solução pronta de produção com replicação circular confira o link abaixo pela primeira vez sobre o tungstênio-replicador.
Para cada ação há uma conseqüência, o que vai, volta.
Karma vai nos ensinar a todos uma coisa, quer gostemos ou não.