个人存档用。
最近部署了一下mysql_exporter,发现show master status和show slave status语法一致报错,遂查了一下使用的mysql版本的发行说明,以下记录mysql8.4 移除的功能,个人存档用
之前的博客中,主备复制语法需要进行更改。
MySQL 8.4 中删除的功能
以下项目已过时,并已在 MySQL 中删除 8.4. 在显示替代方案的情况下,应用程序 应该更新以使用它们。
对于使用功能的 MySQL 8.3 应用程序 removed 的 MySQL 8.4 中,语句可能会失败 从 MySQL 8.3 源复制到 MySQL 8.4 副本,或者可能对 source 和 replica 的为避免此类问题,应用程序 应修改 MySQL 8.4 中删除的 use 功能 以避免它们并尽可能使用替代品。
-
删除了服务器选项和变量。 支持许多服务器选项和变量 MySQL 8.4 中已删除以前版本的 MySQL。 尝试在 MySQL 8.4 中设置它们中的任何一个都会引发一个 错误。这些选项和变量如下所示:
-
binlog_transaction_dependency_tracking
: 在 MySQL 8.0.35 和 MySQL 8.2.0 中已弃用。没有 计划替换此变量或其功能, 它已设为服务器内部。在 MySQL 8.4 中 (及更高版本)中,当使用多线程副本时, 源 mysqld 始终使用 writesets 生成二进制日志的依赖关系信息; 这与 在 早期版本的 设置为 具有相同的效果 MySQL 的。binlog_transaction_dependency_tracking``WRITESET
-
group_replication_recovery_complete_at
: 在 MySQL 8.0.34 中已弃用。在 MySQL 8.4 及更高版本中, 在 Distributed Recovery 过程中应用的策略 始终仅在新成员 接收、认证和应用所有符合以下条件的交易 发生在它加入该组织之前;这是 等同于在上一个 MySQL 版本。group_replication_recovery_complete_at``TRANSACTIONS_APPLIED
-
avoid_temporal_upgrade
和 : 这两个 变量在 MySQL 5.6 中已弃用;他们都不是 在最新版本的 MySQL 中有任何影响。双 变量已被删除;目前尚无计划 替换它们中的任何一个。show_old_temporals
-
--no-dd-upgrade
:在 MySQL 中已弃用 8.0.16 现已删除。请改用--upgrade=NONE
。 -
--old
和 :两者 在 MySQL 8.0.35 和 MySQL 8.2.0 中已弃用,现在 删除。--new
-
--language
:在 MySQL 5.5 中已弃用, 现在被删除了。 -
和 server 选项,以及 和 服务器系统变量, 在 MySQL 8.0.26 中已弃用。它们都被删除了 此版本。请改用
--tls-version
和--admin-tls-version
。--ssl``--admin-ssl``have_ssl``have_openssl
-
MySQL 8.0.27 中已弃用的 system 变量已删除 从 MySQL 8.4.0 开始。请改用
authentication_policy
。default_authentication_plugin
作为删除 的一部分,该 HAS 的语法 已更改。有关更多信息,请参阅
authentication_policy
的描述。default_authentication_plugin``authentication_policy
-
–skip-host-cache 服务器选项。 此选项已被删除;请改用
--host-cache-size=0
启动服务器。参见第 7.1.12.3 节 “DNS 查找和主机缓存”。 -
–innodb 和 --skip-innodb 服务器选项。 这些选项已被删除。
InnoDB
存储引擎是 始终启用,并且无法禁用它。 -
**–character-set-client-handshake 和 --old-style-user-limits 服务器 选项。**这些选项以前用于兼容性 使用非常旧版本的 MySQL,这些版本不再是 支持或维护,因此不再服务于任何 有用的目的。
-
FLUSH HOSTS 语句。 声明 在 MySQL 8.0.23 中已弃用,已被删除。清除 主机缓存,发出
TRUNCATE TABLE
performance_schema.host_cache
或 mysqladmin flush-hosts。FLUSH HOSTS
-
-
过时的复制选项和变量。 与 MySQL 相关的许多选项和变量 复制在以前的 MySQL 版本中已弃用, ,并已从 MySQL 8.4 中删除。 现在,尝试使用其中任何一个都会导致服务器 引发语法错误。这些选项和变量是 此处列出:
-
--slave-rows-search-algorithms
:这 复制应用程序用于查找的算法 应用更新或删除时的表行现在是 always 和 is 用户不再配置。HASH_SCAN,INDEX_SCAN
-
log_bin_use_v1_events
:这允许 要复制的运行 MySQL 5.7 及更高版本的源服务器 到不再存在的早期版本的 MySQL 支持或维护。 -
--relay-log-info-file
, , , : 的使用 应用程序元数据存储库和 连接元数据存储库已被 崩溃安全表,并且不再受支持。参见第 19.2.4.2 节“复制元数据存储库”。--relay-log-info-repository``--master-info-file``--master-info-repository
-
transaction_write_set_extraction
-
group_replication_ip_whitelist
:请改用group_replication_ip_allowlist
。 -
group_replication_primary_member
:不 需要更长的时间;请改为检查 Performance Schemareplication_group_members
表的列。MEMBER_ROLE
-
-
复制 SQL 语法。 MySQL Replication 中使用的许多 SQL 语句,其中 在早期版本的 MySQL 中已弃用,不再 在 MySQL 8.4 中受支持。尝试使用其中任何一个 statements 现在会产生语法错误。这些语句 可分为两组:与源相关的 servers 以及引用副本的服务器,如下所示:
作为这项工作的一部分,
CREATE 的选项 EVENT
和ALTER EVENT
现已弃用,并被 取代。相应的 term 也是现在 已弃用,并且不再用于事件描述中,例如 在信息架构EVENTS
表中; 现在显示 相反。DISABLE ON SLAVE``DISABLE ON REPLICA``SLAVESIDE_DISABLED``REPLICA_SIDE_DISABLED
-
已删除的与 复制源服务器 中,如下所示:
-
CHANGE MASTER TO
:使用CHANGE REPLICATION SOURCE TO.
-
RESET MASTER
:使用RESET BINARY LOGS 和 GTID 中
。 -
SHOW MASTER STATUS
:使用SHOW BINARY LOG STATUS 的 STATUS
中。 -
PURGE MASTER LOGS
:使用PURGE BINARY LOGS
。 -
SHOW MASTER LOGS
:使用SHOW BINARY LOGS
。
-
-
列出了已删除的与副本相关的 SQL 语句 这里:
-
START SLAVE
:使用START REPLICA。
-
STOP SLAVE
:使用STOP REPLICA。
-
SHOW SLAVE STATUS
:使用SHOW REPLICA STATUS
。 -
SHOW SLAVE HOSTS
:使用SHOW REPLICAS
。 -
RESET SLAVE
:使用RESET REPLICA。
-
前面列出的所有语句都已从 MySQL 测试程序和文件,以及来自任何其他 内部使用。
此外,许多已弃用的选项以前 受
CHANGE REPLICATION SOURCE 支持 TO
和START REPLICA
已被删除,不再是 被服务器接受。每个 接下来列出了这些 SQL 语句。-
此处列出了从 中删除的选项:
CHANGE REPLICATION SOURCE TO
-
MASTER_AUTO_POSITION
:使用SOURCE_AUTO_POSITION
。 -
MASTER_HOST
:使用SOURCE_HOST
。 -
MASTER_BIND
:使用SOURCE_BIND
。 -
MASTER_UseR
:使用SOURCE_UseR
。 -
MASTER_PASSWORD
:使用SOURCE_PASSWORD
。 -
MASTER_PORT
:使用SOURCE_PORT
。 -
MASTER_CONNECT_RETRY
:使用SOURCE_CONNECT_RETRY
。 -
MASTER_RETRY_COUNT
:使用SOURCE_RETRY_COUNT
。 -
MASTER_DELAY
:使用SOURCE_DELAY
。 -
MASTER_SSL
:使用SOURCE_SSL
。 -
MASTER_SSL_CA
:使用SOURCE_SSL_CA
。 -
MASTER_SSL_CAPATH
:使用SOURCE_SSL_CAPATH
。 -
MASTER_SSL_CIPHER
:使用SOURCE_SSL_CIPHER
。 -
MASTER_SSL_CRL
:使用SOURCE_SSL_CRL
。 -
MASTER_SSL_CRLPATH
:使用SOURCE_SSL_CRLPATH
。 -
MASTER_SSL_KEY
:使用SOURCE_SSL_KEY
。 -
MASTER_SSL_VERIFY_SERVER_CERT
: 使用SOURCE_SSL_VERIFY_SERVER_CERT
。 -
MASTER_TLS_VERSION
:使用SOURCE_TLS_VERSION
。 -
MASTER_TLS_CIPHERSUITES
:使用SOURCE_TLS_CIPHERSUITES
。 -
MASTER_SSL_CERT
:使用SOURCE_SSL_CERT
。 -
MASTER_PUBLIC_KEY_PATH
:使用SOURCE_PUBLIC_KEY_PATH
。 -
GET_MASTER_PUBLIC_KEY
:使用GET_SOURCE_PUBLIC_KEY
。 -
MASTER_HEARTBEAT_PERIOD
:使用SOURCE_HEARTBEAT_PERIOD
。 -
MASTER_COMPRESSION_ALGORITHMS
: 使用SOURCE_COMPRESSION_ALGORITHMS
。 -
MASTER_ZSTD_COMPRESSION_LEVEL
: 使用SOURCE_ZSTD_COMPRESSION_LEVEL
。 -
MASTER_LOG_FILE
:使用SOURCE_LOG_FILE
。 -
MASTER_LOG_POS
:使用SOURCE_LOG_POS
。
-
-
从语句中删除的选项如下所示:
START REPLICA
-
MASTER_LOG_FILE
:用。SOURCE_LOG_FILE
-
MASTER_LOG_POS
:用。SOURCE_LOG_POS
-
-
系统变量和 NULL. 它不用于 MySQL 服务器,也不支持 MySQL 服务器 将 startup 选项设置为 NULL () 并拥有它 被服务器解释为 SQL ,并且不应该是不可能的。 MySQL 8.1(及更高版本)明确不允许设置 启动选项添加到此 fashion,并拒绝尝试处理错误。 尝试设置相应的服务器系统 在 mysql 客户端中使用
SET
或类似的变量是 也被拒绝了。--my-option=NULL``NULL``NULL``NULL
以下列表中的服务器系统变量为 从刚才描述的限制中除外:
-
admin_ssl_ca
-
admin_ssl_capath
-
admin_ssl_cert
-
admin_ssl_cipher
-
admin_tls_ciphersuites
-
admin_ssl_key
-
admin_ssl_crl
-
admin_ssl_crlpath
-
basedir
-
character_sets_dir
-
ft_stopword_file
-
group_replication_recovery_tls_ciphersuites
-
init_file
-
lc_messages_dir
-
plugin_dir
-
relay_log
-
relay_log_info_file
-
replica_load_tmpdir
-
ssl_ca
-
ssl_capath
-
ssl_cert
-
ssl_cipher
-
ssl_crl
-
ssl_crlpath
-
ssl_key
-
socket
-
tls_ciphersuites
-
tmpdir
另请参见第 7.1.8 节 “服务器系统变量”。
-
-
带有初始美元符号的标识符。 使用美元符号 () 作为 未加引号的标识符的初始字符为 在 MySQL 8.0 中已弃用,在 MySQL 中受到限制 8.1 及更高版本;使用不带引号的标识符开头 带有一个美元符号,并包含一个或多个美元 signs(除了第一个)现在会生成一个 语法错误。
$
如果 开头的未加引号的标识符不受此限制的影响,则它们不受此限制的影响 包含任何其他字符。
$``$
参见第 11.2 节 “Schema 对象名称”。
此外,作为这项工作的一部分,以下服务器状态 之前弃用的变量已被删除。他们 在此处列出,以及它们的替代品:
-
Com_slave_start
:用。Com_replica_start
-
Com_slave_stop
:用。Com_replica_stop
-
Com_show_slave_status
:用。Com_show_replica_status
-
Com_show_slave_hosts
:用。Com_show_replicas
-
Com_show_master_status
:用。Com_show_binary_log_status
-
Com_change_master
:用。Com_change_replication_source
刚刚列为 removed 的变量不再显示在 SHOW 等语句的输出
STATUS 的 STATUS
中。另请参阅 Com_xxx 变量。 -
-
插件。 MySQL 8.4.0 中删除了许多插件,它们是 在此处列出,以及任何系统变量和其他 与他们关联的功能也被删除,或者 否则受插件移除影响:
-
authentication_fido
和插件: 请改用插件。参见第 8.4.1.11 节“ WebAuthn 可插入身份验证”。authentication_fido_client``authentication_webauthn
服务器 system 变量、mysql 客户端选项和 CMake 选项也是 删除。
authentication_fido_rp_id``--fido-register-factor``-DWITH_FIDO
-
keyring_file
plugin:使用组件 相反。参见第 8.4.4.4 节 “使用基于 component_keyring_file 文件的密钥环组件”。component_keyring_file
系统变量 也被删除。此外,CMake 选项 和 已被删除。
keyring_file_data``-DINSTALL_MYSQLKEYRINGDIR``-DWITH_KEYRING_TEST
-
keyring_encrypted_file
plugin:使用 组件。参见第 8.4.4.5 节 “使用 component_keyring_encrypted_file 加密的基于文件的密钥环 组件”。component_keyring_encrypted_file
和 系统变量也被删除。
keyring_encrypted_file_data``keyring_encrypted_file_password
-
keyring_oci
plugin:使用组件 相反。请参见第 8.4.4.9 节 “使用 Oracle Cloud Infrastructure Vault 密钥环组件”。component_keyring_oci
还删除了以下服务器系统变量:、、、、、 和 。
keyring_oci_ca_certificate``keyring_oci_compartment``keyring_oci_encryption_endpoint``keyring_oci_key_file``keyring_oci_key_fingerprint``keyring_oci_management_endpoint``keyring_oci_master_key``keyring_oci_secrets_endpoint``keyring_oci_tenancy``keyring_oci_user``keyring_oci_vaults_endpoint``keyring_oci_virtual_vault
-
openssl_udf
plugin:使用 MySQL 企业加密 () 组件;参见第 8.6 节“ MySQL 企业加密”。component_enterprise_encryption
-
-
支持弱密码。 配置加密连接时,MySQL 8.4.0 和 以后不再允许指定任何不 满足以下要求:
-
符合正确的 TLS 版本(TLS v1.2 或 TLSv1.3,如 适当)
-
提供完美的正向保密
-
在密码和/或证书中使用 SHA2
-
在 GCM 或任何其他 AEAD 算法或模式中使用 AES
这对设置以下系统有影响 变量:
-
ssl_cipher
-
admin_ssl_cipher
-
tls_ciphersuites
-
admin_tls_ciphersuites
请参阅这些变量的描述以了解其允许的 MySQL 8.4 中的值以及更多信息。
注意
libmysqlclient
持续支持 不满足 以保留连接到旧版本的能力 的 MySQL。 -
-
**INFORMATION_SCHEMA。TABLESPACES 的 TABLESPACES 中。**该表实际上并未使用,已在 MySQL 8.0.22 现已删除。
INFORMATION_SCHEMA.TABLESPACES
注意
对于
NDB
表, Information SchemaFILES
table 提供与表空间相关的信息。对于
InnoDB
表, 信息架构INNODB_TABLESPACES
和INNODB_DATAFILES
表 提供表空间元数据。 -
DROP TABLESPACE 和 ALTER TABLESPACE: ENGINE 子句。
DROP TABLESPACE
和ALTER TABLESPACE
语句的子句 在 MySQL 8.0 中已弃用。在 MySQL 8.4 中,它不再是 supported,如果尝试使用它,则会导致错误 with 或ALTER TABLESPACE ...DROP DATAFILE。
也不再支持 的所有其他变体 , 此处列出了两个例外:ENGINE``DROP TABLESPACE``ENGINE``ALTER TABLESPACE
-
ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}
-
ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB
有关更多信息,请参阅这些文档 语句。
-
-
LOW_PRIORITY LOCK TABLES …写。
LOCK TABLES 的子句 ...WRITE
语句自那时起就没有效果了 MySQL 5.5 的 5.5 版本,并在 MySQL 5.6 中弃用。不是 在 MySQL 8.4 中不再受支持;现在将其包含在 中会导致语法错误。LOW_PRIORITY``LOCK TABLES
-
EXPLAIN FORMAT=JSON 格式版本控制。 现在可以在 2 个 版本的“MissAV” 使用此版本中引入的
explain_json_format_version
服务器系统变量的语句使用的 JSON 输出格式。设置 this 变量会导致服务器 使用版本 1,这是线性格式,始终是 用于 MySQL 8.2 中此类语句的输出,并且 早些时候。这是 MySQL 中的默认值和格式 8.4. 设置为 Version 2 格式 使用;此 JSON 输出格式基于访问路径, ,旨在提供更好的兼容性 MySQL Optimizer 的未来版本。EXPLAIN FORMAT=JSON``1``explain_json_format_version``2
有关更多信息,请参阅 获取执行计划信息 信息和示例。
-
捕获 EXPLAIN FORMAT=JSON 输出。 扩展为 一个选项,该选项提供了 能够将 JSON 格式的输出存储在用户变量中,以便使用 使用 MySQL JSON 函数,如下所示:
EXPLAIN FORMAT=JSON``INTO``EXPLAIN
mysql> EXPLAIN FORMAT=JSON INTO @myex SELECT name FROM a WHERE id = 2; Query OK, 0 rows affected (0.00 sec)mysql> SELECT JSON_EXTRACT(@myex, "$.query_block.table.key"); +------------------------------------------------+ | JSON_EXTRACT(@myex, "$.query_block.table.key") | +------------------------------------------------+ | "PRIMARY" | +------------------------------------------------+ 1 row in set (0.01 sec)
仅当语句还包含 ;否则,会出现语法错误 结果。此要求不受
explain_format
值的影响。EXPLAIN``FORMAT=JSON
INTO
可以与任何可解释的 语句,但 .它不能与 一起使用。EXPLAIN FOR CONNECTION``EXPLAIN ANALYZE
有关更多信息和示例,请参阅获取执行计划信息。
-
EXPLAIN 的 SCHEMA 中。 向
EXPLAIN
语句添加了一个选项。这 语法如下所示,其中stmt
是可解释的 陈述:FOR SCHEMA
EXPLAIN [options] FOR SCHEMA schema_name stmt
这会导致
stmt
像 在命名架构中。FOR DATABASE
也支持作为 同义词。此选项与 不兼容。
FOR CONNECTION
有关更多信息,请参阅 获取执行计划信息 信息。
-
保留客户评论。 在 MySQL 8.0 中,从 mysql 客户端剥离 Comments 是默认行为; 默认设置已更改以保留此类注释。
要启用注释剥离,就像在 MySQL 8.0 及更早版本,使用
--skip-comments
启动 mysql 客户端。 -
AUTO_INCREMENT 列和浮点列。 修饰符的使用 在
CREATE TABLE
和ALTER TABLE
语句中,FLOAT
和DOUBLE
列为 在 MySQL 8.0 中已弃用;对它的支持已删除 在 MySQL 8.4 中,它会引发ER_WRONG_FIELD_SPEC
(不正确的列说明符 列)。AUTO_INCREMENT
在从以前的系列升级到 MySQL 8.4 之前,_必须_修复任何包含 or 列的表 with so so table no longer 使用其中任何一个。否则,升级将失败 .
FLOAT``DOUBLE``AUTO_INCREMENT
-
mysql_ssl_rsa_setup 实用程序。 已删除 MySQL 8.0.34 中弃用的 mysql_ssl_rsa_setup 实用程序。为 使用 OpenSSL 编译的 MySQL 发行版,MySQL server 可以自动执行缺失的 SSL 和 RSA 文件。有关以下内容,请参见第 8.3.3.1 节“使用 MySQL 创建 SSL 和 RSA 证书和密钥” 更多信息。
-
MySQL 权限。 新增
SET_ANY_DEFINER
权限(用于创建定义器对象)和ALLOW_NONEXISTENT_DEFINER
权限(用于孤立对象保护)。这些一起 权限与已弃用的SET_USER_ID
权限共存。 -
SET_USER_ID特权。 权限(已弃用) 在 MySQL 8.2.0 中,已删除。在
GRANT
语句中使用现在会导致 语法错误SET_USER_ID
您可以使用
SET_ANY_DEFINER
权限,而不是 。 定义者对象创建,以及用于孤立对象保护的ALLOW_NONEXISTENT_DEFINER
权限。SET_USER_ID
生成孤立的 SQL 对象需要这两个权限 使用
CREATE PROCEDURE、
CREATE FUNCTION、
CREATE TRIGGER、
CREATE EVENT
或CREATE VIEW
。 -
–abort-slave-event-count 和 --disconnect-slave-event-count 服务器 选项。 MySQL 服务器启动选项 和 ,以前称为 在测试中使用,在 MySQL 8.0 中已弃用,并且具有 已在此版本中删除。现在尝试使用这些选项中的任何一个启动 mysqld 导致错误。
--abort-slave-event-count``--disconnect-slave-event-count
-
mysql_upgrade 实用程序。 已删除 MySQL 8.0.16 中弃用的 mysql_upgrade 实用程序。
-
mysqlpump 实用程序。 mysqlpump 实用程序 以及它的辅助工具 lz4_decompress 和 zlib_decompress, 在 MySQL 8.0.34 中已弃用,已被删除。请改用 mysqldump 或 MySQL Shell 的 dump 实用程序。
-
过时的 CMake 选项。 使用 CMake 编译服务器的以下选项 已过时并已被删除:
-
USE_LD_LLD
:请改用WITH_LD=lld
。 -
WITH_BOOST
、 、 :这些选项 不再需要;MySQL 现在包含并使用 从源码编译时捆绑的 Boost 版本。DOWNLOAD_BOOST``DOWNLOAD_BOOST_TIMEOUT
-
-
删除了关键字。 自 MySQL 8.0 以来,MySQL 8.4 中删除的关键字。保留 关键字标有 (R)。
GET_MASTER_PUBLIC_KEY
、 、 、 (R)、 、MASTER_AUTO_POSITION``MASTER_BIND``MASTER_COMPRESSION_ALGORITHMS``MASTER_CONNECT_RETRY``MASTER_DELAY``MASTER_HEARTBEAT_PERIOD``MASTER_HOST``MASTER_LOG_FILE``MASTER_LOG_POS``MASTER_PASSWORD``MASTER_PORT``MASTER_PUBLIC_KEY_PATH``MASTER_RETRY_COUNT``MASTER_SSL``MASTER_SSL_CA``MASTER_SSL_CAPATH``MASTER_SSL_CERT``MASTER_SSL_CIPHER``MASTER_SSL_CRL``MASTER_SSL_CRLPATH``MASTER_SSL_KEY``MASTER_SSL_VERIFY_SERVER_CERT``MASTER_TLS_CIPHERSUITES``MASTER_TLS_VERSION``MASTER_USER``MASTER_ZSTD_COMPRESSION_LEVEL
-
分区键中的索引前缀。 允许带有索引前缀的列出现在 MySQL 8.0 中分区表的分区键,以及 在创建时引发了没有其他效果的警告, 更改或升级分区表。此类列 在分区表中不再允许,并且使用 分区键中的任何此类列都会导致 它们碰巧被拒绝并显示错误。
文档来源
https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html