2016-05-12 11 views
0

В одной из наших задач репликация mysql прерывается с перерывами. Ниже приведены связанные журналы сервера mysql.Ошибка в MySQL Cluster ERROR с ошибкой «Получена ошибка 240« Неизвестный код ошибки »из NDBCLUSTER по запросу

mysql> show slave status \G; 
*************************** 1. row *************************** 
       Slave_IO_State: Waiting for master to send event 
       Connect_Retry: 60 
       Master_Log_File: mysql-bin.000421 
      Read_Master_Log_Pos: 997653853 
       Relay_Log_File: mysql-relay-bin.000058 
       Relay_Log_Pos: 498026393 
     Relay_Master_Log_File: mysql-bin.000421 
      Slave_IO_Running: Yes 
      Slave_SQL_Running: No 
       Replicate_Do_DB: 
      Replicate_Ignore_DB: 
      Replicate_Do_Table: 
     Replicate_Ignore_Table: mysql.servers,mysql.proc,mysql.user,mysql.columns_priv,mysql.ndb_binlog_index,mysql.slow_log,mysql.event,mysql.tables_priv,mysql.procs_priv,mysql.func,mysql.general_log,mysql.db,mysql.plugin 
     Replicate_Wild_Do_Table: 
    Replicate_Wild_Ignore_Table: mysql.help%,ndbinfo.%,mysql.time_zone%,information_schema.% 
        Last_Errno: 1296 
        Last_Error: Error 'Got error 240 'Unknown error code' from NDBCLUSTER' on query. Default database: ''. Query: 'COMMIT' 
     Seconds_Behind_Master: NULL 
Master_SSL_Verify_Server_Cert: No 
       Last_IO_Errno: 0 
       Last_IO_Error: 
       Last_SQL_Errno: 1296 
       Last_SQL_Error: Error 'Got error 240 'Unknown error code' from NDBCLUSTER' on query. Default database: ''. Query: 'COMMIT' 
    Replicate_Ignore_Server_Ids: 
      Master_Server_Id: 22 
        Master_UUID: 
      Master_Info_File: /opt/mysql/cluster/server/database/master.info 

1 row in set (0.00 sec) 

Oracle консультационная поддержка этот код ошибки, связанные с Forgein Key, чтобы мы могли иметь возможность изолированные некоторые queryes которые СЛУЧИЛОСЬ на определенное время failier.

Ниже приведена последняя вставка sql sucessfuly в главный узел и не удалось выполнить репликацию на ведомый.

### INSERT INTO `app_db`.`child_batch` 
### SET 
### @1=2080 
### @4='000062' 
### INSERT INTO `app_db`.`main_batch` 
### SET 
### @1=648518346341351432 
### @6='NPROCESS\x02\x00\x00\x00\x00A\x00\x00\x00\x00\x00\x00\x00some_status\x00_app_event\x00ent\x00\x01\x0f\x11\x0f\x11\x0f\x08\[email protected]\x00\x00\x00' 
### @7=0 

межжала вещь связана как child_batch и main_batch таблицы, оба имеют идентификатор в качестве первичного ключа и один FK для другого (InheritanceType.JOINED).

В JPA это desiged как InheritanceType.JOINED.

@Table(name = "main_batch") 
@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class MainBatch { 

    protected Long id; 
    protected Integer version; 
    private String transactionId; 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public void setVersion(Integer version) { 
     this.version = version; 
    } 

    @Version 
    public Integer getVersion() { 
     return version; 
    } 

    @Column(name = "transaction_id") 
    public String getTransactionId() { 
     return transactionId; 
    } 

    public void setTransactionId(String transactionId) { 
     this.transactionId = transactionId; 
    } 

} 

@Table(name = "child_batch", uniqueConstraints = { 
    @UniqueConstraint(columnNames = { 
       "received_file_name" 
     }) 
}) 
@Entity 
public class ChildBatch extends MainBatch { 

    private String receivedFileName; 

    @Column(name = "received_file_name") 
    public String getReceivedFileName() { 
     return receivedFileName; 
    } 

    public void setReceivedFileName(String receivedFileName) { 
     this.receivedFileName = receivedFileName; 
    } 

} 
  • Mysql Версия: 7.3.3 NDB кластер
  • OpenJPA: 2.2.2
  • Java: 1.7.0_79

Поскольку поддержка Mysql говорят, что это связано с внешним ключом, то я подозреваю, что порядок вставки в main_batch и child_batch имеет значение здесь. Потому что child_batch.id - это FK для main_batch.id. Поэтому запись main_batch должна быть доступна перед записью child_batch.

Если у кого есть какие-либо предложения или идеи, было бы весьма полезно. Спасибо заранее.

ответ