0

私たちの環境の 1 つで、mysql のレプリケーションが断続的に失敗しています。以下は、関連する mysql サーバー ログです。

    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 に関連するこのエラー コードをアドバイスしているため、特定の失敗時に発生したいくつかのクエリを分離することができました。

以下は、マスターノードへの挿入に成功し、スレーブへの複製に失敗した最後の SQL です。

### 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\x03@\x00\x00\x00'
###   @7=0

child_batch と main_batch テーブルの両方に関連する興味深い点は、どちらも主キーとして ID を持ち、一方が他方の FK (InheritanceType.JOINED) であることです。

JPA では、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 バージョン: NDB 7.3.3 クラスター
  • OpenJPA: 2.2.2
  • Java: 1.7.0_79

Mysql のサポートでは、これは Foreign key に関連していると言うので、 main_batch と child_batch の挿入順序がここで重要であると思われます。child_batch.id は main_batch.id の FK であるためです。そのため、child_batch レコードを挿入する前に、main_batch レコードを最初に使用できるようにする必要があります。

誰かに提案やアイデアがあれば、大歓迎です。前もって感謝します。

4

1 に答える 1

0

を増やしてみてmemoryくださいcluster

の場合、この種のエラーが発生しますcluster is low in memory

以下の投稿をご覧ください。

https://bugs.mysql.com/bug.php?id=73645

于 2016-05-12T05:55:12.827 に答える