<div id="docs-body">
 <div class="section">
  <div class="titlepage">
   <div>
    <div>
     <h2 class="title">
      <a name="mysql-nutshell">
      </a>
      1.4 What Is New in MySQL 8.4 since MySQL 8.0
     </h2>
    </div>
   </div>
  </div>
  <p>
   This section summarizes what has been added to, deprecated in,
      changed, and removed from MySQL 8.4 since MySQL 8.0.
      A companion section lists MySQL server options and variables that
      have been added, deprecated, or removed in MySQL 8.4;
      see
   <a class="xref" href="added-deprecated-removed.html" title="1.5 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 8.4 since 8.0">
    Section 1.5, “Server and Status Variables and Options Added, Deprecated, or Removed in
    MySQL 8.4 since 8.0”
   </a>
   .
  </p>
  <div class="itemizedlist">
   <ul class="itemizedlist" style="list-style-type: disc; ">
    <li class="listitem">
     <p>
      <a class="xref" href="mysql-nutshell.html#mysql-nutshell-additions" title="Features Added or Changed in MySQL 8.4">
       Features Added or Changed in MySQL 8.4
      </a>
     </p>
    </li>
    <li class="listitem">
     <p>
      <a class="xref" href="mysql-nutshell.html#mysql-nutshell-deprecations" title="Features Deprecated in MySQL 8.4">
       Features Deprecated in MySQL 8.4
      </a>
     </p>
    </li>
    <li class="listitem">
     <p>
      <a class="xref" href="mysql-nutshell.html#mysql-nutshell-removals" title="Features Removed in MySQL 8.4">
       Features Removed in MySQL 8.4
      </a>
     </p>
    </li>
   </ul>
  </div>
  <div class="simplesect">
   <div class="titlepage">
    <div>
     <div class="simple">
      <h3 class="title">
       <a name="mysql-nutshell-additions">
       </a>
       Features Added or Changed in MySQL 8.4
      </h3>
     </div>
    </div>
   </div>
   <a class="indexterm" name="idm46045335007952">
   </a>
   <a class="indexterm" name="idm46045335006944">
   </a>
   <p>
    The following features have been added to MySQL
        8.4:
   </p>
   <div class="itemizedlist">
    <ul class="itemizedlist" style="list-style-type: disc; ">
     <li class="listitem">
      <p>
       <b>
        MySQL native password authentication changes.
       </b>
       Beginning with MySQL 8.4.0, the deprecated
       <code class="literal">
        mysql_native_password
       </code>
       authentication
              plugin is no longer enabled by default. To enable it,
              start the server with
       <a class="link" href="server-options.html#option_mysqld_mysql-native-password">
        <code class="option">
         --mysql-native-password=ON
        </code>
       </a>
       (added in MySQL 8.4.0), or by including
       <code class="literal">
        mysql_native_password=ON
       </code>
       in the
       <code class="literal">
        [mysqld]
       </code>
       section of your MySQL
              configuration file (added in MySQL 8.4.0).
      </p>
      <p>
       For more information about enabling, using, and disabling
       <code class="literal">
        mysql_native_password
       </code>
       , see
       <a class="xref" href="native-pluggable-authentication.html" title="8.4.1.1 Native Pluggable Authentication">
        Section 8.4.1.1, “Native Pluggable Authentication”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        InnoDB system variable default value changes.
       </b>
       The default values for a number of server system variables
              relating to the
       <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
        <code class="literal">
         InnoDB
        </code>
       </a>
       storage engine were changed in MySQL 8.4.0, as shown in
              the following table:
      </p>
      <a class="indexterm" name="idm46045334995968">
      </a>
      <a class="indexterm" name="idm46045334994576">
      </a>
      <div class="table">
       <a name="mysql-nutshell-additions-innodb-defaults">
       </a>
       <p class="title">
        <b>
         Table 1.1 InnoDB system variable default values in MySQL 8.4
