В одной из наших задач репликация 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.
Если у кого есть какие-либо предложения или идеи, было бы весьма полезно. Спасибо заранее.