<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h3 class="title">
      <a name="mysql-cluster-what-is-new">
      </a>
      25.2.4 What is New in MySQL NDB Cluster 8.4
     </h3>
    </div>
   </div>
  </div>
  <a class="indexterm" name="idm46045124080864">
  </a>
  <a class="indexterm" name="idm46045124079792">
  </a>
  <a class="indexterm" name="idm46045124078704">
  </a>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      <a class="xref" href="mysql-cluster-what-is-new.html#mysql-cluster-what-is-new-8-4" title="What is New in NDB Cluster 8.4">
       What is New in NDB Cluster 8.4
      </a>
     </p>
    </li>
    <li class="listitem">
     <p>
      <a class="xref" href="mysql-cluster-what-is-new.html#mysql-cluster-innovation-8.x-changes" title="Changes in NDB 8.x Innovation Releases">
       Changes in NDB 8.x Innovation Releases
      </a>
     </p>
    </li>
   </ul>
  </div>
  <p>
   The following sections describe changes in the implementation of
      MySQL NDB Cluster in NDB Cluster 8.4.3, as compared to
      earlier release series. NDB Cluster 8.4 is available as a
      Development release for preview and testing of new features
      currently under development. For production, please use NDB 8.0;
      for more information, see
   <a class="ulink" href="/doc/refman/8.0/en/mysql-cluster.html" target="_top">
    MySQL NDB Cluster 8.0
   </a>
   . NDB Cluster 7.6 and
      7.5 are previous GA releases still supported in production,
      although we recommend that new deployments for production use
      MySQL NDB Cluster 8.0.
  </p>
  <p>
   NDB Cluster 7.4 and 7.3 were previous GA releases which have
      reached their end of life; they are no longer supported or
      maintained.
  </p>
  <h4>
   <a name="mysql-cluster-what-is-new-8-4">
   </a>
   What is New in NDB Cluster 8.4
  </h4>
  <p>
   Major changes and new features in NDB Cluster 8.4
      which are likely to be of interest are listed here:
  </p>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      <b>
       ndbinfo transporter_details table.
      </b>
      The
      <a class="link" href="mysql-cluster-ndbinfo-transporter-details.html" title="25.6.17.65 The ndbinfo transporter_details Table">
       <code class="literal">
        transporter_details
       </code>
      </a>
      table provides information about individual transporters
            used in an NDB cluster. It is otherwise similar to the
      <code class="literal">
       ndbinfo
      </code>
      <a class="link" href="mysql-cluster-ndbinfo-transporters.html" title="25.6.17.66 The ndbinfo transporters Table">
       <code class="literal">
        transporters
       </code>
      </a>
      table, which
            provides such information in aggregate form.
     </p>
     <p>
      NDB 8.4.0 provides additional columns as compared to the
          version introduced in NDB 8.0. These new columns, along with
          brief dscriptions of each, are listed here:
     </p>
     <div class="itemizedlist">
      <ul class="itemizedlist" style="list-style-type: circle; ">
       <li class="listitem">
        <p>
         <code class="literal">
          sendbuffer_used_bytes
         </code>
         : Number of bytes
              of signal data currently stored pending send using this
              transporter.
        </p>
       </li>
       <li class="listitem">
        <p>
         <code class="literal">
          sendbuffer_max_used_bytes
         </code>
         : Historical
              maximum number of bytes of signal data stored pending send
              using this transporter. Reset when the transporter
              connects.
        </p>
       </li>
       <li class="listitem">
        <p>
         <code class="literal">
          sendbuffer_alloc_bytes
         </code>
         : Number of bytes
              of send buffer currently allocated to store pending send
              bytes for this transporter. Send buffer memory is
              allocated in large blocks which may be sparsely used.
        </p>
       </li>
       <li class="listitem">
        <p>
         <code class="literal">
          sendbuffer_max_alloc_bytes
         </code>
         : Historical
              maximum number of bytes of send buffer allocated to store
              pending send bytes for this transporter.
        </p>
       </li>
      </ul>
     </div>
     <p>
      NDB 8.4.1 adds a
      <code class="literal">
       type
      </code>
      column, which
          displays the transport's connection type
          (
      <code class="literal">
       TCP
      </code>
      or
      <code class="literal">
       SHM
      </code>
      ).
     </p>
     <p>
      See
      <a class="xref" href="mysql-cluster-ndbinfo-transporter-details.html" title="25.6.17.65 The ndbinfo transporter_details Table">
       Section 25.6.17.65, “The ndbinfo transporter_details Table”
      </a>
      ,
          for more information.
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       NDB Replication: Filtering of unused updates.
      </b>
      Previously, when SQL nodes performing binary logging used
      <a class="link" href="replication-options-binary-log.html#sysvar_log_replica_updates">
       <code class="literal">
        log_replica_updates=OFF
       </code>
      </a>
      ,
            any replicated updates which were applied on a replica NDB
            cluster were sent on to the SQL nodes performing binary
            logging. These updates were not actually applied or used for
            any other purpose; this entailed unnecessary network traffic
            and consumption of resources.
     </p>
     <p>
      In NDB 8.4.0 and later, updates applied on the replica SQL
          node are filtered out on this node, and are no longer sent
          onward to any other SQL nodes. Updates that do not trigger any
          logging are also no longer sent by the replica.
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       Per-session binary log transaction cache sizing.
      </b>
      <code class="literal">
       NDB
      </code>
      8.4.3 adds the
      <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_log_cache_size">
       <code class="literal">
        ndb_log_cache_size
       </code>
      </a>
      server
            system variable, which makes it possible to set the size of
            the transaction cache used for writing the binary log. This
            enables use of a large cache for logging NDB transactions,
            and (using
      <a class="link" href="replication-options-binary-log.html#sysvar_binlog_cache_size">
       <code class="literal">
        binlog_cache_size
       </code>
      </a>
      ) a
            smaller cache for logging other transactions, thus making
            more efficient use of resources.
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       Ndb.cfg file deprecation.
      </b>
      Use of an
      <code class="filename">
       Ndb.cfg
      </code>
      file for setting the
            connection string for an NDB process was not well documented
            or supported. As of NDB 8.4.3, use of this file is now
            formally deprecated; you should expect support for it to be
            removed in a future release of MySQL Cluster.
     </p>
    </li>
   </ul>
  </div>
  <p>
   MySQL Cluster Manager has an advanced command-line interface that can simplify
      many complex NDB Cluster management tasks. See
   <a class="ulink" href="/doc/mysql-cluster-manager/8.4/en/" target="_top">
    MySQL Cluster Manager 8.4.3 User Manual
   </a>
   , for more information.
  </p>
  <h4>
   <a name="mysql-cluster-innovation-8.x-changes">
   </a>
   Changes in NDB 8.x Innovation Releases
  </h4>
  <p>
   New features and major changes in NDB Cluster Innovation releases
      (8.1, 8.2, 8.3) compared with NDB 8.0 which are likely to be of
      interest are listed here:
  </p>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      <b>
       TLS for cluster node communications.
      </b>
      NDB Cluster 8.3 and later provides support for network
            communications secured by Transport Layer Security (TLS) and
            Internet Public Key Infrastructure (PKI) to authenticate and
            encrypt connections between NDB nodes, and between the NDB
            management server and its clients; TLS is applied to the NDB
            Transporter Protocol, and to the NDB Management Protocol.
     </p>
     <p>
      This feature uses TLS mutual authentication, in which a
          node's own certificate file contains the chain of trust
          which the node uses to validate the certificates of its peers.
          When TLS is enabled on the cluster, data and management nodes
          use TLS to perform the following tasks:
     </p>
     <div class="itemizedlist">
      <ul class="itemizedlist" style="list-style-type: circle; ">
       <li class="listitem">
        <p>
         Mutually authenticate
         <code class="literal">
          NDB
         </code>
         clients and
              servers at the network level, preventing unprivileged
              access as a client or server
        </p>
       </li>
       <li class="listitem">
        <p>
         Encrypt data transfer, avoiding data eavesdropping,
              modification, and man-in-the-middle attacks
        </p>
       </li>
      </ul>
     </div>
     <p>
      Connections that use the MySQL client protocol employ MySQL
          user authentication, and may use TLS (including optional
          mutual TLS) as described elsewhere in this Manual; see
      <a class="xref" href="encrypted-connections.html" title="8.3 Using Encrypted Connections">
       Section 8.3, “Using Encrypted Connections”
      </a>
      , for more information.
     </p>
     <p>
      <code class="literal">
       NDB
      </code>
      implements a new tool
      <a class="link" href="mysql-cluster-programs-ndb-sign-keys.html" title="25.5.28 ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB Cluster">
       <span class="command">
        <strong>
         ndb_sign_keys
        </strong>
       </span>
      </a>
      which can be used to create
          and manage CA, certificate files, and keys. You can generate a
          set of keys and certificates for all nodes in a cluster with a
          given configuration file using
      <a class="link" href="mysql-cluster-programs-ndb-sign-keys.html" title="25.5.28 ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB Cluster">
       <span class="command">
        <strong>
         ndb_sign_keys
        </strong>
       </span>
      </a>
      <a class="link" href="mysql-cluster-programs-ndb-sign-keys.html#option_ndb_sign_keys_create-key">
       <code class="option">
        --create-key
       </code>
      </a>
      .
     </p>
     <p>
      Using
      <a class="link" href="mysql-cluster-programs-ndb-sign-keys.html" title="25.5.28 ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB Cluster">
       <span class="command">
        <strong>
         ndb_sign_keys
        </strong>
       </span>
      </a>
      , a node certificate can
          be bound to a particular hostname, made to expire on a given
          date, and be associated with a given node type, so that
          clients are distinct from servers, and management servers from
          data nodes. (Every NDB TLS certificate can be used for MGM
          client connections.) Private keys are created in place, so
          that copying of files containing private keys is minimized.
          Both private keys and certificates are labeled as either
          active or pending;
      <a class="link" href="mysql-cluster-programs-ndb-sign-keys.html" title="25.5.28 ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB Cluster">
       <span class="command">
        <strong>
         ndb_sign_keys
        </strong>
       </span>
      </a>
      also
          provides help with rotating keys to allow for pending keys to
          replace active keys before the active keys expire.
     </p>
     <p>
      Testing of node TLS connections can be done from the system
          shell using
      <a class="link" href="mysql-cluster-programs-ndb-mgm.html" title="25.5.5 ndb_mgm — The NDB Cluster Management Client">
       <span class="command">
        <strong>
         ndb_mgm
        </strong>
       </span>
      </a>
      client with
      <a class="link" href="mysql-cluster-programs-ndb-mgm.html#option_ndb_mgm_test-tls">
       <code class="option">
        --test-tls
       </code>
      </a>
      , or within the
      <a class="link" href="mysql-cluster-programs-ndb-mgm.html" title="25.5.5 ndb_mgm — The NDB Cluster Management Client">
       <span class="command">
        <strong>
         ndb_mgm
        </strong>
       </span>
      </a>
      client using the
      <a class="link" href="mysql-cluster-mgm-client-commands.html#ndbclient-tls-info">
       <code class="literal">
        TLS INFO
       </code>
      </a>
      command. You can
          obtain information about certificates used by cluster nodes by
          checking the
      <code class="literal">
       ndbinfo
      </code>
      <a class="link" href="mysql-cluster-ndbinfo-certificates.html" title="25.6.17.6 The ndbinfo certificates Table">
       <code class="literal">
        certificates
       </code>
      </a>
      table.
     </p>
     <p>
      To enforce a requirement for TLS, set the client option
      <code class="option">
       ndb-mgm-tls=strict
      </code>
      in
      <code class="filename">
       my.cnf
      </code>
      on each cluster host, then set
      <a class="link" href="mysql-cluster-mgm-definition.html#ndbparam-mgmd-requiretls">
       <code class="literal">
        RequireTls=true
       </code>
      </a>
      in the
      <code class="literal">
       [mgm default]
      </code>
      section of the cluster
      <code class="filename">
       config.ini
      </code>
      file, and set
      <a class="link" href="mysql-cluster-ndbd-definition.html#ndbparam-ndbd-requiretls">
       <code class="literal">
        RequireTls=true
       </code>
      </a>
      in the
      <code class="literal">
       [ndbd default]
      </code>
      section of the configuration
          file as well. Then perform a rolling restart of the cluster,
          restarting the management server with
      <a class="link" href="mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_reload">
       <code class="option">
        --reload
       </code>
      </a>
      <a class="link" href="mysql-cluster-programs-ndb-mgmd.html#option_ndb_mgmd_config-file">
       <code class="option">
        --config-file
       </code>
      </a>
      .
     </p>
     <p>
      Use of TLS connections is also supported in NDB Cluster API
          applications in NDB 8.3 and later. For information about MGM
          API support, see
      <a class="ulink" href="/doc/ndbapi/en/mgm-functions-tls.html" target="_top">
       TLS Functions
      </a>
      . The NDB
          API
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndb-cluster-connection.html" target="_top">
       <code class="literal">
        Ndb_cluster_connection
       </code>
      </a>
      class adds
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndb-cluster-connection.html#ndb-ndb-cluster-connection-configure-tls" target="_top">
       <code class="literal">
        configure_tls()
       </code>
      </a>
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndb-cluster-connection.html#ndb-ndb-cluster-connection-get-tls-certificate-path" target="_top">
       <code class="literal">
        get_tls_certificate_path()
       </code>
      </a>
      methods for setting up TLS connections by clients.
     </p>
     <p>
      For more information, see
      <a class="xref" href="mysql-cluster-tls.html" title="25.6.15 TLS Link Encryption for NDB Cluster">
       Section 25.6.15, “TLS Link Encryption for NDB Cluster”
      </a>
      ,
          as well as
      <a class="xref" href="mysql-cluster-programs-ndb-sign-keys.html" title="25.5.28 ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB Cluster">
       Section 25.5.28, “ndb_sign_keys — Create, Sign, and Manage TLS Keys and Certificates for NDB
        Cluster”
      </a>
      .
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       Binary log injector memory allocation.
      </b>
      In previous versions of NDB Cluster, when the
      <code class="literal">
       NDB
      </code>
      binary log injector was engaged in
            handling schema changes and tracking the state of the binary
            log, the choice of arena for allocation of memory for these
            purposes was forced by changing thread local pointers, thus
            attempting to try and catch all allocations performed during
            epoch processing. At the end of the epoch, those pointers
            were reset, arena memory was released, and the arena
            structures discarded; this released the memory, but also
            required setting it up again for the next epoch. The thread
            local pointer changes also introduced the risk of memory
            being allocated wrongly when activating functionality in
            different subsystems. MySQL NDB Cluster 8.3 makes the
            following improvements to this functionality:
     </p>
     <div class="itemizedlist">
      <ul class="itemizedlist" style="list-style-type: circle; ">
       <li class="listitem">
        <p>
         Changes to thread local pointers are removed, and replaced
              by explicit arguments to provide the arena used for
              allocation during the epoch.
        </p>
       </li>
       <li class="listitem">
        <p>
         Re-use of the arena for next epoch, thus avoiding the need
              to set it up repeatedly.
        </p>
       </li>
      </ul>
     </div>
     <p>
      These changes are internal only but should provide a
          noticeable improvememnt by saving on memory release and
          re-allocation over successive epochs.
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       NDB API primary key updates.
      </b>
      Previously, when using any other mechanism than
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndbrecord.html" target="_top">
       <code class="literal">
        NdbRecord
       </code>
      </a>
      in an attempt to
            update a primary key value, the NDB API returned error 4202
      <span class="errortext">
       Set value on tuple key attribute is not
            allowed
      </span>
      , even setting a value identical to the
            existing one. In NDB 8.1 and later, checking when performing
            updates by other means is handed off to the data nodes, as
            it was already when using
      <code class="literal">
       NdbRecord
      </code>
      to
            perform the update.
     </p>
     <p>
      This means that you can now perform primary key updates using
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndboperation.html#ndb-ndboperation-setvalue" target="_top">
       <code class="literal">
        NdbOperation::setValue()
       </code>
      </a>
      ,
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndbinterpretedcode.html#ndb-ndbinterpretedcode-write-attr" target="_top">
       <code class="literal">
        NdbInterpretedCode::write_attr()
       </code>
      </a>
      ,
          and other methods of
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndboperation.html" target="_top">
       <code class="literal">
        NdbOperation
       </code>
      </a>
      and
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndbinterpretedcode.html" target="_top">
       <code class="literal">
        NdbInterpretedCode
       </code>
      </a>
      which set
          column values (including the
      <code class="literal">
       NdbOperation
      </code>
      methods
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndboperation.html#ndb-ndboperation-incvalue" target="_top">
       <code class="literal">
        incValue()
       </code>
      </a>
      ,
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndboperation.html#ndb-ndboperation-subvalue" target="_top">
       <code class="literal">
        subValue()
       </code>
      </a>
      , the
      <code class="literal">
       NdbInterpretedCode
      </code>
      methods
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndbinterpretedcode.html#ndb-ndbinterpretedcode-add-val" target="_top">
       <code class="literal">
        add_val()
       </code>
      </a>
      ,
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndbinterpretedcode.html#ndb-ndbinterpretedcode-sub-val" target="_top">
       <code class="literal">
        sub_val()
       </code>
      </a>
      ,
          and so on). This also applies to the
      <a class="ulink" href="/doc/ndbapi/en/ndb-ndboperation.html" target="_top">
       <code class="literal">
        NdbOperation
       </code>
      </a>
      interface's
      <code class="literal">
       OperationOptions::OO_SETVALUE
      </code>
      extension.
     </p>
    </li>
    <li class="listitem">
     <p>
      <b>
       Improved warnings.
      </b>
      Made the following improvements in warning output:
     </p>
     <div class="itemizedlist">
      <ul class="itemizedlist" style="list-style-type: circle; ">
       <li class="listitem">
        <p>
         The maximum time allowed without any progress is now also
              printed in addition to local checkpoint (LCP) elapsed
              time.
        </p>
       </li>
       <li class="listitem">
        <p>
         When an LCP reaches
         <code class="literal">
          WAIT_END_LCP
         </code>
         state,
              table IDs and fragment IDs are undefined and so no longer
              relevant; for this reason, we no longer attempt to print
              them at that point.
        </p>
       </li>
       <li class="listitem">
        <p>
         Removed duplicated information printed when the maximum
              limit was reached (the same information was shown as both
              warning and crash information).
        </p>
       </li>
      </ul>
     </div>
     <p>
      In addition, we no longer print the message
      <span class="errortext">
       Validating excluded objects
      </span>
      to the SQL
          node's error log every
      <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_metadata_check_interval">
       <code class="literal">
        ndb_metadata_check_interval
       </code>
      </a>
      (default 60) seconds when
      <a class="link" href="server-system-variables.html#sysvar_log_error_verbosity">
       <code class="literal">
        log_error_verbosity
       </code>
      </a>
      is
          greater than or equal to 3 (INFO level), due ot the fact that
          such messages tended to flood the error log, making it
          difficult to examine, and using excess disk space, while not
          providing any additional benefit to the user.
     </p>
    </li>
    <li class="listitem">
     <p>
      Pushdown joins between queries featuring very large and
          possibly overlapping
      <a class="link" href="comparison-operators.html#operator_in">
       <code class="literal">
        IN()
       </code>
      </a>
      and
      <code class="literal">
       NOT IN()
      </code>
      lists are now handled in a correct
          and safe manner.
     </p>
    </li>
    <li class="listitem">
     <p>
      <code class="literal">
       ndbcluster
      </code>
      plugin log messages now use
      <code class="literal">
       SYSTEM
      </code>
      as the log level and
      <code class="literal">
       NDB
      </code>
      as the subsystem for logging. This
          means that informational messages from the
      <code class="literal">
       ndbcluster
      </code>
      plugin are always printed; their
          verbosity can be controlled by using
      <a class="link" href="mysql-cluster-options-variables.html#sysvar_ndb_extra_logging">
       <code class="option">
        --ndb_extra_logging
       </code>
      </a>
      .
     </p>
    </li>
   </ul>
  </div>
 </div>
 <br/>
</div>