differing from MySQL 8.0
        </b>
       </p>
       <div class="table-contents">
        <table>
         <colgroup>
          <col width="10%"/>
          <col width="45%"/>
          <col width="45%"/>
         </colgroup>
         <thead>
          <tr>
           <th scope="col">
            InnoDB System Variable Name
           </th>
           <th scope="col">
            New Default Value (MySQL 8.4)
           </th>
           <th scope="col">
            Previous Default Value (MySQL 8.0)
           </th>
          </tr>
         </thead>
         <tbody>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_in_core_file">
             <code class="literal">
              innodb_buffer_pool_in_core_file
             </code>
            </a>
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
            if
            <code class="literal">
             MADV_DONTDUMP
            </code>
            is supported,
                  otherwise
            <code class="literal">
             ON
            </code>
           </td>
           <td>
            ON
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_instances">
             <code class="literal">
              innodb_buffer_pool_instances
             </code>
            </a>
           </td>
           <td>
            <p>
             If
             <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_size">
              <code class="literal">
               innodb_buffer_pool_size
              </code>
             </a>
             &lt;= 1 GiB, then
             <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_instances">
              <code class="literal">
               innodb_buffer_pool_instances=1
              </code>
             </a>
            </p>
            <p>
             If
             <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_size">
              <code class="literal">
               innodb_buffer_pool_size
              </code>
             </a>
             &gt; 1 GiB, then this is the minimum value from the
                    following two calculated hints in the range of 1-64:
            </p>
            <div class="itemizedlist">
             <ul class="itemizedlist" style="list-style-type: circle; ">
              <li class="listitem">
               <p>
                Buffer pool hint: Calculated as 1/2 of
                        (
                <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_size">
                 <code class="literal">
                  innodb_buffer_pool_size
                 </code>
                </a>
                /
                <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_chunk_size">
                 <code class="literal">
                  innodb_buffer_pool_chunk_size
                 </code>
                </a>
                )
               </p>
              </li>
              <li class="listitem">
               <p>
                CPU hint: Calculated as 1/4 of the number of
                        available logical processors
               </p>
              </li>
             </ul>
            </div>
           </td>
           <td>
            8 (or 1 if
            <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_size">
             <code class="literal">
              innodb_buffer_pool_size
             </code>
            </a>
            &lt;
                  1 GiB)
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_change_buffering">
             <code class="literal">
              innodb_change_buffering
             </code>
            </a>
           </td>
           <td>
            <code class="literal">
             none
            </code>
           </td>
           <td>
            <code class="literal">
             all
            </code>
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#option_mysqld_innodb-dedicated-server">
             <code class="option">
              --innodb-dedicated-server
             </code>
            </a>
           </td>
           <td>
            If
            <code class="literal">
             ON
            </code>
            <a class="footnote" href="#ftn.idm46045334959312" name="idm46045334959312">
             <sup class="footnote">
              [a]
             </sup>
            </a>
            , the value of
            <a class="link" href="innodb-parameters.html#sysvar_innodb_flush_method">
             <code class="literal">
              innodb_flush_method
             </code>
            </a>
            is
                  no longer changed as in MySQL 8.0, but the calculation
                  of
            <a class="link" href="innodb-parameters.html#sysvar_innodb_redo_log_capacity">
             <code class="literal">
              innodb_redo_log_capacity
             </code>
            </a>
            is changed from memory-based to CPU-based. For more
                  information, see
            <a class="xref" href="innodb-dedicated-server.html" title="17.8.12 Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server">
             Section 17.8.12, “Enabling Automatic InnoDB Configuration for a Dedicated MySQL Server”
            </a>
            .
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_adaptive_hash_index">
             <code class="literal">
              innodb_adaptive_hash_index
             </code>
            </a>
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
           </td>
           <td>
            <code class="literal">
             ON
            </code>
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_doublewrite_files">
             <code class="literal">
              innodb_doublewrite_files
             </code>
            </a>
           </td>
           <td>
            2
           </td>
           <td>
            <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_instances">
             <code class="literal">
              innodb_buffer_pool_instances
             </code>
            </a>
            * 2
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_doublewrite_pages">
             <code class="literal">
              innodb_doublewrite_pages
             </code>
            </a>
           </td>
           <td>
            128
           </td>
           <td>
            <a class="link" href="innodb-parameters.html#sysvar_innodb_write_io_threads">
             <code class="literal">
              innodb_write_io_threads
             </code>
            </a>
            , which meant a
                  default of 4
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_flush_method">
             <code class="literal">
              innodb_flush_method
             </code>
            </a>
            on Linux
           </td>
           <td>
            <code class="literal">
             O_DIRECT
            </code>
            if supported, otherwise
            <code class="literal">
             fsync
            </code>
           </td>
           <td>
            fsync
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_io_capacity">
             <code class="literal">
              innodb_io_capacity
             </code>
            </a>
           </td>
           <td>
            10000
           </td>
           <td>
            200
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_io_capacity_max">
             <code class="literal">
              innodb_io_capacity_max
             </code>
            </a>
           </td>
           <td>
            2 *
            <a class="link" href="innodb-parameters.html#sysvar_innodb_io_capacity">
             <code class="literal">
              innodb_io_capacity
             </code>
            </a>
           </td>
           <td>
            2 *
            <a class="link" href="innodb-parameters.html#sysvar_innodb_io_capacity">
             <code class="literal">
              innodb_io_capacity
             </code>
            </a>
            , with a minimum
                  default value of 2000
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_log_buffer_size">
             <code class="literal">
              innodb_log_buffer_size
             </code>
            </a>
           </td>
           <td>
            67108864 (64 MiB)
           </td>
           <td>
            16777216 (16 MiB)
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_numa_interleave">
             <code class="literal">
              innodb_numa_interleave
             </code>
            </a>
           </td>
           <td>
            <code class="literal">
             ON
            </code>
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_page_cleaners">
             <code class="literal">
              innodb_page_cleaners
             </code>
            </a>
           </td>
           <td>
            <a class="link" href="innodb-parameters.html#sysvar_innodb_buffer_pool_instances">
             <code class="literal">
              innodb_buffer_pool_instances
             </code>
            </a>
           </td>
           <td>
            4
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_parallel_read_threads">
             <code class="literal">
              innodb_parallel_read_threads
             </code>
            </a>
           </td>
           <td>
            available logical processors / 8, with a minimum default value of 4
           </td>
           <td>
            4
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_purge_threads">
             <code class="literal">
              innodb_purge_threads
             </code>
            </a>
           </td>
           <td>
            1 if available logical processors is &lt;= 16, otherwise 4
           </td>
           <td>
            4
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_read_io_threads">
             <code class="literal">
              innodb_read_io_threads
             </code>
            </a>
           </td>
           <td>
            available logical processors / 2, with a minimum default value of 4
           </td>
           <td>
            4
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="innodb-parameters.html#sysvar_innodb_use_fdatasync">
             <code class="literal">
              innodb_use_fdatasync
             </code>
            </a>
           </td>
           <td>
            <code class="literal">
             ON
            </code>
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="server-system-variables.html#sysvar_temptable_max_ram">
             <code class="literal">
              temptable_max_ram
             </code>
            </a>
           </td>
           <td>
            3% of total memory, with a default value within a range of 1-4 GiB
           </td>
           <td>
            1073741824 (1 GiB)
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="server-system-variables.html#sysvar_temptable_max_mmap">
             <code class="literal">
              temptable_max_mmap
             </code>
            </a>
           </td>
           <td>
            0, which means
            <code class="literal">
             OFF
            </code>
           </td>
           <td>
            1073741824 (1 GiB)
           </td>
          </tr>
          <tr>
           <td scope="row">
            <a class="link" href="server-system-variables.html#sysvar_temptable_use_mmap">
             <code class="literal">
              temptable_use_mmap
             </code>
            </a>
            <a class="footnote" href="#ftn.idm46045334883664" name="idm46045334883664">
             <sup class="footnote">
              [b]
             </sup>
            </a>
           </td>
           <td>
            <code class="literal">
             OFF
            </code>
           </td>
           <td>
            <code class="literal">
             ON
            </code>
           </td>
          </tr>
         </tbody>
        </table>
        <div class="footnotes">
         <div class="footnote" id="ftn.idm46045334959312">
          <p>
           <a class="para" href="#idm46045334959312">
            <sup class="para">
             [a]
            </sup>
           </a>
           The actual default value of this variable is
           <code class="literal">
            OFF
           </code>
           ; this is unchanged from
                      MySQL 8.0.
          </p>
         </div>
         <div class="footnote" id="ftn.idm46045334883664">
          <p>
           <a class="para" href="mysql-nutshell.html#idm46045334883664">
            <sup class="para">
             [b]
            </sup>
           </a>
           Deprecated in MySQL 8.0.26.
          </p>
         </div>
        </div>
       </div>
       <div class="table-contents">
        <table cellpadding="0" cellspacing="0" style="position: fixed; top: 0px; display: none; left: 431px; width: 771px;">
         <thead>
          <tr>
           <th scope="col" style="width: 258.891px;">
            InnoDB System Variable Name
           </th>
           <th scope="col" style="width: 276.656px;">
            New Default Value (MySQL 8.4)
           </th>
           <th scope="col" style="width: 234.516px;">
            Previous Default Value (MySQL 8.0)
           </th>
          </tr>
         </thead>
        </table>
       </div>
      </div>
      <br class="table-break"/>
     </li>
     <li class="listitem">
      <p>
       <b>
        Clone plugin.
       </b>
       The
       <a class="link" href="clone-plugin.html" title="7.6.7 The Clone Plugin">
        clone plugin
       </a>
       versioning requirement was relaxed to allow cloning
              between different point releases in the same series. In
              other words, only the major and minor version numbers must
              match when previously the point release number also had to
              match.
      </p>
      <p>
       For example, clone functionality now permits cloning 8.4.0
            to 8.4.14 and vice-versa.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        SASL-based LDAP authentication on Windows.
       </b>
       On Microsoft Windows, the server plugin for SASL-based
              LDAP authentication is now supported. This means that
              Windows clients can now use GSSAPI/Kerberos for
              authenticating with the
       <code class="literal">
        authentication_ldap_sasl_client
       </code>
       plugin.
      </p>
      <p>
       For more information, see
       <a class="xref" href="ldap-pluggable-authentication.html#ldap-pluggable-authentication-usage-sasl" title="SASL-Based LDAP Authentication (Without Proxying)">
        SASL-Based LDAP Authentication (Without Proxying)
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Replication: SOURCE_RETRY_COUNT change.
       </b>
       The default value for the
       <code class="literal">
        SOURCE_RETRY_COUNT
       </code>
       option of the
       <a class="link" href="change-replication-source-to.html" title="15.4.2.2 CHANGE REPLICATION SOURCE TO Statement">
        <code class="literal">
         CHANGE REPLICATION SOURCE
              TO
        </code>
       </a>
       statement was changed to 10. This means that,
              using the default values for this option and for
       <code class="literal">
        SOURCE_CONNECT_RETRY
       </code>
       (60), the replica
              waits 60 seconds between reconnection attempts, and keeps
              attempting to reconnect at this rate for 10 minutes before
              timing out and failing over.
      </p>
      <p>
       This change also applies to the default value of the
            deprecated
       <a class="link" href="replication-options-replica.html#option_mysqld_master-retry-count">
        <code class="option">
         --master-retry-count
        </code>
       </a>
       server
            option. (You should use
       <code class="literal">
        SOURCE_RETRY_COUNT
       </code>
       , instead.)
      </p>
      <p>
       For more information, see
       <a class="xref" href="replication-asynchronous-connection-failover-source.html" title="19.4.9.1 Asynchronous Connection Failover for Sources">
        Section 19.4.9.1, “Asynchronous Connection Failover for Sources”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Replication: tagged GTIDs.
       </b>
       The format of global transaction identifiers (GIDs) used
              in MySQL Replication and Group Replication has been
              extended to enable identification of groups of
              transactions, making it possible to assign a unique name
              to the GTIDs which belong to a specific group of
              transactions. For example, transactions containing data
              operations can easily be distinguished from those arising
              from administrative operations simply by comparing their
              GTIDs.
      </p>
      <p>
       The new GTID format is
       <code class="literal">
        UUID:
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
        :NUMBER
       </code>
       ,
            where
       <em class="replaceable">
        <code>
         TAG
        </code>
       </em>
       is a string of up to 8
            characters, which is enabled by setting the value of the
       <a class="link" href="replication-options-gtids.html#sysvar_gtid_next">
        <code class="literal">
         gtid_next
        </code>
       </a>
       system variable
            to
       <code class="literal">
        AUTOMATIC:
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
       </code>
       ,
            added in this release (see the description of the variable
            for tag format and other information). This tag persists for
            all transactions originating in the current session (unless
            changed using
       <code class="literal">
        SET gtid_next
       </code>
       ), and is
            applied at commit time for such transactions, or, when using
            Group Replication, at certification time. It is also
            possible to set
       <code class="literal">
        gtid_next
       </code>
       to
       <code class="literal">
        <em class="replaceable">
         <code>
          UUID
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          NUMBER
         </code>
        </em>
       </code>
       to set the UUID of a single transaction to an arbitrary
            value, along with assigning it a custom tag. The assignments
            of
       <code class="literal">
        UUID
       </code>
       and
       <code class="literal">
        NUMBER
       </code>
       are
            otherwise unchanged from previous MySQL releases. In either
            case, the user is responsible for making sure that the tag
            is unique to a given replication topology.
      </p>
      <p>
       The original
       <code class="literal">
        <em class="replaceable">
         <code>
          UUID
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          NUMBER
         </code>
        </em>
       </code>
       format for GTIDs continues to be supported unchanged, as
            implemented in previous versions of MySQL; changes to
            existing replication setups using GTIDs are not required.
      </p>
      <p>
       Setting
       <code class="literal">
        gtid_next
       </code>
       to
       <code class="literal">
        AUTOMATIC:
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
       </code>
       or
       <code class="literal">
        <em class="replaceable">
         <code>
          UUID
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          NUMBER
         </code>
        </em>
       </code>
       requires a new
       <a class="link" href="privileges-provided.html#priv_transaction-gtid-tag">
        <code class="literal">
         TRANSACTION_GTID_TAG
        </code>
       </a>
       privilege which is added in this release; this is true both
            on the originating server as well as for the
       <code class="literal">
        PRIVILEGE_CHECKS_APPLIER
       </code>
       for the replica
            applier thread. This also means that an administrator can
            now restrict the use of
       <code class="literal">
        SET
            @gtid_next=AUTOMATIC:
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
       </code>
       or
       <code class="literal">
        <em class="replaceable">
         <code>
          UUID
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          TAG
         </code>
        </em>
        :
        <em class="replaceable">
         <code>
          NUMBER
         </code>
        </em>
       </code>
       to a desired set of MySQL users or roles so that that only
            those users related to a given data or operational domain
            can commit new transactions with assigned tags.
      </p>
      <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
       <div class="admon-title">
        Note
       </div>
       <p>
        When upgrading from a previous version of MySQL to MySQL
              8.4, any user accounts or roles which already
              have the
        <a class="link" href="privileges-provided.html#priv_binlog-admin">
         <code class="literal">
          BINLOG_ADMIN
         </code>
        </a>
        privilege are automatically granted the
        <code class="literal">
         TRANSACTION_GTID_TAG
        </code>
        privilege.
       </p>
      </div>
      <p>
       The built-in functions
       <a class="link" href="gtid-functions.html#function_gtid-subset">
        <code class="literal">
         GTID_SUBSET()
        </code>
       </a>
       ,
       <a class="link" href="gtid-functions.html#function_gtid-subtract">
        <code class="literal">
         GTID_SUBTRACT()
        </code>
       </a>
       , and
       <a class="link" href="gtid-functions.html#function_wait-for-executed-gtid-set">
        <code class="literal">
         WAIT_FOR_EXECUTED_GTID_SET()
        </code>
       </a>
       are compatible with tagged GTIDs.
      </p>
      <p>
       For more information, see the descriptions of the
       <a class="link" href="replication-options-gtids.html#sysvar_gtid_next">
        <code class="literal">
         gtid_next
        </code>
       </a>
       system variable
            and the
       <a class="link" href="privileges-provided.html#priv_transaction-gtid-tag">
        <code class="literal">
         TRANSACTION_GTID_TAG
        </code>
       </a>
       privilege, as well as
       <a class="xref" href="replication-mode-change-online.html" title="19.1.4 Changing GTID Mode on Online Servers">
        Section 19.1.4, “Changing GTID Mode on Online Servers”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Replication: SQL_AFTER_GTIDS and MTA.
       </b>
       The
       <a class="link" href="start-replica.html" title="15.4.2.4 START REPLICA Statement">
        <code class="literal">
         START REPLICA
        </code>
       </a>
       statement
              option
       <code class="literal">
        SQL_AFTER_GTIDS
       </code>
       is now
              compatible with the multi-threaded applier. (Previously,
              when MTA was enabled and the user attempted to use this
              option, the statement raised the warning
       <a class="ulink" href="/doc/mysql-errors/8.4/en/server-error-reference.html#error_er_mta_feature_is_not_supported" target="_top">
        <code class="literal">
         ER_MTA_FEATURE_IS_NOT_SUPPORTED
        </code>
       </a>
       ,
              and the replica was switched to single-threaded mode.)
              This means that a replica which needs to catch up with
              missing transactions can now do so without losing the
              performance advantage from multithreading.
      </p>
      <p>
       For more information, see
       <a class="xref" href="start-replica.html" title="15.4.2.4 START REPLICA Statement">
        Section 15.4.2.4, “START REPLICA Statement”
       </a>
       ,
            as well as the documentation for the
       <a class="link" href="replication-options-replica.html#sysvar_replica_parallel_workers">
        <code class="literal">
         replica_parallel_workers
        </code>
       </a>
       system variable. See also
       <a class="xref" href="replication-threads-monitor-worker.html" title="19.2.3.2 Monitoring Replication Applier Worker Threads">
        Section 19.2.3.2, “Monitoring Replication Applier Worker Threads”
       </a>
       , and
       <a class="xref" href="mysql-cluster-replication-mta.html" title="25.7.11 NDB Cluster Replication Using the Multithreaded Applier">
        Section 25.7.11, “NDB Cluster Replication Using the Multithreaded Applier”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Replication terminology backwards compatibility.
       </b>
       This release adds the
       <a class="link" href="mysqldump.html#option_mysqldump_output-as-version">
        <code class="option">
         --output-as-version
        </code>
       </a>
       option for
       <a class="link" href="mysqldump.html" title="6.5.4 mysqldump — A Database Backup Program">
        <span class="command">
         <strong>
          mysqldump
         </strong>
        </span>
       </a>
       . This option
              allows you to create a dump from a MySQL 8.2 or newer
              server that is compatible with older versions of MySQL;
              its value, one of those listed here, determines the
              compatibility of replication terminology used in the dump:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="literal">
           SERVER
          </code>
          : Gets the version of the
                server and uses the latest versions of replication
                statements and variable names compatible with that MySQL
                version.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           BEFORE_8_2_0
          </code>
          : Output is compatible
                with MySQL servers running versions 8.0.23 through
                8.1.0, inclusive.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           BEFORE_8_0_23
          </code>
          : Output is compatible
                with MySQL servers running versions prior to 8.0.23.
         </p>
        </li>
       </ul>
      </div>
      <p>
       See the description of this option for more information.
      </p>
      <p>
       In addition a new value is added to those already allowed
            for the
       <a class="link" href="replication-options-replica.html#sysvar_terminology_use_previous">
        <code class="literal">
         terminology_use_previous
        </code>
       </a>
       system variable.
       <code class="literal">
        BEFORE_8_2_0
       </code>
       causes the
            server to print
       <code class="literal">
        DISABLE ON SLAVE
       </code>
       (now
            deprecated) instead of
       <code class="literal">
        DISABLE ON REPLICA
       </code>
       in the output of
       <a class="link" href="show-create-event.html" title="15.7.7.8 SHOW CREATE EVENT Statement">
        <code class="literal">
         SHOW CREATE
            EVENT
        </code>
       </a>
       . The existing value
       <code class="literal">
        BEFORE_8_0_26
       </code>
       now also has this effect in
            addition to those it already had previously.
      </p>
     </li>
     <li class="listitem">
      <p>
       The MySQL version number used in version-specific comments
            supports a major version consisting of one or two digits;
            this means that the entire version can be either five or six
            digits long. For more information about how this change
            affects handling of versioned comments in MySQL, see
       <a class="xref" href="comments.html" title="11.7 Comments">
        Section 11.7, “Comments”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        group_replication_set_as_primary() and DDL statements.
       </b>
       The
       <a class="link" href="group-replication-functions-for-new-primary.html#function_group-replication-set-as-primary">
        <code class="literal">
         group_replication_set_as_primary()
        </code>
       </a>
       function waits for ongoing DDL statements such as
       <a class="link" href="alter-table.html" title="15.1.9 ALTER TABLE Statement">
        <code class="literal">
         ALTER TABLE
        </code>
       </a>
       when waiting
              for all transactions to complete, prior to electing a new
              primary.
      </p>
      <p>
       For more information, see the description of this function.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        DDL and DCL statement tracking for group_replication_set_as_primary().
       </b>
       <a class="link" href="group-replication-functions-for-new-primary.html#function_group-replication-set-as-primary">
        <code class="literal">
         group_replication_set_as_primary()
        </code>
       </a>
       now waits for the following statements to complete before
              a new primary is elected:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <a class="link" href="alter-database.html" title="15.1.2 ALTER DATABASE Statement">
           <code class="literal">
            ALTER DATABASE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-function.html" title="15.1.4 ALTER FUNCTION Statement">
           <code class="literal">
            ALTER FUNCTION
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-instance.html" title="15.1.5 ALTER INSTANCE Statement">
           <code class="literal">
            ALTER INSTANCE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-procedure.html" title="15.1.7 ALTER PROCEDURE Statement">
           <code class="literal">
            ALTER PROCEDURE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-server.html" title="15.1.8 ALTER SERVER Statement">
           <code class="literal">
            ALTER SERVER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-tablespace.html" title="15.1.10 ALTER TABLESPACE Statement">
           <code class="literal">
            ALTER TABLESPACE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-user.html" title="15.7.1.1 ALTER USER Statement">
           <code class="literal">
            ALTER USER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="alter-view.html" title="15.1.11 ALTER VIEW Statement">
           <code class="literal">
            ALTER VIEW
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-database.html" title="15.1.12 CREATE DATABASE Statement">
           <code class="literal">
            CREATE DATABASE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-function.html" title="15.1.14 CREATE FUNCTION Statement">
           <code class="literal">
            CREATE FUNCTION
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-procedure.html" title="15.1.17 CREATE PROCEDURE and CREATE FUNCTION Statements">
           <code class="literal">
            CREATE PROCEDURE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-role.html" title="15.7.1.2 CREATE ROLE Statement">
           <code class="literal">
            CREATE ROLE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-server.html" title="15.1.18 CREATE SERVER Statement">
           <code class="literal">
            CREATE SERVER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-spatial-reference-system.html" title="15.1.19 CREATE SPATIAL REFERENCE SYSTEM Statement">
           <code class="literal">
            CREATE SPATIAL REFERENCE
                SYSTEM
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-tablespace.html" title="15.1.21 CREATE TABLESPACE Statement">
           <code class="literal">
            CREATE TABLESPACE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-trigger.html" title="15.1.22 CREATE TRIGGER Statement">
           <code class="literal">
            CREATE TRIGGER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-user.html" title="15.7.1.3 CREATE USER Statement">
           <code class="literal">
            CREATE USER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="create-view.html" title="15.1.23 CREATE VIEW Statement">
           <code class="literal">
            CREATE VIEW
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-database.html" title="15.1.24 DROP DATABASE Statement">
           <code class="literal">
            DROP DATABASE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-function.html" title="15.1.26 DROP FUNCTION Statement">
           <code class="literal">
            DROP FUNCTION
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-procedure.html" title="15.1.29 DROP PROCEDURE and DROP FUNCTION Statements">
           <code class="literal">
            DROP PROCEDURE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-role.html" title="15.7.1.4 DROP ROLE Statement">
           <code class="literal">
            DROP ROLE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-server.html" title="15.1.30 DROP SERVER Statement">
           <code class="literal">
            DROP SERVER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-spatial-reference-system.html" title="15.1.31 DROP SPATIAL REFERENCE SYSTEM Statement">
           <code class="literal">
            DROP SPATIAL REFERENCE
                SYSTEM
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-tablespace.html" title="15.1.33 DROP TABLESPACE Statement">
           <code class="literal">
            DROP TABLESPACE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-trigger.html" title="15.1.34 DROP TRIGGER Statement">
           <code class="literal">
            DROP TRIGGER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-user.html" title="15.7.1.5 DROP USER Statement">
           <code class="literal">
            DROP USER
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="drop-view.html" title="15.1.35 DROP VIEW Statement">
           <code class="literal">
            DROP VIEW
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="grant.html" title="15.7.1.6 GRANT Statement">
           <code class="literal">
            GRANT
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="rename-table.html" title="15.1.36 RENAME TABLE Statement">
           <code class="literal">
            RENAME TABLE
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="revoke.html" title="15.7.1.8 REVOKE Statement">
           <code class="literal">
            REVOKE
           </code>
          </a>
         </p>
        </li>
       </ul>
      </div>
      <p>
       These are in addition to those statements added in MySQL 8.1
            or otherwise already supported in this regard. For more
            information, including a listing of all such statements
            supported in MySQL 8.3, see the description of the
       <a class="link" href="group-replication-functions-for-new-primary.html#function_group-replication-set-as-primary">
        <code class="literal">
         group_replication_set_as_primary()
        </code>
       </a>
       function.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Group Replication version compatibility.
       </b>
       Version compatibility for servers within groups has been
              extended as follows:
      </p>
      <p>
       In-place downgrades of servers within groups are supported
            within the MySQL 8.4 LTS series. For example, a member of a
            group running MySQL 8.4.2 can be downgraded to MySQL 8.4.0.
      </p>
      <p>
       Similarly, cross-version group membership is also supported
            within the 8.4 release series. For example, a server running
            MySQL 8.4.0 can join a group all of whose members currently
            run MySQL 8.4.2, as can a server running MySQL 8.4.3.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Group Replication variable defaults.
       </b>
       The default values of two server system variables relating
              to Group Replication have been changed in MySQL 8.4:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          The default value of the
          <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_consistency">
           <code class="literal">
            group_replication_consistency
           </code>
          </a>
          system variable was changed to
          <code class="literal">
           BEFORE_ON_PRIMARY_FAILOVER
          </code>
          in MySQL
                8.4.0. (Previously, it was
          <code class="literal">
           EVENTUAL
          </code>
          .)
         </p>
        </li>
        <li class="listitem">
         <p>
          The default value of the
          <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_exit_state_action">
           <code class="literal">
            group_replication_exit_state_action
           </code>
          </a>
          system variable was changed to
          <code class="literal">
           OFFLINE_MODE
          </code>
          in MySQL 8.4.0.
                (Previously, it was
          <code class="literal">
           READ_ONLY
          </code>
          .)
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information, see
       <a class="xref" href="group-replication-configuring-consistency-guarantees.html" title="20.5.3.2 Configuring Transaction Consistency Guarantees">
        Section 20.5.3.2, “Configuring Transaction Consistency Guarantees”
       </a>
       ,
            and
       <a class="xref" href="group-replication-responses-failure.html" title="20.7.7 Responses to Failure Detection and Network Partitioning">
        Section 20.7.7, “Responses to Failure Detection and Network Partitioning”
       </a>
       ,
            as well as the descriptions of the variables listed.
      </p>
     </li>
     <li class="listitem">
      <p>
       Added a number of status variables specific to the Group
            Replication plugin that improve diagnosis and
            troubleshooting of network instabilities, providing
            statistics about network usage, control messages, and data
            messages for each group member.
      </p>
      <p>
       See
       <a class="xref" href="group-replication-status-variables.html" title="20.9.2 Group Replication Status Variables">
        Section 20.9.2, “Group Replication Status Variables”
       </a>
       ,
            for more information.
      </p>
      <p>
       As part of this work, a new
       <code class="literal">
        MEMBER_FAILURE_SUSPICIONS_COUNT
       </code>
       column
            was added to the Performance Schema
       <a class="link" href="performance-schema-replication-group-communication-information-table.html" title="29.12.11.10 The replication_group_communication_information Table">
        <code class="literal">
         replication_group_communication_information
        </code>
       </a>
       table. The contents of this column are formatted as a JSON
            array whose keys are group members ID and whose values are
            the number of times the group member has been considered
            suspect. See the description of this table for more
            information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        FLUSH_PRIVILEGES privilege.
       </b>
       A new privilege is added in MySQL 8.4.0 specifically to
              allow use of
       <a class="link" href="flush.html" title="15.7.8.3 FLUSH Statement">
        <code class="literal">
         FLUSH
              PRIVILEGES
        </code>
       </a>
       statements. Unlike the
       <a class="link" href="privileges-provided.html#priv_reload">
        <code class="literal">
         RELOAD
        </code>
       </a>
       privilege, the
       <a class="link" href="privileges-provided.html#priv_flush-privileges">
        <code class="literal">
         FLUSH_PRIVILEGES
        </code>
       </a>
       privilege
              applies only to
       <code class="literal">
        FLUSH PRIVILEGES
       </code>
       statements.
      </p>
      <p>
       In MySQL 8.4, the
       <code class="literal">
        RELOAD
       </code>
       privilege
            continues to be supported in this capacity to provide
            backwards compatibility.
      </p>
      <p>
       When upgrading, a check is performed to see whether there
            are any users having the
       <a class="link" href="privileges-provided.html#priv_flush-privileges">
        <code class="literal">
         FLUSH_PRIVILEGES
        </code>
       </a>
       privilege;
            if there are none, any users having the
       <a class="link" href="privileges-provided.html#priv_reload">
        <code class="literal">
         RELOAD
        </code>
       </a>
       privilege are
            automatically assigned the new privilege as well.
      </p>
      <p>
       If you downgrade from MySQL 8.4 (or later) to a version of
            MySQL which does not support the
       <a class="link" href="privileges-provided.html#priv_flush-privileges">
        <code class="literal">
         FLUSH_PRIVILEGES
        </code>
       </a>
       privilege, a
            user previously granted this privilege is unable to execute
       <a class="link" href="flush.html" title="15.7.8.3 FLUSH Statement">
        <code class="literal">
         FLUSH
            PRIVILEGES
        </code>
       </a>
       statements unless the user has the
       <code class="literal">
        RELOAD
       </code>
       privilege.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        OPTIMIZE_LOCAL_TABLE privilege.
       </b>
       MySQL 8.4.0 adds a new
       <a class="link" href="privileges-provided.html#priv_optimize-local-table">
        <code class="literal">
         OPTIMIZE_LOCAL_TABLE
        </code>
       </a>
       privilege. Users must have this privilege to execute
       <a class="link" href="optimize-table.html" title="15.7.3.4 OPTIMIZE TABLE Statement">
        <code class="literal">
         OPTIMIZE
              LOCAL TABLE
        </code>
       </a>
       and
       <a class="link" href="optimize-table.html" title="15.7.3.4 OPTIMIZE TABLE Statement">
        <code class="literal">
         OPTIMIZE
              NO_WRITE_TO_BINLOG TABLE
        </code>
       </a>
       statements.
      </p>
      <p>
       When upgrading from a previous release series, users having
            the
       <a class="link" href="privileges-provided.html#priv_system-user">
        <code class="literal">
         SYSTEM_USER
        </code>
       </a>
       privilege are
            automatically granted the
       <a class="link" href="privileges-provided.html#priv_optimize-local-table">
        <code class="literal">
         OPTIMIZE_LOCAL_TABLE
        </code>
       </a>
       privilege.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Enterprise Data Masking and De-Identification.
       </b>
       Data-masking components added support for specifying a
              dedicated schema to store the related internal table and
              masking functions. Previously, the
       <code class="literal">
        mysql
       </code>
       system schema provided the only
              storage option. The new
       <a class="link" href="data-masking-component-variables.html#sysvar_component_masking.masking_database">
        <code class="literal">
         component_masking.masking_database
        </code>
       </a>
       read-only variable enables setting and persisting an
              alternative schema name at server startup.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Flushing of data masking dictionaries.
       </b>
       The MySQL Enterprise Data Masking and De-Identification component now includes the ability to flush
              the data on the secondary or replica into memory. This can
              be done in either of the ways described here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          A flush can be performed by the user at any time using
                the
          <a class="link" href="data-masking-component-functions.html#function_masking-dictionaries-flush">
           <code class="literal">
            masking_dictionaries_flush()
           </code>
          </a>
          function added in this release.
         </p>
        </li>
        <li class="listitem">
         <p>
          The component can be configured to flush the memory
                periodically, leveraging the Scheduler component, by
                setting the new
          <a class="link" href="data-masking-component-variables.html#sysvar_component_masking.dictionaries_flush_interval_seconds">
           <code class="literal">
            component_masking.dictionaries_flush_interval_seconds
           </code>
          </a>
          system variable to an appropriate value.
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information, see
       <a class="xref" href="data-masking.html" title="8.5 MySQL Enterprise Data Masking and De-Identification">
        Section 8.5, “MySQL Enterprise Data Masking and De-Identification”
       </a>
       ,
            and the descriptions of these items.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Automatic histogram updates.
       </b>
       MySQL 8.4.0 adds support for automatic updates of
              histograms. When this feature is enabled for a given
              histogram, it is updated whenever
       <a class="link" href="analyze-table.html" title="15.7.3.1 ANALYZE TABLE Statement">
        <code class="literal">
         ANALYZE TABLE
        </code>
       </a>
       is run on the
              table to which it belongs. In addition, automatic
              recalculation of persistent statistics by
       <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
        <code class="literal">
         InnoDB
        </code>
       </a>
       (see
       <a class="xref" href="innodb-persistent-stats.html" title="17.8.10.1 Configuring Persistent Optimizer Statistics Parameters">
        Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”
       </a>
       ) also updates
              the histogram. Histogram updates continue to use the same
              number of buckets as they were originally specified with,
              if any.
      </p>
      <p>
       You can enable this feature when specifying the histogram by
            including the
       <code class="literal">
        AUTO UPDATE
       </code>
       option for the
       <a class="link" href="analyze-table.html" title="15.7.3.1 ANALYZE TABLE Statement">
        <code class="literal">
         ANALYZE TABLE
        </code>
       </a>
       statement. To
            disable it, include
       <code class="literal">
        MANUAL UPDATE
       </code>
       instead.
       <code class="literal">
        MANUAL UPDATE
       </code>
       (no automatic
            updates) is the default if neither option is specified.
      </p>
      <p>
       For more information, see
       <a class="xref" href="analyze-table.html#analyze-table-histogram-statistics-analysis" title="Histogram Statistics Analysis">
        Histogram Statistics Analysis
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       Added the
       <a class="link" href="server-system-variables.html#sysvar_tls_certificates_enforced_validation">
        <code class="literal">
         tls-certificates-enforced-validation
        </code>
       </a>
       system variable, which permits a DBA to enforce certificate
            validation at server startup or when using the
       <a class="link" href="alter-instance.html#alter-instance-reload-tls">
        <code class="literal">
         ALTER INSTANCE RELOAD TLS
        </code>
       </a>
       statement to reload certificates at runtime. With
            enforcement enabled, discovering an invalid certificate
            halts server invocation at startup, prevents loading invalid
            certificates at runtime, and emits warnings. For more
            information, see
       <a class="xref" href="using-encrypted-connections.html#enforce-certificate-validation" title="Configuring Certificate Validation Enforcement">
        Configuring Certificate Validation Enforcement
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       Added server system variables to control the amount of time
            MySQL accounts that connect to a MySQL server using LDAP
            pluggable authentication must wait when the LDAP server is
            down or unresponsive. The default timeout became 30 seconds
            for the following simple and SASL-based LDAP authentication
            variables:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <a class="link" href="pluggable-authentication-system-variables.html#sysvar_authentication_ldap_simple_connect_timeout">
           <code class="literal">
            authentication_ldap_simple_connect_timeout
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="pluggable-authentication-system-variables.html#sysvar_authentication_ldap_simple_response_timeout">
           <code class="literal">
            authentication_ldap_simple_response_timeout
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="pluggable-authentication-system-variables.html#sysvar_authentication_ldap_sasl_connect_timeout">
           <code class="literal">
            authentication_ldap_sasl_connect_timeout
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="pluggable-authentication-system-variables.html#sysvar_authentication_ldap_sasl_response_timeout">
           <code class="literal">
            authentication_ldap_sasl_response_timeout
           </code>
          </a>
         </p>
        </li>
       </ul>
      </div>
      <p>
       Connection and response timeouts are configurable through
            the system variables on Linux platforms only. For more
            information, see
       <a class="xref" href="ldap-pluggable-authentication.html#ldap-pluggable-authentication-timeouts" title="Setting Timeouts for LDAP Pluggable Authentication">
        Setting Timeouts for LDAP Pluggable Authentication
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       Logging of the shutdown process was enhanced, with the
            addition of startup and shutdown messages for the MySQL
            server, plugins, and components. Such messages are now also
            logged for closing connections. These additions should
            facilitate troubleshooting and debugging problems,
            particularly in the event that the server takes an
            excessively long time to shut down.
      </p>
      <p>
       For more information, see
       <a class="xref" href="error-log.html" title="7.4.2 The Error Log">
        Section 7.4.2, “The Error Log”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Additions to server startup and shutdown messages.
       </b>
       Added the following types of messages to the server
              startup and shutdown processes as noted in this list:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Start and end messages for server initialization when
                the server is started with
          <a class="link" href="server-options.html#option_mysqld_initialize">
           <code class="option">
            --initialize
           </code>
          </a>
          or
          <a class="link" href="server-options.html#option_mysqld_initialize-insecure">
           <code class="option">
            --initialize-insecure
           </code>
          </a>
          ;
                these are in addition to and distinct from those shown
                during normal server startup and shutdown.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for
          <code class="literal">
           InnoDB
          </code>
          initialization.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for init file execution during
                server initialization.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for for execution of compiled-in
                statements during server initialization.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end mesages for crash recovery during server
                startup (if crash recovery occurs).
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for initialization of dynamic
                plugins during server startup.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for compoenents initialization
                step (apparent during server startup).
         </p>
        </li>
        <li class="listitem">
         <p>
          Messages for shutdown of replica threads, as well as
                graceful and forceful shutdown of connection threads,
                during server shutdown.
         </p>
        </li>
        <li class="listitem">
         <p>
          Start and end messages for shutdown of plugins and
                components during server shutdown.
         </p>
        </li>
        <li class="listitem">
         <p>
          Exit code (return value) information with shutdown
                messages during initialization or server shutdown and
                end)
         </p>
        </li>
       </ul>
      </div>
      <p>
       In addition, if the server was built using
       <a class="link" href="source-configuration-options.html#option_cmake_with_systemd">
        <code class="option">
         WITH_SYSTEMD
        </code>
       </a>
       , the server now
            includes every
       <span class="command">
        <strong>
         systemd
        </strong>
       </span>
       message in the
            error log.
      </p>
     </li>
     <li class="listitem">
      <p>
       Added the
       <a class="link" href="show-parse-tree.html" title="15.7.7.26 SHOW PARSE_TREE Statement">
        <code class="literal">
         SHOW PARSE_TREE
        </code>
       </a>
       statement, which shows the JSON-formatted parse tree for a
       <a class="link" href="select.html" title="15.2.13 SELECT Statement">
        <code class="literal">
         SELECT
        </code>
       </a>
       statement. This
            statement is intended for testing and development use only,
            and not in production. It is available only in debug builds,
            or if MySQL was built from source using the CMake
       <a class="link" href="source-configuration-options.html#option_cmake_with_show_parse_tree">
        <code class="option">
         -DWITH_SHOW_PARSE_TREE
        </code>
       </a>
       option,
            and is not included or supported in release builds.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Thread pool plugin connection information.
       </b>
       Added thread pool connection information to the MySQL
              Performance Schema, as follows:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Added a
          <a class="link" href="performance-schema-tp-connections-table.html" title="29.12.16.1 The tp_connections Table">
           <code class="literal">
            tp_connections
           </code>
          </a>
          table, with information about each thread pool
                connection.
         </p>
        </li>
        <li class="listitem">
         <p>
          Added the following columns to the
          <a class="link" href="performance-schema-tp-thread-state-table.html" title="29.12.16.4 The tp_thread_state Table">
           <code class="literal">
            tp_thread_state
           </code>
          </a>
          table:
          <code class="literal">
           TIME_OF_ATTACH
          </code>
          ,
          <code class="literal">
           MARKED_STALLED
          </code>
          ,
          <code class="literal">
           STATE
          </code>
          ,
          <code class="literal">
           EVENT_COUNT
          </code>
          ,
          <code class="literal">
           ACCUMULATED_EVENT_TIME
          </code>
          ,
          <code class="literal">
           EXEC_COUNT
          </code>
          , and
          <code class="literal">
           ACCUMULATED_EXEC_TIME
          </code>
         </p>
        </li>
        <li class="listitem">
         <p>
          Added the following columns to the
          <a class="link" href="performance-schema-tp-thread-group-state-table.html" title="29.12.16.2 The tp_thread_group_state Table">
           <code class="literal">
            tp_thread_group_state
           </code>
          </a>
          table:
          <code class="literal">
           EFFECTIVE_MAX_TRANSACTIONS_LIMIT
          </code>
          ,
          <code class="literal">
           NUM_QUERY_THREADS
          </code>
          ,
          <code class="literal">
           TIME_OF_LAST_THREAD_CREATION
          </code>
          ,
          <code class="literal">
           NUM_CONNECT_HANDLER_THREAD_IN_SLEEP
          </code>
          ,
          <code class="literal">
           THREADS_BOUND_TO_TRANSACTION
          </code>
          ,
          <code class="literal">
           QUERY_THREADS_COUNT
          </code>
          , and
          <code class="literal">
           TIME_OF_EARLIEST_CON_EXPIRE
          </code>
          .
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information, see
       <a class="xref" href="thread-pool.html" title="7.6.3 MySQL Enterprise Thread Pool">
        Section 7.6.3, “MySQL Enterprise Thread Pool”
       </a>
       , and
       <a class="xref" href="performance-schema-thread-pool-tables.html" title="29.12.16 Performance Schema Thread Pool Tables">
        Section 29.12.16, “Performance Schema Thread Pool Tables”
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Information Schema PROCESSLIST table usage.
       </b>
       Although the
       <a class="link" href="information-schema-processlist-table.html" title="28.3.23 The INFORMATION_SCHEMA PROCESSLIST Table">
        <code class="literal">
         INFORMATION_SCHEMA.PROCESSLIST
        </code>
       </a>
       table was deprecated in MySQL 8.0.35 and 8.2.0, interest
              remains in tracking its usage. This release adds two
              system status variables providing information about
              accesses to the
       <code class="literal">
        PROCESSLIST
       </code>
       table,
              listed here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <a class="link" href="server-status-variables.html#statvar_Deprecated_use_i_s_processlist_count">
           <code class="literal">
            Deprecated_use_i_s_processlist_count
           </code>
          </a>
          provides a count of the number of references to the
          <code class="literal">
           PROCESSLIST
          </code>
          table in queries since
                the server was last started.
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="server-status-variables.html#statvar_Deprecated_use_i_s_processlist_last_timestamp">
           <code class="literal">
            Deprecated_use_i_s_processlist_last_timestamp
           </code>
          </a>
          stores the time the
          <code class="literal">
           PROCESSLIST
          </code>
          table
                was last accessed. This is a timestamp value (number of
                microseconds since the Unix Epoch).
         </p>
        </li>
       </ul>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        Hash table optimization for set operations.
       </b>
       MySQL 8.2 improves performance of statements using the set
              operations
       <a class="link" href="except.html" title="15.2.4 EXCEPT Clause">
        <code class="literal">
         EXCEPT
        </code>
       </a>
       and
       <a class="link" href="intersect.html" title="15.2.8 INTERSECT Clause">
        <code class="literal">
         INTERSECT
        </code>
       </a>
       by means of a new
              hash table optimization which is enabled automatically for
              such statements, and controlled by setting the
       <a class="link" href="switchable-optimizations.html#optflag_hash-set-operations">
        <code class="literal">
         hash_set_operations
        </code>
       </a>
       optimizer switch; to disable this optimization and cause
              the optimizer to used the old temporary table optimization
              from previous versions of MySQL, set this flag to
       <code class="literal">
        off
       </code>
       .
      </p>
      <p>
       The amount of memory allocated for this optimization can be
            controlled by setting the value of the
       <a class="link" href="server-system-variables.html#sysvar_set_operations_buffer_size">
        <code class="literal">
         set_operations_buffer_size
        </code>
       </a>
       server system variable; increasing the buffer size can
            further improve execution times of some statements using
            these operations.
      </p>
      <p>
       See
       <a class="xref" href="switchable-optimizations.html" title="10.9.2 Switchable Optimizations">
        Section 10.9.2, “Switchable Optimizations”
       </a>
       , for more
            information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        WITH_LD CMake option.
       </b>
       <code class="option">
        WITH_LD
       </code>
       : Define whether to use the llvm
              lld or mold linker, otherwise use the standard linker.
       <a class="link" href="source-configuration-options.html#option_cmake_with_ld">
        <code class="option">
         WITH_LD
        </code>
       </a>
       also replaces the
       <a class="ulink" href="/doc/refman/8.0/en/source-configuration-options.html#option_cmake_use_ld_lld" target="_top">
        <code class="option">
         USE_LD_LLD
        </code>
       </a>
       CMake option that
              was removed in MySQL 8.3.0.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Enterprise Firewall enhancements.
       </b>
       A number of enhancements were made since MySQL 8.0 to
              MySQL Enterprise Firewall. These are listed here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Stored procedures provided by MySQL Enterprise Firewall now behave in
                transactional fashion. When an error occurs during
                execution of a firewall stored procedure, an error is
                reported, and all changes made by the stored procedure
                up to that point in time are rolled back.
         </p>
        </li>
        <li class="listitem">
         <p>
          Firewall stored procedures now avoid performing
                unnecessary combinations of
          <a class="link" href="delete.html" title="15.2.2 DELETE Statement">
           <code class="literal">
            DELETE
           </code>
          </a>
          plus
          <a class="link" href="insert.html" title="15.2.7 INSERT Statement">
           <code class="literal">
            INSERT
           </code>
          </a>
          statements, as
                well as those of
          <a class="link" href="insert.html" title="15.2.7 INSERT Statement">
           <code class="literal">
            INSERT
                IGNORE
           </code>
          </a>
          plus
          <a class="link" href="update.html" title="15.2.17 UPDATE Statement">
           <code class="literal">
            UPDATE
           </code>
          </a>
          operations, thus
                consuming less time and fewer resources, making them
                faster and more efficient.
         </p>
        </li>
        <li class="listitem">
         <p>
          User-based stored procedures and UDFs, deprecated in
                MySQL 8.0.26, now raise a deprecation warning.
                Specifically calling either of
          <code class="literal">
           sp_set_firewall_mode()
          </code>
          or
          <code class="literal">
           sp_reload_firewall_rules()
          </code>
          generates
                such a warning. See
          <a class="xref" href="firewall-reference.html#firewall-stored-routines-account" title="Firewall Account Profile Stored Procedures">
           Firewall Account Profile Stored Procedures
          </a>
          , as
                well as
          <a class="xref" href="firewall-usage.html#firewall-account-profile-migration" title="Migrating Account Profiles to Group Profiles">
           Migrating Account Profiles to Group Profiles
          </a>
          ,
                for more information.
         </p>
        </li>
        <li class="listitem">
         <p>
          MySQL Enterprise Firewall now permits its memory cache to be reloaded
                periodically with data stored in the firewall tables.
                The
          <a class="link" href="firewall-reference.html#sysvar_mysql_firewall_reload_interval_seconds">
           <code class="literal">
            mysql_firewall_reload_interval_seconds
           </code>
          </a>
          system variable sets the periodic-reload schedule to use
                at runtime or it disables reloads by default. Previous
                implementations reloaded the cache only at server
                startup or when the server-side plugin was reinstalled.
         </p>
        </li>
        <li class="listitem">
         <p>
          Added the
          <a class="link" href="firewall-reference.html#sysvar_mysql_firewall_database">
           <code class="literal">
            mysql_firewall_database
           </code>
          </a>
          server system variable to enable storing internal
                tables, functions, and stored procedures in a custom
                schema.
         </p>
        </li>
        <li class="listitem">
         <p>
          Added the
          <code class="filename">
           uninstall_firewall.sql
          </code>
          script to simplify removing an installed firewall.
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information about firewall stored procedures, see
       <a class="xref" href="firewall-reference.html#firewall-stored-routines" title="MySQL Enterprise Firewall Stored Procedures">
        MySQL Enterprise Firewall Stored Procedures
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Pluggable authentication.
       </b>
       Added support for authentication to MySQL Server using
              devices such as smart cards, security keys, and biometric
              readers in a WebAuthn context. The new WebAuthn
              authentication method is based on the FIDO and FIDO2
              standards. It uses a pair of plugins,
       <code class="literal">
        authentication_webauthn
       </code>
       on the server
              side and
       <code class="literal">
        authentication_webauthn_client
       </code>
       on the client side. The server-side WebAuthn
              authentication plugin is included only in MySQL Enterprise Edition
              distributions.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Keyring migration.
       </b>
       Migration from a keyring component to a keyring plugin is
              supported. To perform such a migration, use the
       <a class="link" href="keyring-options.html#option_mysqld_keyring-migration-from-component">
        <code class="option">
         --keyring-migration-from-component
        </code>
       </a>
       server option introduced in MySQL 8.4.0, setting
       <a class="link" href="keyring-options.html#option_mysqld_keyring-migration-source">
        <code class="option">
         --keyring-migration-source
        </code>
       </a>
       to the name of the source component, and
       <a class="link" href="keyring-options.html#option_mysqld_keyring-migration-destination">
        <code class="option">
         --keyring-migration-destination
        </code>
       </a>
       the name of the target plugin.
      </p>
      <p>
       See
       <a class="xref" href="keyring-key-migration.html#keyring-key-migration-using-migration-server" title="Key Migration Using a Migration Server">
        Key Migration Using a Migration Server
       </a>
       ,
            for more information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Enterprise Audit.
       </b>
       Added the
       <code class="filename">
        audit_log_filter_uninstall.sql
       </code>
       script
              to simplify removing MySQL Enterprise Audit.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        New Keywords.
       </b>
       Keywords added in MySQL 8.4 since MySQL 8.0. Reserved
              keywords are marked with (R).
      </p>
      <p>
       <code class="literal">
        AUTO
       </code>
       ,
       <code class="literal">
        BERNOULLI
       </code>
       ,
       <code class="literal">
        GTIDS
       </code>
       ,
       <code class="literal">
        LOG
       </code>
       ,
       <code class="literal">
        MANUAL
       </code>
       (R),
       <code class="literal">
        PARALLEL
       </code>
       (R),
       <code class="literal">
        PARSE_TREE
       </code>
       ,
       <code class="literal">
        QUALIFY
       </code>
       (R),
       <code class="literal">
        S3
       </code>
       , and
       <code class="literal">
        TABLESAMPLE
       </code>
       (R).
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Preemptive group replication certification garbage collection.
       </b>
       A system variable added in MySQL 8.4.0
       <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_preemptive_garbage_collection">
        <code class="literal">
         group_replication_preemptive_garbage_collection
        </code>
       </a>
       enables preemptive garbage collection for group
              replication running in single-primary mode, keeping only
              the write sets for those transactions that have not yet
              been committed. This can save time and memory consumption.
              An additional system variable
       <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_preemptive_garbage_collection_rows_threshold">
        <code class="literal">
         group_replication_preemptive_garbage_collection_rows_threshold
        </code>
       </a>
       (also introduced in MySQL 8.4.0) sets a lower limit on the
              number of certification rows needed to trigger preemptive
              garbage collection if it is enabled; the default is
              100000.
      </p>
      <p>
       In multi-primary mode, each write set in the certification
            information is required from the moment a transaction is
            certified until it is committed on all members, which makes
            it necessary to detect conflicts between transactions. In
            single-primary mode, where we need be concerned only about
            transaction dependencies, this is not an issue; this means
            write sets need be kept only until certification is
            complete.
      </p>
      <p>
       It is not possible to change the group replication mode
            between single-primary and multi-primary when
       <code class="literal">
        group_replication_preemptive_garbage_collection
       </code>
       is enabled.
      </p>
      <p>
       See
       <a class="xref" href="mysql-gr-memory-monitoring-ps-instruments.html" title="20.7.9 Monitoring Group Replication Memory Usage with Performance Schema Memory Instrumentation">
        Section 20.7.9, “Monitoring Group Replication Memory Usage with Performance Schema Memory
      Instrumentation”
       </a>
       ,
            for help with obtaining information about memory consumed by
            this process.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Sanitized relay log recovery.
       </b>
       In MySQL 8.4.0 and later, it is possible to recover the
              relay log with any incomplete transactions removed. The
              relay log is now sanitized when the server is started with
       <a class="link" href="replication-options-replica.html#sysvar_relay_log_recovery">
        <code class="option">
         --relay-log-recovery=OFF
        </code>
       </a>
       (the default), meaning that all of the following items are
              removed:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Transactions which remain uncompleted at the end of the
                relay log
         </p>
        </li>
        <li class="listitem">
         <p>
          Relay log files containing incomplete transactions or
                parts thereof only
         </p>
        </li>
        <li class="listitem">
         <p>
          References in the relay log index file to relay log
                files which have thus been removed
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information, see the description of the
       <a class="link" href="replication-options-replica.html#sysvar_relay_log_recovery">
        <code class="literal">
         relay_log_recovery
        </code>
       </a>
       server
            system variable.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL upgrade history file.
       </b>
       As part of the installation process in MySQL 8.4.0 and
              later, a file in JSON format named
       <code class="filename">
        mysql_upgrade_history
       </code>
       is created in
              the server's data directory, or updated if it already
              exists. This file includes information about the MySQL
              server version installed, when it was installed, and
              whether the release was part of an LTS series or an
              Innovation series.
      </p>
      <p>
       A typical
       <code class="filename">
        mysql_upgrade_history
       </code>
       file
            might look something like this (formatting adjusted for
            readability):
      </p>
      <div class="copytoclipboard-wrapper">
       <pre class="programlisting language-json"><div class="docs-select-all right" id="sa42758526"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-json"><span class="token punctuation">{</span>
  <span class="token property">"file_format"</span><span class="token operator">:</span><span class="token string">"1"</span><span class="token punctuation">,</span>

  <span class="token property">"upgrade_history"</span><span class="token operator">:</span>
  <span class="token punctuation">[</span>
    <span class="token punctuation">{</span>
      <span class="token property">"date"</span><span class="token operator">:</span><span class="token string">"2024-03-15 22:02:35"</span><span class="token punctuation">,</span>
      <span class="token property">"version"</span><span class="token operator">:</span><span class="token string">"8.4.0"</span><span class="token punctuation">,</span>
      <span class="token property">"maturity"</span><span class="token operator">:</span><span class="token string">"LTS"</span><span class="token punctuation">,</span>
      <span class="token property">"initialize"</span><span class="token operator">:</span><span class="token boolean">true</span>
    <span class="token punctuation">}</span><span class="token punctuation">,</span>

    <span class="token punctuation">{</span>
      <span class="token property">"date"</span><span class="token operator">:</span><span class="token string">"2024-05-17 17:46:12"</span><span class="token punctuation">,</span>
      <span class="token property">"version"</span><span class="token operator">:</span><span class="token string">"8.4.1"</span><span class="token punctuation">,</span>
      <span class="token property">"maturity"</span><span class="token operator">:</span><span class="token string">"LTS"</span><span class="token punctuation">,</span>
      <span class="token property">"initialize"</span><span class="token operator">:</span><span class="token boolean">false</span>
    <span class="token punctuation">}</span>
  <span class="token punctuation">]</span>

