Na replicação MySQL Master-Slave, existe alguma maneira de lidar com as funções:
- LOAD_FILE()
- UUID(), UUID_SHORT()
- DO UTILIZADOR()
- FOUND_ROWS()
- SYSDATE()
- GET_LOCK()
- IS_FREE_LOCK()
- IS_USED_LOCK()
- MASTER_POS_WAIT()
- ALEATÓRIO()
- RELEASE_LOCK()
- DORME()
- VERSÃO()
Temos replicação e estou meio preocupado com a consistência dos dados, ou seja, no meu localhost.
MESTRE
mysql> CREATE TABLE `t1` ( `number_id` varchar(30) DEFAULT NULL );
mysql> insert into t1 values (uuid_short());
mysql> select * from t1;
+-------------------+
| number_id |
+-------------------+
| 95769054064672779 |
+-------------------+
1 row in set (0.00 sec)
Escravo
mysql> select * from t1;
+--------------------+
| number_id |
+--------------------+
| 167826651055390725 |
+--------------------+
1 row in set (0.00 sec)
Mestre
mysql> update t1 set number_id=0 where number_id='95769054064672779';
mysql> select * from t1;
+-----------+
| number_id |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec)
Escravo
mysql> select * from t1;
+--------------------+
| number_id |
+--------------------+
| 167826651055390725 |
+--------------------+
1 row in set (0.00 sec)
Existe alguma maneira de lidar com isso? Eu não sou um programador, os programadores devem saber que é banco de dados de replicação para que ele possa começar a usar variáveis com Mysql Functions para manter a consistência?
O que você está vendo é completamente inaceitável e não se deve esperar que os desenvolvedores contornem isso.
Você o suprimiu em sua resposta e não sei se você não percebeu, ou não considerou significativo, ou algo está quebrado em sua configuração. Aqui está o que você deveria ter visto:
Observe o 1 aviso.
Portanto, sua correção simples é "não use o formato de instrução".
Limpe essas tabelas discrepantes e então...
Em seguida, prepare-se para o que se segue... como o
MIXED
modo é mais correto e determinístico do queSTATEMENT
o modo, também é mais provável detectar casos em que seus servidores já estão inconsistentes e a replicação será interrompida. Não se confunda que oMIXED
modo o quebrou... oMIXED
modo apenas tenderá a descobrir problemas que você já tem.O mesmo vale para o
ROW
formato, que é ainda mais agressivo na manutenção de dados idênticos, e é meu preferidoBINLOG_FORMAT
por esse motivo, entre outros.Você também precisa definir isso em seu
my.cnf
arquivo para que a configuração persista se o servidor for reiniciado.Mas quando você não estiver mais usando o
STATEMENT
modo, esse problema deve desaparecer completamente.http://dev.mysql.com/doc/refman/5.6/en/replication-rbr-safe-unsafe.html