In einer unserer Umgebung schlägt die Replikation von MySQL unregelmäßig fehl. Im Folgenden finden Sie die zugehörigen mysql-Serverprotokolle.MySQL Cluster FEHLER fehlgeschlagen mit Fehler 'Fehler 240 erhalten' Unbekannter Fehlercode 'von NDBCLUSTER' bei Abfrage
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 Support Beratung dieser Code Fehler im Zusammenhang mit forgein Key, und so konnten wir in der Lage zu isoliert einige queryes, die auf spezifische failier Zeit passiert.
Unten ist der letzte SQL-Eintrag erfolgreich in den Master-Knoten einzufügen und konnte nicht zum Slave repliziert werden.
### 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
Intersting was sowohl child_batch und main_batch Tabelle bezogen ist, haben beide ID als Primärschlüssel und einer ist FK für ein anderes (InheritanceType.JOINED).
In JPA wird es als InheritanceType.JOINED angezeigt.
@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 Version: NDB 7.3.3 Cluster
- OpenJPA: 2.2.2
- Java: 1.7.0_79
Da Mysql Unterstützung sagen, dass dies zu Fremdschlüssel verwandt ist, Ich vermute, dass die Reihenfolge in main_batch und child_batch hier eine Rolle spielt. Weil child_batch.id FK für main_batch.id ist. Daher sollte der main_batch-Datensatz zuerst verfügbar sein, bevor der child_batch-Datensatz eingefügt wird.
Wenn jemand einen Vorschlag oder Ideen hat, würde es sehr geschätzt werden. Vielen Dank im Voraus.