<span class="token punctuation">}</span></code></pre>
      </div>
      <p>
       In addition, the installation process now checks for the
            presence of a
       <code class="filename">
        mysql_upgrade_info
       </code>
       file
            (deprecated in MySQL 8.0, and is no longer used). If found,
            the file is removed.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        mysql client --system-command option.
       </b>
       The
       <a class="link" href="mysql-command-options.html#option_mysql_system-command">
        <code class="option">
         --system-command
        </code>
       </a>
       option
              for the
       <a class="link" href="mysql.html" title="6.5.1 mysql — The MySQL Command-Line Client">
        <span class="command">
         <strong>
          mysql
         </strong>
        </span>
       </a>
       client, available in
              MySQL 8.4.3 and later, enables or disables the
       <code class="literal">
        system
       </code>
       command.
      </p>
      <p>
       This option is enabled by default. To disable it, use
       <a class="link" href="mysql-command-options.html#option_mysql_system-command">
        <code class="option">
         --system-command=OFF
        </code>
       </a>
       or
       <a class="link" href="mysql-command-options.html#option_mysql_skip-system-command">
        <code class="option">
         --skip-system-command
        </code>
       </a>
       , which
            causes the
       <code class="literal">
        system
       </code>
       command to be rejected
            with an error.
      </p>
     </li>
    </ul>
   </div>
  </div>
  <div class="simplesect">
   <div class="titlepage">
    <div>
     <div class="simple">
      <h3 class="title">
       <a name="mysql-nutshell-deprecations">
       </a>
       Features Deprecated in MySQL 8.4
      </h3>
     </div>
    </div>
   </div>
   <a class="indexterm" name="idm46045334554448">
   </a>
   <a class="indexterm" name="idm46045334553440">
   </a>
   <p>
    The following features are deprecated in MySQL 8.4
        and may be removed in a future series. Where alternatives are
        shown, applications should be updated to use them.
   </p>
   <p>
    For applications that use features deprecated in MySQL
        8.4 that have been removed in a later MySQL
        version, statements may fail when replicated from a MySQL
        8.4 source to a replica running a later version, or
        may have different effects on source and replica. To avoid such
        problems, applications that use features deprecated in
        8.4 should be revised to avoid them and use
        alternatives when possible.
   </p>
   <div class="itemizedlist">
    <ul class="itemizedlist" style="list-style-type: disc; ">
     <li class="listitem">
      <p>
       <b>
        group_replication_allow_local_lower_version_join system variable.
       </b>
       The
       <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_allow_local_lower_version_join">
        <code class="literal">
         group_replication_allow_local_lower_version_join
        </code>
       </a>
       system variable is deprecated, and setting it causes a
              warning
              (
       <a class="ulink" href="/doc/mysql-errors/8.4/en/server-error-reference.html#error_er_warn_deprecated_syntax_no_replacement" target="_top">
        <code class="literal">
         ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT
        </code>
       </a>
       )
              to be logged.
      </p>
      <p>
       You should expect this variable to be removed in a future
            version of MySQL. Since the functionality enabled by setting
       <code class="literal">
        group_replication_allow_local_lower_version_join
       </code>
       is no longer useful, no replacement for it is planned.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Group Replication recovery metadata.
       </b>
       Group Replication recovery no longer depends on writing of
              view change events to the binary log to mark changes in
              group membership; instead, when all members of a group are
              MySQL version 8.3.0 or later, members share compressed
              recovery metadata, and no such event is logged (or
              assigned a GTID) when a new member joins the group.
      </p>
      <p>
       Recovery metadata includes the GCS view ID,
       <code class="literal">
        GTID_SET
       </code>
       of certified transactions, and
            certification information, as well as a list of online
            members.
      </p>
      <p>
       Since
       <code class="literal">
        View_change_log_event
       </code>
       no longer
            plays a role in recovery, the
       <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_view_change_uuid">
        <code class="literal">
         group_replication_view_change_uuid
        </code>
       </a>
       system variable is no longer needed, and so is now
            deprecated; expect its removal in a future MySQL release.
            You should be aware that no replacement or alternative for
            this variable or its functionality is planned, and develop
            your applications accordingly.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() function.
       </b>
       The
       <code class="literal">
        WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
       </code>
       SQL function was deprecated in MySQL 8.0, and is no longer
              supported as of MySQL 8.2. Attempting to invoke this
              function now causes a syntax error.
      </p>
      <p>
       Instead of
       <code class="literal">
        WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
       </code>
       , it
            is recommended that you use
       <a class="link" href="gtid-functions.html#function_wait-for-executed-gtid-set">
        <code class="literal">
         WAIT_FOR_EXECUTED_GTID_SET()
        </code>
       </a>
       ,
            which allows you to wait for specific GTIDS. This works
            regardless of the replication channel or the user client
            through which the specified transactions arrive on the
            server.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        GTID-based replication and IGNORE_SERVER_IDS.
       </b>
       When global transaction identifiers (GTIDs) are used for
              replication, transactions that have already been applied
              are automatically ignored. This means that
       <a class="link" href="change-replication-source-to.html#crs-opt-ignore_server_ids">
        <code class="literal">
         IGNORE_SERVER_IDS
        </code>
       </a>
       is not
              compatible with GTID mode. If
       <a class="link" href="replication-options-gtids.html#sysvar_gtid_mode">
        <code class="literal">
         gtid_mode
        </code>
       </a>
       is
       <code class="literal">
        ON
       </code>
       ,
       <a class="link" href="change-replication-source-to.html" title="15.4.2.2 CHANGE REPLICATION SOURCE TO Statement">
        <code class="literal">
         CHANGE
              REPLICATION SOURCE TO
        </code>
       </a>
       with a non-empty
       <code class="literal">
        IGNORE_SERVER_IDS
       </code>
       list is rejected with
              an error. Likewise, if any existing replication channel
              was created with a list of server IDs to be ignored,
       <code class="literal">
        SET gtid_mode=ON
       </code>
       is also rejected.
              Before starting GTID-based replication, check for and
              clear any ignored server ID lists on the servers involved;
              you can do this by checking the output from
       <a class="link" href="show-replica-status.html" title="15.7.7.35 SHOW REPLICA STATUS Statement">
        <code class="literal">
         SHOW REPLICA STATUS
        </code>
       </a>
       . In
              such cases, you can clear the list by issuing
       <code class="literal">
        CHANGE REPLICATION SOURCE TO
       </code>
       with an
              empty list of server IDs, as shown here:
      </p>
      <div class="copytoclipboard-wrapper">
       <pre class="programlisting one-line language-sql"><div class="docs-select-all right" id="sa656443"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">CHANGE</span> <span class="token keyword">REPLICATION</span> <span class="token keyword">SOURCE</span> <span class="token keyword">TO</span> <span class="token keyword">IGNORE_SERVER_IDS</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
      </div>
      <p>
       See
       <a class="xref" href="replication-gtids-restrictions.html" title="19.1.3.7 Restrictions on Replication with GTIDs">
        Section 19.1.3.7, “Restrictions on Replication with GTIDs”
       </a>
       , for
            more information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Binary log transaction dependency tracking and logging format.
       </b>
       Using writeset information for conflict detection has been
              found to cause issues with dependency tracking; for this
              reason, we now limit the usage of writesets for conflict
              checks to when row-based logging is in effect.
      </p>
      <p>
       This means that, in such cases,
       <a class="link" href="replication-options-binary-log.html#sysvar_binlog_format">
        <code class="literal">
         binlog_format
        </code>
       </a>
       must be
       <code class="literal">
        ROW
       </code>
       , and
       <code class="literal">
        MIXED
       </code>
       is no
            longer supported.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        expire_logs_days system variable.
       </b>
       The
       <code class="literal">
        expire_logs_days
       </code>
       server system
              variable, deprecated in MySQL 8.0, has been removed.
              Attempting to get or set this variable at runtime, or to
              start
       <a class="link" href="mysqld.html" title="6.3.1 mysqld — The MySQL Server">
        <span class="command">
         <strong>
          mysqld
         </strong>
        </span>
       </a>
       with the equivalent option
              (
       <code class="option">
        --expire-logs-days
       </code>
       ), now results in an
              error.
      </p>
      <p>
       In place of
       <code class="literal">
        expire_logs_days
       </code>
       , use
       <a class="link" href="replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds">
        <code class="literal">
         binlog_expire_logs_seconds
        </code>
       </a>
       ,
            which allows you to specify expiration periods other than
            (only) in an integral number of days.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Wildcard characters in database grants.
       </b>
       The use of the characters
       <code class="literal">
        %
       </code>
       and
       <code class="literal">
        _
       </code>
       as wildcards in database grants was
              deprecated in MySQL 8.2.0. You should expect for the
              wildcard functionality to removed in a future MySQL
              release and for these characters always to be treated as
              literals, as they are already whenever the value of the
       <a class="link" href="server-system-variables.html#sysvar_partial_revokes">
        <code class="literal">
         partial_revokes
        </code>
       </a>
       server
              system variable is
       <code class="literal">
        ON
       </code>
       .
      </p>
      <p>
       In addition, the treatment of
       <code class="literal">
        %
       </code>
       by the
            server as a synonym for
       <code class="literal">
        localhost
       </code>
       when
            checking privileges is now also deprecated as of MySQL 8.2.0
            and thus subject to removal in a future version of MySQL.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        --character-set-client-handshake option.
       </b>
       The
       <a class="ulink" href="/doc/refman/8.0/en/server-options.html#option_mysqld_character-set-client-handshake" target="_top">
        <code class="option">
         --character-set-client-handshake
        </code>
       </a>
       server option, originally intended for use with upgrades
              from very old versions of MySQL, is now deprecated and a
              warning is issued whenever it is used. You should expect
              this option to be removed in a future version of MySQL;
              applications depending on this option should begin
              migration away from it as soon as possible.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Nonstandard foreign keys.
       </b>
       The use of non-unique or partial keys as foreign keys is
              nonstandard, and is deprecated in MySQL. Beginning with
              MySQL 8.4.0, you must explicitly enable such keys by
              setting
       <a class="link" href="server-system-variables.html#sysvar_restrict_fk_on_non_standard_key">
        <code class="literal">
         restrict_fk_on_non_standard_key
        </code>
       </a>
       to
       <code class="literal">
        OFF
       </code>
       , or by starting the server with
       <code class="option">
        --skip-restrict-fk-on-non-standard-key
       </code>
       .
      </p>
      <p>
       <code class="literal">
        restrict_fk_on_non_standard_key
       </code>
       is
       <code class="literal">
        ON
       </code>
       by default, which means that trying to
            use a nonstandard key as a foreign key in a
       <code class="literal">
        CREATE
            TABLE
       </code>
       or other SQL statement is rejected with
       <a class="ulink" href="/doc/mysql-errors/8.4/en/server-error-reference.html#error_er_warn_deprecated_non_standard_key" target="_top">
        <code class="literal">
         ER_WARN_DEPRECATED_NON_STANDARD_KEY
        </code>
       </a>
       .
            Setting it to
       <code class="literal">
        ON
       </code>
       allows such statements
            to run, but they raise the same error as a warning.
      </p>
      <p>
       Upgrades from MySQL 8.0 are supported even if there are
            tables containing foreign keys referring to non-unique or
            partial keys. In such cases, the server writes a list of
            warning messages containing the names of any foreign keys
            which refer to nonstandard keys.
      </p>
     </li>
    </ul>
   </div>
  </div>
  <div class="simplesect">
   <div class="titlepage">
    <div>
     <div class="simple">
      <h3 class="title">
       <a name="mysql-nutshell-removals">
       </a>
       Features Removed in MySQL 8.4
      </h3>
     </div>
    </div>
   </div>
   <a class="indexterm" name="idm46045334494800">
   </a>
   <a class="indexterm" name="idm46045334493792">
   </a>
   <p>
    The following items are obsolete and have been removed in MySQL
        8.4. Where alternatives are shown, applications
        should be updated to use them.
   </p>
   <p>
    For MySQL 8.3 applications that use features
        removed in MySQL 8.4, statements may fail when
        replicated from a MySQL 8.3 source to a MySQL
        8.4 replica, or may have different effects on
        source and replica. To avoid such problems, applications that
        use features removed in MySQL 8.4 should be revised
        to avoid them and use alternatives when possible.
   </p>
   <div class="itemizedlist">
    <ul class="itemizedlist" style="list-style-type: disc; ">
     <li class="listitem">
      <p>
       <b>
        Server options and variables removed.
       </b>
       A number of server options and variables supported in
              previous versions of MySQL have been removed in MySQL 8.4.
              Attempting to set any of them in MySQL 8.4 raises an
              error. These options and variables are listed here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="literal">
           binlog_transaction_dependency_tracking
          </code>
          :
                Deprecated in MySQL 8.0.35 and MySQL 8.2.0. There are no
                plans to replace this variable or its functionality,
                which has been made internal to the server. In MySQL 8.4
                (and later), when multithreaded replicas are in use, the
                source
          <a class="link" href="mysqld.html" title="6.3.1 mysqld — The MySQL Server">
           <span class="command">
            <strong>
             mysqld
            </strong>
           </span>
          </a>
          uses always writesets
                to generate dependency information for the binary log;
                this has the same effect as setting
          <code class="literal">
           binlog_transaction_dependency_tracking
          </code>
          to
          <code class="literal">
           WRITESET
          </code>
          in previous versions of
                MySQL.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           group_replication_recovery_complete_at
          </code>
          :
                Deprecated in MySQL 8.0.34. In MySQL 8.4 and later, the
                policy applied during the distributed recovery process
                is always to mark a new member online only after it has
                received, certified, and applied all transactions that
                took place before it joined the group; this is
                equivalent to setting
          <code class="literal">
           group_replication_recovery_complete_at
          </code>
          to
          <code class="literal">
           TRANSACTIONS_APPLIED
          </code>
          in previous
                versions of MySQL.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           avoid_temporal_upgrade
          </code>
          and
          <code class="literal">
           show_old_temporals
          </code>
          : Both of these
                variables were deprecated in MySQL 5.6; neither of them
                had any effect in recent versions of MySQL. Both
                variables have been removed; there are no plans to
                replace either of them.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="option">
           --no-dd-upgrade
          </code>
          : Deprecated in MySQL
                8.0.16, now removed. Use
          <a class="link" href="server-options.html#option_mysqld_upgrade">
           <code class="option">
            --upgrade=NONE
           </code>
          </a>
          instead.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="option">
           --old
          </code>
          and
          <code class="option">
           --new
          </code>
          : Both
                deprecated in MySQL 8.0.35 and MySQL 8.2.0, and now
                removed.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="option">
           --language
          </code>
          : Deprecated in MySQL 5.5,
                and now removed.
         </p>
        </li>
        <li class="listitem">
         <p>
          The
          <code class="option">
           --ssl
          </code>
          and
          <code class="option">
           --admin-ssl
          </code>
          server options, as well as
                the
          <code class="literal">
           have_ssl
          </code>
          and
          <code class="literal">
           have_openssl
          </code>
          server system variables,
                were deprecated in MySQL 8.0.26. They are all removed in
                this release. Use
          <a class="link" href="server-system-variables.html#sysvar_tls_version">
           <code class="option">
            --tls-version
           </code>
          </a>
          and
          <a class="link" href="server-system-variables.html#sysvar_admin_tls_version">
           <code class="option">
            --admin-tls-version
           </code>
          </a>
          instead.
         </p>
        </li>
        <li class="listitem">
         <p>
          The
          <code class="literal">
           default_authentication_plugin
          </code>
          system variable, deprecated in MySQL 8.0.27, is removed
                as of MySQL 8.4.0. Use
          <a class="link" href="server-system-variables.html#sysvar_authentication_policy">
           <code class="literal">
            authentication_policy
           </code>
          </a>
          instead.
         </p>
         <p>
          As part of the removal of
          <code class="literal">
           default_authentication_plugin
          </code>
          , the
                syntax for
          <code class="literal">
           authentication_policy
          </code>
          has
                been changed. See the description of
          <a class="link" href="server-system-variables.html#sysvar_authentication_policy">
           <code class="literal">
            authentication_policy
           </code>
          </a>
          for more information.
         </p>
        </li>
        <li class="listitem">
         <p>
          <b>
           --skip-host-cache server option.
          </b>
          This option has been removed; start the server with
          <a class="link" href="server-system-variables.html#sysvar_host_cache_size">
           <code class="option">
            --host-cache-size=0
           </code>
          </a>
          instead. See
          <a class="xref" href="host-cache.html" title="7.1.12.3 DNS Lookups and the Host Cache">
           Section 7.1.12.3, “DNS Lookups and the Host Cache”
          </a>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <b>
           --innodb and --skip-innodb server options.
          </b>
          These options have been removed. The
          <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
           <code class="literal">
            InnoDB
           </code>
          </a>
          storage engine is
                  always enabled, and it is not possible to disable it.
         </p>
        </li>
        <li class="listitem">
         <p>
          <b>
           --character-set-client-handshake and --old-style-user-limits server
                  options.
          </b>
          These options were formerly used for compatibility
                  with very old versions of MySQL which are no longer
                  supported or maintained, and thus no longer serve any
                  useful purpose.
         </p>
        </li>
        <li class="listitem">
         <p>
          <b>
           FLUSH HOSTS statement.
          </b>
          The
          <code class="literal">
           FLUSH HOSTS
          </code>
          statement,
                  deprecated in MySQL 8.0.23, has been removed. To clear
                  the host cache, issue
          <a class="link" href="truncate-table.html" title="15.1.37 TRUNCATE TABLE Statement">
           <code class="literal">
            TRUNCATE
                  TABLE
           </code>
          </a>
          <a class="link" href="performance-schema-host-cache-table.html" title="29.12.22.3 The host_cache Table">
           <code class="literal">
            performance_schema.host_cache
           </code>
          </a>
          or
          <a class="link" href="mysqladmin.html" title="6.5.2 mysqladmin — A MySQL Server Administration Program">
           <span class="command">
            <strong>
             mysqladmin flush-hosts
            </strong>
           </span>
          </a>
          .
         </p>
        </li>
       </ul>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        Obsolete replication options and variables.
       </b>
       A number of options and variables relating to MySQL
              Replication were deprecated in previous versions of MySQL,
              and have been removed from MySQL 8.4.
              Attempting to use any of these now causes the server to
              raise a syntax error. These options and variables are
              listed here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="option">
           --slave-rows-search-algorithms
          </code>
          : The
                algorithm used by the replication applier to look up
                table rows when applying updates or deletes is now
                always
          <code class="literal">
           HASH_SCAN,INDEX_SCAN
          </code>
          , and is
                no longer configurable by the user.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           log_bin_use_v1_events
          </code>
          : This allowed
                source servers running MySQL 5.7 and newer to replicate
                to earlier versions of MySQL which are no longer
                supported or maintained.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="option">
           --relay-log-info-file
          </code>
          ,
          <code class="option">
           --relay-log-info-repository
          </code>
          ,
          <code class="option">
           --master-info-file
          </code>
          ,
          <code class="option">
           --master-info-repository
          </code>
          : The use of
                files for the applier metadata repository and the
                connection metadata repository has been superseded by
                crash-safe tables, and is no longer supported. See
          <a class="xref" href="replica-logs-status.html" title="19.2.4.2 Replication Metadata Repositories">
           Section 19.2.4.2, “Replication Metadata Repositories”
          </a>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           transaction_write_set_extraction
          </code>
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           group_replication_ip_whitelist
          </code>
          : Use
          <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_ip_allowlist">
           <code class="literal">
            group_replication_ip_allowlist
           </code>
          </a>
          instead.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           group_replication_primary_member
          </code>
          : No
                longer needed; check the
          <code class="literal">
           MEMBER_ROLE
          </code>
          column of the Performance Schema
          <a class="link" href="performance-schema-replication-group-members-table.html" title="29.12.11.16 The replication_group_members Table">
           <code class="literal">
            replication_group_members
           </code>
          </a>
          table instead.
         </p>
        </li>
       </ul>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        Replication SQL syntax.
       </b>
       A number of SQL statements used in MySQL Replication which
              were deprecated in earlier versions of MySQL are no longer
              supported in MySQL 8.4. Attempting to use any of these
              statements now produces a syntax error. These statements
              can be divided into two groups those relating to source
              servers, and those referring to replicas, as shown here:
      </p>
      <p>
       As part of this work, the
       <code class="literal">
        DISABLE ON
            SLAVE
       </code>
       option for
       <a class="link" href="create-event.html" title="15.1.13 CREATE EVENT Statement">
        <code class="literal">
         CREATE
            EVENT
        </code>
       </a>
       and
       <a class="link" href="alter-event.html" title="15.1.3 ALTER EVENT Statement">
        <code class="literal">
         ALTER
            EVENT
        </code>
       </a>
       is now deprecated, and is superseded by
       <code class="literal">
        DISABLE ON REPLICA
       </code>
       . The corresponding
            term
       <code class="literal">
        SLAVESIDE_DISABLED
       </code>
       is also now
            deprecated,and no longer used in event descriptions such as
            in the Information Schema
       <a class="link" href="information-schema-events-table.html" title="28.3.14 The INFORMATION_SCHEMA EVENTS Table">
        <code class="literal">
         EVENTS
        </code>
       </a>
       table;
       <code class="literal">
        REPLICA_SIDE_DISABLED
       </code>
       is now shown
            instead.
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Statements which have been removed, which relate to
                replication source servers, are listed here:
         </p>
         <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: square; ">
           <li class="listitem">
            <p>
             <code class="literal">
              CHANGE MASTER TO
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html" title="15.4.2.2 CHANGE REPLICATION SOURCE TO Statement">
              <code class="literal">
               CHANGE REPLICATION SOURCE
                    TO
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              RESET MASTER
             </code>
             : Use
             <a class="link" href="reset-binary-logs-and-gtids.html" title="15.4.1.2 RESET BINARY LOGS AND GTIDS Statement">
              <code class="literal">
               RESET BINARY LOGS AND
                    GTIDS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              SHOW MASTER STATUS
             </code>
             : Use
             <a class="link" href="show-binary-log-status.html" title="15.7.7.1 SHOW BINARY LOG STATUS Statement">
              <code class="literal">
               SHOW BINARY LOG
                    STATUS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              PURGE MASTER LOGS
             </code>
             : Use
             <a class="link" href="purge-binary-logs.html" title="15.4.1.1 PURGE BINARY LOGS Statement">
              <code class="literal">
               PURGE BINARY LOGS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              SHOW MASTER LOGS
             </code>
             : Use
             <a class="link" href="show-binary-logs.html" title="15.7.7.2 SHOW BINARY LOGS Statement">
              <code class="literal">
               SHOW BINARY LOGS
              </code>
             </a>
             .
            </p>
           </li>
          </ul>
         </div>
        </li>
        <li class="listitem">
         <p>
          Removed SQL statements relating to replicas are listed
                here:
         </p>
         <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: square; ">
           <li class="listitem">
            <p>
             <code class="literal">
              START SLAVE
             </code>
             : Use
             <a class="link" href="start-replica.html" title="15.4.2.4 START REPLICA Statement">
              <code class="literal">
               START REPLICA
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              STOP SLAVE
             </code>
             : Use
             <a class="link" href="stop-replica.html" title="15.4.2.5 STOP REPLICA Statement">
              <code class="literal">
               STOP REPLICA
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              SHOW SLAVE STATUS
             </code>
             : Use
             <a class="link" href="show-replica-status.html" title="15.7.7.35 SHOW REPLICA STATUS Statement">
              <code class="literal">
               SHOW REPLICA STATUS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              SHOW SLAVE HOSTS
             </code>
             : Use
             <a class="link" href="show-replicas.html" title="15.7.7.36 SHOW REPLICAS Statement">
              <code class="literal">
               SHOW REPLICAS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              RESET SLAVE
             </code>
             : Use
             <a class="link" href="reset-replica.html" title="15.4.2.3 RESET REPLICA Statement">
              <code class="literal">
               RESET REPLICA
              </code>
             </a>
             .
            </p>
           </li>
          </ul>
         </div>
        </li>
       </ul>
      </div>
      <p>
       All of the statements listed previously were removed from
            MySQL test programs and files, as well as from any other
            internal use.
      </p>
      <p>
       In addition, a number of deprecated options formerly
            supported by
       <a class="link" href="change-replication-source-to.html" title="15.4.2.2 CHANGE REPLICATION SOURCE TO Statement">
        <code class="literal">
         CHANGE REPLICATION SOURCE
            TO
        </code>
       </a>
       and
       <a class="link" href="start-replica.html" title="15.4.2.4 START REPLICA Statement">
        <code class="literal">
         START
            REPLICA
        </code>
       </a>
       have been removed and are no longer
            accepted by the server. The removed options for each of
            these SQL statements are listed next.
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Options removed from
          <code class="literal">
           CHANGE REPLICATION SOURCE
                TO
          </code>
          are listed here:
         </p>
         <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: square; ">
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_AUTO_POSITION
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_auto_position">
              <code class="literal">
               SOURCE_AUTO_POSITION
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_HOST
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_host">
              <code class="literal">
               SOURCE_HOST
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_BIND
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_bind">
              <code class="literal">
               SOURCE_BIND
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_UseR
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_user">
              <code class="literal">
               SOURCE_UseR
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_PASSWORD
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_password">
              <code class="literal">
               SOURCE_PASSWORD
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_PORT
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_port">
              <code class="literal">
               SOURCE_PORT
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_CONNECT_RETRY
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_connect_retry">
              <code class="literal">
               SOURCE_CONNECT_RETRY
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_RETRY_COUNT
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_retry_count">
              <code class="literal">
               SOURCE_RETRY_COUNT
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_DELAY
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_delay">
              <code class="literal">
               SOURCE_DELAY
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl">
              <code class="literal">
               SOURCE_SSL
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CA
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CA
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CAPATH
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CAPATH
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CIPHER
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CIPHER
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CRL
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CRL
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CRLPATH
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CRLPATH
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_KEY
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_KEY
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_VERIFY_SERVER_CERT
             </code>
             :
                    Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_VERIFY_SERVER_CERT
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_TLS_VERSION
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_TLS_VERSION
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_TLS_CIPHERSUITES
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_TLS_CIPHERSUITES
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_SSL_CERT
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_ssl_xxx">
              <code class="literal">
               SOURCE_SSL_CERT
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_PUBLIC_KEY_PATH
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_public_key_path">
              <code class="literal">
               SOURCE_PUBLIC_KEY_PATH
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              GET_MASTER_PUBLIC_KEY
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-get_source_public_key">
              <code class="literal">
               GET_SOURCE_PUBLIC_KEY
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_HEARTBEAT_PERIOD
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_heartbeat_period">
              <code class="literal">
               SOURCE_HEARTBEAT_PERIOD
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_COMPRESSION_ALGORITHMS
             </code>
             :
                    Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_compression_algorithms">
              <code class="literal">
               SOURCE_COMPRESSION_ALGORITHMS
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_ZSTD_COMPRESSION_LEVEL
             </code>
             :
                    Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_zstd_compression_level">
              <code class="literal">
               SOURCE_ZSTD_COMPRESSION_LEVEL
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_LOG_FILE
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_log_file">
              <code class="literal">
               SOURCE_LOG_FILE
              </code>
             </a>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_LOG_POS
             </code>
             : Use
             <a class="link" href="change-replication-source-to.html#crs-opt-source_log_file">
              <code class="literal">
               SOURCE_LOG_POS
              </code>
             </a>
             .
            </p>
           </li>
          </ul>
         </div>
        </li>
        <li class="listitem">
         <p>
          Options removed from the
          <code class="literal">
           START
                REPLICA
          </code>
          statement are listed here:
         </p>
         <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: square; ">
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_LOG_FILE
             </code>
             : Use
             <code class="literal">
              SOURCE_LOG_FILE
             </code>
             .
            </p>
           </li>
           <li class="listitem">
            <p>
             <code class="literal">
              MASTER_LOG_POS
             </code>
             : Use
             <code class="literal">
              SOURCE_LOG_POS
             </code>
             .
            </p>
           </li>
          </ul>
         </div>
        </li>
        <li class="listitem">
         <p>
          <b>
           System variables and NULL.
          </b>
          It is not intended or supported for a MySQL server
                  startup option to be set to NULL
                  (
          <code class="option">
           --my-option=NULL
          </code>
          ) and have it
                  interpreted by the server as SQL
          <code class="literal">
           NULL
          </code>
          , and should not be possible.
                  MySQL 8.1 (and later) specifically disallows setting
                  startup options to
          <code class="literal">
           NULL
          </code>
          in this
                  fashion, and rejects an attempt to do with an error.
                  Attempts to set the corresponding server system
                  variables to
          <code class="literal">
           NULL
          </code>
          using
          <a class="link" href="set-variable.html" title="15.7.6.1 SET Syntax for Variable Assignment">
           <code class="literal">
            SET
           </code>
          </a>
          or similar in the
          <a class="link" href="mysql.html" title="6.5.1 mysql — The MySQL Command-Line Client">
           <span class="command">
            <strong>
             mysql
            </strong>
           </span>
          </a>
          client are
                  also rejected.
         </p>
         <p>
          The server system variables in the following list are
                excepted from the restriction just described:
         </p>
         <div class="itemizedlist">
          <ul class="itemizedlist" style="list-style-type: square; ">
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_ca">
              <code class="literal">
               admin_ssl_ca
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_capath">
              <code class="literal">
               admin_ssl_capath
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_cert">
              <code class="literal">
               admin_ssl_cert
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_cipher">
              <code class="literal">
               admin_ssl_cipher
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_tls_ciphersuites">
              <code class="literal">
               admin_tls_ciphersuites
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_key">
              <code class="literal">
               admin_ssl_key
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_crl">
              <code class="literal">
               admin_ssl_crl
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_admin_ssl_crlpath">
              <code class="literal">
               admin_ssl_crlpath
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_basedir">
              <code class="literal">
               basedir
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_character_sets_dir">
              <code class="literal">
               character_sets_dir
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ft_stopword_file">
              <code class="literal">
               ft_stopword_file
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="group-replication-system-variables.html#sysvar_group_replication_recovery_tls_ciphersuites">
              <code class="literal">
               group_replication_recovery_tls_ciphersuites
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_init_file">
              <code class="literal">
               init_file
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_lc_messages_dir">
              <code class="literal">
               lc_messages_dir
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_plugin_dir">
              <code class="literal">
               plugin_dir
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="replication-options-replica.html#sysvar_relay_log">
              <code class="literal">
               relay_log
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="ulink" href="/doc/refman/8.0/en/replication-options-replica.html#sysvar_relay_log_info_file" target="_top">
              <code class="literal">
               relay_log_info_file
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="replication-options-replica.html#sysvar_replica_load_tmpdir">
              <code class="literal">
               replica_load_tmpdir
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_ca">
              <code class="literal">
               ssl_ca
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_capath">
              <code class="literal">
               ssl_capath
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_cert">
              <code class="literal">
               ssl_cert
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_cipher">
              <code class="literal">
               ssl_cipher
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_crl">
              <code class="literal">
               ssl_crl
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_crlpath">
              <code class="literal">
               ssl_crlpath
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_ssl_key">
              <code class="literal">
               ssl_key
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_socket">
              <code class="literal">
               socket
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_tls_ciphersuites">
              <code class="literal">
               tls_ciphersuites
              </code>
             </a>
            </p>
           </li>
           <li class="listitem">
            <p>
             <a class="link" href="server-system-variables.html#sysvar_tmpdir">
              <code class="literal">
               tmpdir
              </code>
             </a>
            </p>
           </li>
          </ul>
         </div>
         <p>
          See also
          <a class="xref" href="server-system-variables.html" title="7.1.8 Server System Variables">
           Section 7.1.8, “Server System Variables”
          </a>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <b>
           Identifiers with an initial dollar sign.
          </b>
          The use of the dollar sign (
          <code class="literal">
           $
          </code>
          ) as
                  the initial character of an unquoted identifier was
                  deprecated in MySQL 8.0, and is restricted in MySQL
                  8.1 and later; using an unquoted identifier beginning
                  with a dollar sign and containing one or more dollar
                  signs (in addition to the first one) now generates a
                  syntax error.
         </p>
         <p>
          Unquoted identifiers starting with
          <code class="literal">
           $
          </code>
          are not affected by this restriction if they do not
                contain any additional
          <code class="literal">
           $
          </code>
          characters.
         </p>
         <p>
          See
          <a class="xref" href="identifiers.html" title="11.2 Schema Object Names">
           Section 11.2, “Schema Object Names”
          </a>
          .
         </p>
        </li>
       </ul>
      </div>
      <p>
       Also as part of this work, the following server status
            variables, previously deprecated, have been removed. They
            are listed here, along with their replacements:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="literal">
           Com_slave_start
          </code>
          : Use
          <code class="literal">
           Com_replica_start
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           Com_slave_stop
          </code>
          : Use
          <code class="literal">
           Com_replica_stop
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           Com_show_slave_status
          </code>
          : Use
          <code class="literal">
           Com_show_replica_status
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           Com_show_slave_hosts
          </code>
          : Use
          <code class="literal">
           Com_show_replicas
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           Com_show_master_status
          </code>
          : Use
          <code class="literal">
           Com_show_binary_log_status
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           Com_change_master
          </code>
          : Use
          <code class="literal">
           Com_change_replication_source
          </code>
          .
         </p>
        </li>
       </ul>
      </div>
      <p>
       The variables just listed as removed no longer appear in the
            output of statements such as
       <a class="link" href="show-status.html" title="15.7.7.37 SHOW STATUS Statement">
        <code class="literal">
         SHOW
            STATUS
        </code>
       </a>
       . See also
       <a class="xref" href="server-status-variables.html#statvar_Com_xxx">
        Com_xxx Variables
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Plugins.
       </b>
       A number of plugins were removed in MySQL 8.4.0, and are
              listed here, along with any system variables and other
              features associated with them which were also removed or
              otherwise affected by the plugin removal:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="literal">
           authentication_fido
          </code>
          and
          <code class="literal">
           authentication_fido_client
          </code>
          plugins:
                Use the
          <code class="literal">
           authentication_webauthn
          </code>
          plugin instead. See
          <a class="xref" href="webauthn-pluggable-authentication.html" title="8.4.1.11 WebAuthn Pluggable Authentication">
           Section 8.4.1.11, “WebAuthn Pluggable Authentication”
          </a>
          .
         </p>
         <p>
          The
          <code class="literal">
           authentication_fido_rp_id
          </code>
          server
                system variable,
          <a class="link" href="mysql.html" title="6.5.1 mysql — The MySQL Command-Line Client">
           <span class="command">
            <strong>
             mysql
            </strong>
           </span>
          </a>
          client
          <code class="option">
           --fido-register-factor
          </code>
          option, and the
          <code class="option">
           -DWITH_FIDO
          </code>
          CMake option were also
                removed.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           keyring_file
          </code>
          plugin: Use the
          <code class="literal">
           component_keyring_file
          </code>
          component
                instead. See
          <a class="xref" href="keyring-file-component.html" title="8.4.4.4 Using the component_keyring_file File-Based Keyring Component">
           Section 8.4.4.4, “Using the component_keyring_file File-Based Keyring Component”
          </a>
          .
         </p>
         <p>
          The
          <code class="literal">
           keyring_file_data
          </code>
          system variable
                was also removed. In addition, the CMake options
          <code class="option">
           -DINSTALL_MYSQLKEYRINGDIR
          </code>
          and
          <code class="option">
           -DWITH_KEYRING_TEST
          </code>
          were removed.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           keyring_encrypted_file
          </code>
          plugin: Use
                the
          <code class="literal">
           component_keyring_encrypted_file
          </code>
          component instead. See
          <a class="xref" href="keyring-encrypted-file-component.html" title="8.4.4.5 Using the component_keyring_encrypted_file Encrypted File-Based Keyring Component">
           Section 8.4.4.5, “Using the component_keyring_encrypted_file Encrypted File-Based Keyring
        Component”
          </a>
          .
         </p>
         <p>
          The
          <code class="literal">
           keyring_encrypted_file_data
          </code>
          and
          <code class="literal">
           keyring_encrypted_file_password
          </code>
          system variables were also removed.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           keyring_oci
          </code>
          plugin: Use the
          <code class="literal">
           component_keyring_oci
          </code>
          component
                instead. See
          <a class="xref" href="keyring-oci-component.html" title="8.4.4.9 Using the Oracle Cloud Infrastructure Vault Keyring Component">
           Section 8.4.4.9, “Using the Oracle Cloud Infrastructure Vault Keyring Component”
          </a>
          .
         </p>
         <p>
          The following server system variables were also removed:
          <code class="literal">
           keyring_oci_ca_certificate
          </code>
          ,
          <code class="literal">
           keyring_oci_compartment
          </code>
          ,
          <code class="literal">
           keyring_oci_encryption_endpoint
          </code>
          ,
          <code class="literal">
           keyring_oci_key_file
          </code>
          ,
          <code class="literal">
           keyring_oci_key_fingerprint
          </code>
          ,
          <code class="literal">
           keyring_oci_management_endpoint
          </code>
          ,
          <code class="literal">
           keyring_oci_master_key
          </code>
          ,
          <code class="literal">
           keyring_oci_secrets_endpoint
          </code>
          ,
          <code class="literal">
           keyring_oci_tenancy
          </code>
          ,
          <code class="literal">
           keyring_oci_user
          </code>
          ,
          <code class="literal">
           keyring_oci_vaults_endpoint
          </code>
          , and
          <code class="literal">
           keyring_oci_virtual_vault
          </code>
          .
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           openssl_udf
          </code>
          plugin: Use the
                MySQL Enterprise Encryption
                (
          <code class="literal">
           component_enterprise_encryption
          </code>
          )
                component instead; see
          <a class="xref" href="enterprise-encryption.html" title="8.6 MySQL Enterprise Encryption">
           Section 8.6, “MySQL Enterprise Encryption”
          </a>
          .
         </p>
        </li>
       </ul>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        Support for weak ciphers.
       </b>
       When configuring encrypted connections, MySQL 8.4.0 and
              later no longer allow specifying any cipher that does not
              meet the following requirements:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          Conforms to proper TLS version (TLS v1.2 or TLSv1.3, as
                appropriate)
         </p>
        </li>
        <li class="listitem">
         <p>
          Provides perfect forward secrecy
         </p>
        </li>
        <li class="listitem">
         <p>
          Uses SHA2 in cipher, certificate, or both
         </p>
        </li>
        <li class="listitem">
         <p>
          Uses AES in GCM or any other AEAD algorithms or modes
         </p>
        </li>
       </ul>
      </div>
      <p>
       This has implications for setting the following system
            variables:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <a class="link" href="server-system-variables.html#sysvar_ssl_cipher">
           <code class="literal">
            ssl_cipher
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="server-system-variables.html#sysvar_admin_ssl_cipher">
           <code class="literal">
            admin_ssl_cipher
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="server-system-variables.html#sysvar_tls_ciphersuites">
           <code class="literal">
            tls_ciphersuites
           </code>
          </a>
         </p>
        </li>
        <li class="listitem">
         <p>
          <a class="link" href="server-system-variables.html#sysvar_admin_tls_ciphersuites">
           <code class="literal">
            admin_tls_ciphersuites
           </code>
          </a>
         </p>
        </li>
       </ul>
      </div>
      <p>
       See the descriptions of these variables for their permitted
            values in MySQL 8.4, and more information.
      </p>
      <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
       <div class="admon-title">
        Note
       </div>
       <p>
        <code class="literal">
         libmysqlclient
        </code>
        continues to support
              additional ciphers that do not satisfy these conditions in
              order to retain the ability to connect to older versions
              of MySQL.
       </p>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        INFORMATION_SCHEMA.TABLESPACES.
       </b>
       The
       <code class="literal">
        INFORMATION_SCHEMA.TABLESPACES
       </code>
       table, which was not actually used, was deprecated in
              MySQL 8.0.22 and has now been removed.
      </p>
      <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
       <div class="admon-title">
        Note
       </div>
       <p>
        For
        <a class="link" href="mysql-cluster.html" title="Chapter 25 MySQL NDB Cluster 8.4">
         <code class="literal">
          NDB
         </code>
        </a>
        tables, the
              Information Schema
        <a class="link" href="information-schema-files-table.html" title="28.3.15 The INFORMATION_SCHEMA FILES Table">
         <code class="literal">
          FILES
         </code>
        </a>
        table provides tablespace-related information.
       </p>
       <p>
        For
        <a class="link" href="innodb-storage-engine.html" title="Chapter 17 The InnoDB Storage Engine">
         <code class="literal">
          InnoDB
         </code>
        </a>
        tables, the
              Information Schema
        <a class="link" href="information-schema-innodb-tablespaces-table.html" title="28.4.24 The INFORMATION_SCHEMA INNODB_TABLESPACES Table">
         <code class="literal">
          INNODB_TABLESPACES
         </code>
        </a>
        and
        <a class="link" href="information-schema-innodb-datafiles-table.html" title="28.4.10 The INFORMATION_SCHEMA INNODB_DATAFILES Table">
         <code class="literal">
          INNODB_DATAFILES
         </code>
        </a>
        tables
              provide tablespace metadata.
       </p>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        DROP TABLESPACE and ALTER TABLESPACE: ENGINE clause.
       </b>
       The
       <code class="literal">
        ENGINE
       </code>
       clause for
       <a class="link" href="drop-tablespace.html" title="15.1.33 DROP TABLESPACE Statement">
        <code class="literal">
         DROP TABLESPACE
        </code>
       </a>
       and
       <a class="link" href="alter-tablespace.html" title="15.1.10 ALTER TABLESPACE Statement">
        <code class="literal">
         ALTER TABLESPACE
        </code>
       </a>
       statements
              was deprecated in MySQL 8.0. In MySQL 8.4, it is no longer
              supported, and causes an error if you attempt to use it
              with
       <code class="literal">
        DROP TABLESPACE
       </code>
       or
       <a class="link" href="alter-tablespace.html" title="15.1.10 ALTER TABLESPACE Statement">
        <code class="literal">
         ALTER
              TABLESPACE ... DROP DATAFILE
        </code>
       </a>
       .
       <code class="literal">
        ENGINE
       </code>
       is also no longer supported for
              all other variants of
       <code class="literal">
        ALTER TABLESPACE
       </code>
       ,
              with the two exceptions listed here:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="literal">
           ALTER TABLESPACE ... ADD DATAFILE
                ENGINE={NDB|NDBCLUSTER}
          </code>
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="literal">
           ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE}
                ENGINE=INNODB
          </code>
         </p>
        </li>
       </ul>
      </div>
      <p>
       For more information, see the documentation for these
            statements.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        LOW_PRIORITY with LOCK TABLES ... WRITE.
       </b>
       The
       <code class="literal">
        LOW_PRIORITY
       </code>
       clause of the
       <a class="link" href="lock-tables.html" title="15.3.6 LOCK TABLES and UNLOCK TABLES Statements">
        <code class="literal">
         LOCK TABLES
              ... WRITE
        </code>
       </a>
       statement had had no effect since
              MySQL 5.5, and was deprecated in MySQL 5.6. It is no
              longer supported in MySQL 8.4; including it in
       <code class="literal">
        LOCK TABLES
       </code>
       now causes a syntax error.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        EXPLAIN FORMAT=JSON format versioning.
       </b>
       It is now possible to choose between 2 versions of the
              JSON output format used by
       <code class="literal">
        EXPLAIN
              FORMAT=JSON
       </code>
       statements using the
       <a class="link" href="server-system-variables.html#sysvar_explain_json_format_version">
        <code class="literal">
         explain_json_format_version
        </code>
       </a>
       server system variable introduced in this release. Setting
              this variable to
       <code class="literal">
        1
       </code>
       causes the server to
              use Version 1, which is the linear format which was always
              used for output from such statements in MySQL 8.2 and
              earlier. This is the default value and format in MySQL
              8.4. Setting
       <code class="literal">
        explain_json_format_version
       </code>
       to
       <code class="literal">
        2
       </code>
       causes the Version 2 format to be
              used; this JSON output format is based on access paths,
              and is intended to provide better compatibility with
              future versions of the MySQL Optimizer.
      </p>
      <p>
       See
       <a class="xref" href="explain.html#explain-execution-plan" title="Obtaining Execution Plan Information">
        Obtaining Execution Plan Information
       </a>
       , for more
            information and examples.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Capturing EXPLAIN FORMAT=JSON output.
       </b>
       <code class="literal">
        EXPLAIN FORMAT=JSON
       </code>
       was extended with
              an
       <code class="literal">
        INTO
       </code>
       option, which provides the
              ability to store JSON-formatted
       <code class="literal">
        EXPLAIN
       </code>
       output in a user variable where it can be worked with
              using MySQL JSON functions, like this:
      </p>
      <div class="copytoclipboard-wrapper">
       <pre class="programlisting language-sql"><div class="docs-select-all right" id="sa7108671"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token prompt">mysql&gt;</span> <span class="token keyword">EXPLAIN</span> <span class="token keyword">FORMAT</span><span class="token operator">=</span><span class="token datatype">JSON</span> <span class="token keyword">INTO</span> <span class="token variable">@myex</span> <span class="token keyword">SELECT</span> <span class="token keyword">name</span> <span class="token keyword">FROM</span> a <span class="token keyword">WHERE</span> id <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>
<span class="token output">Query OK, 0 rows affected (0.00 sec)</span>

<span class="token prompt">mysql&gt;</span> <span class="token keyword">SELECT</span> <span class="token function">JSON_EXTRACT</span><span class="token punctuation">(</span><span class="token variable">@myex</span><span class="token punctuation">,</span> <span class="token string">"$.query_block.table.key"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token output"><span class="token punctuation">+</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">+</span></span>
<span class="token output"><span class="token punctuation">|</span> JSON_EXTRACT(@myex, "$.query_block.table.key") <span class="token punctuation">|</span></span>
<span class="token output"><span class="token punctuation">+</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">+</span></span>
<span class="token output"><span class="token punctuation">|</span> "PRIMARY"                                      <span class="token punctuation">|</span></span>
<span class="token output"><span class="token punctuation">+</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">-</span><span class="token punctuation">+</span></span>
<span class="token output">1 row in set (0.01 sec)</span></code></pre>
      </div>
      <p>
       This option can be used only if the
       <code class="literal">
        EXPLAIN
       </code>
       statement also contains
       <code class="literal">
        FORMAT=JSON
       </code>
       ; otherwise, a syntax error
            results. This requirement is not affected by the value of
       <a class="link" href="server-system-variables.html#sysvar_explain_format">
        <code class="literal">
         explain_format
        </code>
       </a>
       .
      </p>
      <p>
       <code class="literal">
        INTO
       </code>
       can be used with any explainable
            statement with the exception of
       <code class="literal">
        EXPLAIN FOR
            CONNECTION
       </code>
       . It cannot be used with
       <code class="literal">
        EXPLAIN ANALYZE
       </code>
       .
      </p>
      <p>
       For more information and examples, see
       <a class="xref" href="explain.html#explain-execution-plan" title="Obtaining Execution Plan Information">
        Obtaining Execution Plan Information
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        EXPLAIN FOR SCHEMA.
       </b>
       Added a
       <code class="literal">
        FOR SCHEMA
       </code>
       option to the
       <a class="link" href="explain.html" title="15.8.2 EXPLAIN Statement">
        <code class="literal">
         EXPLAIN
        </code>
       </a>
       statement. The
              syntax is as shown here, where
       <em class="replaceable">
        <code>
         stmt
        </code>
       </em>
       is an explainable
              statement:
      </p>
      <div class="copytoclipboard-wrapper">
       <pre class="programlisting one-line language-sql"><div class="docs-select-all right" id="sa8512903"><div class="copy-help left">Press ⌘+C to copy</div> <div class="right"><button class="clipboard-btn" title="Copy to Clipboard"><span class="icon-clipboard"></span></button></div></div><code class="language-sql"><span class="token keyword">EXPLAIN</span> <span class="token punctuation">[</span><span class="token keyword"><em class="replaceable">options</em></span><span class="token punctuation">]</span> <span class="token keyword">FOR</span> <span class="token keyword">SCHEMA</span> <span class="token keyword"><em class="replaceable">schema_name</em></span> <em class="replaceable">stmt</em></code></pre>
      </div>
      <p>
       This causes
       <em class="replaceable">
        <code>
         stmt
        </code>
       </em>
       to be run as if
            in the named schema.
      </p>
      <p>
       <code class="literal">
        FOR DATABASE
       </code>
       is also supported as a
            synonym.
      </p>
      <p>
       This option is not compatible with
       <code class="literal">
        FOR
            CONNECTION
       </code>
       .
      </p>
      <p>
       See
       <a class="xref" href="explain.html#explain-execution-plan" title="Obtaining Execution Plan Information">
        Obtaining Execution Plan Information
       </a>
       , for more
            information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Client comments preserved.
       </b>
       In MySQL 8.0, the stripping of comments from the
       <a class="link" href="mysql.html" title="6.5.1 mysql — The MySQL Command-Line Client">
        <span class="command">
         <strong>
          mysql
         </strong>
        </span>
       </a>
       client was the default behavior;
              the default was changed to preserve such comments.
      </p>
      <p>
       To enable the stripping of comments as was performed in
            MySQL 8.0 and earlier, start the
       <a class="link" href="mysql.html" title="6.5.1 mysql — The MySQL Command-Line Client">
        <span class="command">
         <strong>
          mysql
         </strong>
        </span>
       </a>
       client with
       <a class="link" href="mysql-command-options.html#option_mysql_comments">
        <code class="option">
         --skip-comments
        </code>
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        AUTO_INCREMENT and floating-point columns.
       </b>
       The use of the
       <code class="literal">
        AUTO_INCREMENT
       </code>
       modifier
              with
       <a class="link" href="floating-point-types.html" title="13.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE">
        <code class="literal">
         FLOAT
        </code>
       </a>
       and
       <a class="link" href="floating-point-types.html" title="13.1.4 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE">
        <code class="literal">
         DOUBLE
        </code>
       </a>
       columns in
       <a class="link" href="create-table.html" title="15.1.20 CREATE TABLE Statement">
        <code class="literal">
         CREATE TABLE
        </code>
       </a>
       and
       <a class="link" href="alter-table.html" title="15.1.9 ALTER TABLE Statement">
        <code class="literal">
         ALTER TABLE
        </code>
       </a>
       statements was
              deprecated in MySQL 8.0; support for it is removed
              altogether in MySQL 8.4, where it raises
       <a class="ulink" href="/doc/mysql-errors/8.4/en/server-error-reference.html#error_er_wrong_field_spec" target="_top">
        <code class="literal">
         ER_WRONG_FIELD_SPEC
        </code>
       </a>
       (
       <span class="errortext">
        Incorrect column specifier for
              column
       </span>
       ).
      </p>
      <p>
       Before upgrading to MySQL 8.4 from a previous series, you
       <span class="emphasis">
        <em>
         must
        </em>
       </span>
       fix any table that contains a
       <code class="literal">
        FLOAT
       </code>
       or
       <code class="literal">
        DOUBLE
       </code>
       column
            with
       <code class="literal">
        AUTO_INCREMENT
       </code>
       so that the table no
            longer uses either of these. Otherwise, the upgrade fails


            .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        mysql_ssl_rsa_setup utility.
       </b>
       The
       <span class="command">
        <strong>
         mysql_ssl_rsa_setup
        </strong>
       </span>
       utility, deprecated in MySQL 8.0.34, has been removed. For
              MySQL distributions compiled using OpenSSL, the MySQL
              server can perform automatic generation of missing SSL and
              RSA files at startup. See
       <a class="xref" href="creating-ssl-rsa-files-using-mysql.html" title="8.3.3.1 Creating SSL and RSA Certificates and Keys using MySQL">
        Section 8.3.3.1, “Creating SSL and RSA Certificates and Keys using MySQL”
       </a>
       , for
              more information.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        MySQL Privileges.
       </b>
       Added the
       <a class="link" href="privileges-provided.html#priv_set-any-definer">
        <code class="literal">
         SET_ANY_DEFINER
        </code>
       </a>
       privilege for definer object creation and the
       <a class="link" href="privileges-provided.html#priv_allow-nonexistent-definer">
        <code class="literal">
         ALLOW_NONEXISTENT_DEFINER
        </code>
       </a>
       privilege for orphan object protection. Together these
              privileges coexist with the deprecated
       <a class="ulink" href="/doc/refman/8.0/en/privileges-provided.html#priv_set-user-id" target="_top">
        <code class="literal">
         SET_USER_ID
        </code>
       </a>
       privilege.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        SET_USER_ID privilege.
       </b>
       The
       <code class="literal">
        SET_USER_ID
       </code>
       privilege, deprecated
              in MySQL 8.2.0, has been removed. use in
       <a class="link" href="grant.html" title="15.7.1.6 GRANT Statement">
        <code class="literal">
         GRANT
        </code>
       </a>
       statements now causes
              a syntax error
      </p>
      <p>
       Instead of
       <code class="literal">
        SET_USER_ID
       </code>
       , you can use the
       <a class="link" href="privileges-provided.html#priv_set-any-definer">
        <code class="literal">
         SET_ANY_DEFINER
        </code>
       </a>
       privilege for
            definer object creation, and the
       <a class="link" href="privileges-provided.html#priv_allow-nonexistent-definer">
        <code class="literal">
         ALLOW_NONEXISTENT_DEFINER
        </code>
       </a>
       privileges for orphan object protection.
      </p>
      <p>
       Both privileges are required to produce orphaned SQL objects
            using
       <a class="link" href="create-procedure.html" title="15.1.17 CREATE PROCEDURE and CREATE FUNCTION Statements">
        <code class="literal">
         CREATE PROCEDURE
        </code>
       </a>
       ,
       <a class="link" href="create-function.html" title="15.1.14 CREATE FUNCTION Statement">
        <code class="literal">
         CREATE FUNCTION
        </code>
       </a>
       ,
       <a class="link" href="create-trigger.html" title="15.1.22 CREATE TRIGGER Statement">
        <code class="literal">
         CREATE TRIGGER
        </code>
       </a>
       ,
       <a class="link" href="create-event.html" title="15.1.13 CREATE EVENT Statement">
        <code class="literal">
         CREATE EVENT
        </code>
       </a>
       , or
       <a class="link" href="create-view.html" title="15.1.23 CREATE VIEW Statement">
        <code class="literal">
         CREATE VIEW
        </code>
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        --abort-slave-event-count and --disconnect-slave-event-count server
              options.
       </b>
       The MySQL server startup options
       <code class="option">
        --abort-slave-event-count
       </code>
       and
       <code class="option">
        --disconnect-slave-event-count
       </code>
       , formerly
              used in testing, were deprecated in MySQL 8.0, and have
              been removed in this release. Attempting to start
       <a class="link" href="mysqld.html" title="6.3.1 mysqld — The MySQL Server">
        <span class="command">
         <strong>
          mysqld
         </strong>
        </span>
       </a>
       with either of these options now
              results in an error.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        mysql_upgrade utility.
       </b>
       The
       <span class="command">
        <strong>
         mysql_upgrade
        </strong>
       </span>
       utility, deprecated in MySQL 8.0.16, has been removed.
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        mysqlpump utility.
       </b>
       The
       <span class="command">
        <strong>
         mysqlpump
        </strong>
       </span>
       utility
              along with its helper utilities
       <span class="command">
        <strong>
         lz4_decompress
        </strong>
       </span>
       and
       <span class="command">
        <strong>
         zlib_decompress
        </strong>
       </span>
       ,
              deprecated in MySQL 8.0.34, were removed. Instead, use
       <a class="link" href="mysqldump.html" title="6.5.4 mysqldump — A Database Backup Program">
        <span class="command">
         <strong>
          mysqldump
         </strong>
        </span>
       </a>
       or
       <a class="ulink" href="/doc/mysql-shell/8.4/en/mysql-shell-utilities-dump-instance-schema.html" target="_top">
        MySQL
              Shell's dump utilities
       </a>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Obsolete CMake options.
       </b>
       The following options for compiling the server with CMake
              were obsolete and have been removed:
      </p>
      <div class="itemizedlist">
       <ul class="itemizedlist" style="list-style-type: circle; ">
        <li class="listitem">
         <p>
          <code class="option">
           USE_LD_LLD
          </code>
          : Use
          <a class="link" href="source-configuration-options.html#option_cmake_with_ld">
           <code class="option">
            WITH_LD=lld
           </code>
          </a>
          instead.
         </p>
        </li>
        <li class="listitem">
         <p>
          <code class="option">
           WITH_BOOST
          </code>
          ,
          <code class="option">
           DOWNLOAD_BOOST
          </code>
          ,
          <code class="option">
           DOWNLOAD_BOOST_TIMEOUT
          </code>
          : These options
                are no longer necessary; MySQL now includes and uses a
                bundled version of Boost when compiling from source.
         </p>
        </li>
       </ul>
      </div>
     </li>
     <li class="listitem">
      <p>
       <b>
        Removed Keywords.
       </b>
       Keywords removed in MySQL 8.4 since MySQL 8.0. Reserved
              keywords are marked with (R).
      </p>
      <p>
       <code class="literal">
        GET_MASTER_PUBLIC_KEY
       </code>
       ,
       <code class="literal">
        MASTER_AUTO_POSITION
       </code>
       ,
       <code class="literal">
        MASTER_BIND
       </code>
       (R),
       <code class="literal">
        MASTER_COMPRESSION_ALGORITHMS
       </code>
       ,
       <code class="literal">
        MASTER_CONNECT_RETRY
       </code>
       ,
       <code class="literal">
        MASTER_DELAY
       </code>
       ,
       <code class="literal">
        MASTER_HEARTBEAT_PERIOD
       </code>
       ,
       <code class="literal">
        MASTER_HOST
       </code>
       ,
       <code class="literal">
        MASTER_LOG_FILE
       </code>
       ,
       <code class="literal">
        MASTER_LOG_POS
       </code>
       ,
       <code class="literal">
        MASTER_PASSWORD
       </code>
       ,
       <code class="literal">
        MASTER_PORT
       </code>
       ,
       <code class="literal">
        MASTER_PUBLIC_KEY_PATH
       </code>
       ,
       <code class="literal">
        MASTER_RETRY_COUNT
       </code>
       ,
       <code class="literal">
        MASTER_SSL
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CA
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CAPATH
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CERT
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CIPHER
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CRL
       </code>
       ,
       <code class="literal">
        MASTER_SSL_CRLPATH
       </code>
       ,
       <code class="literal">
        MASTER_SSL_KEY
       </code>
       ,
       <code class="literal">
        MASTER_SSL_VERIFY_SERVER_CERT
       </code>
       (R),
       <code class="literal">
        MASTER_TLS_CIPHERSUITES
       </code>
       ,
       <code class="literal">
        MASTER_TLS_VERSION
       </code>
       ,
       <code class="literal">
        MASTER_USER
       </code>
       , and
       <code class="literal">
        MASTER_ZSTD_COMPRESSION_LEVEL
       </code>
       .
      </p>
     </li>
     <li class="listitem">
      <p>
       <b>
        Index prefixes in partitioning key.
       </b>
       Columns with index prefixes were allowed in the
              partitioning key for a partitioned table in MySQL 8.0, and
              raised a warning with no other effects when creating,
              altering, or upgrading a partitioned table. Such columns
              are no longer permitted in partitioned tables, and using
              any such columns in the partitioning key causes the
       <a class="link" href="create-table.html" title="15.1.20 CREATE TABLE Statement">
        <code class="literal">
         CREATE TABLE
        </code>
       </a>
       or
       <a class="link" href="alter-table.html" title="15.1.9 ALTER TABLE Statement">
        <code class="literal">
         ALTER TABLE
        </code>
       </a>
       statement in
              they occur to be rejected with an error.
      </p>
      <p>
       For more information, see
       <a class="xref" href="partitioning-limitations.html#partitioning-limitations-prefixes" title="Column index prefixes not supported for key partitioning">
        Column index prefixes not supported for key partitioning
       </a>
       .
      </p>
     </li>
    </ul>
   </div>
  </div>
 </div>
 <br/>
</div>
