MySQL8 中文参考(一百一十四)(mysql8.0中文)

MySQL8 中文参考(一百一十四) 原文:docs.oracle.com/javase/tutorial/reallybigindex.html 原文:dev.mysql.com/doc/refman/8.0/

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

原文:dev.mysql.com/doc/refman/8.0/en/sys-extract-schema-from-file-name.html

30.4.5.1 extract_schema_from_file_name() 函数

给定文件路径名,返回表示模式名称的路径组件。该函数假设文件名位于模式目录中。因此,它不适用于使用自己的DATA_DIRECTORY 表选项定义的分区或表。

此函数对于从包含文件路径名的性能模式中提取文件I/O 信息非常有用。这提供了一种便捷的方式来显示比完整路径名更容易理解的模式名称,并且可用于与对象模式名称连接。

参数

path VARCHAR(512): 用于提取架构名称的数据文件的完整路径。

返回值

VARCHAR(64) 值。

示例

mysql SELECT sys.extract_schema_from_file_name(\’/usr/local/mysql/data/world/City.ibd\’);

+————————————————- ———————–+

| sys.extract_schema_from_file_name(\’/usr/local/mysql/data/world/City.ibd\’) |

+————————————————- ———————–+

| 世界|

+————————————————- ———————–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-format-bytes.html

30.4.5.3 format_bytes() 函数

消息

从MySQL 版本8.0.16 开始,format_bytes()“function\’\’) 已弃用,并且可能会在未来的MySQL 版本中删除。使用此函数的应用程序应迁移为使用内置的FORMAT_BYTES()` 函数。请参阅性能架构函数。

给定多个字节,将其转换为人类可读的格式并返回由值和单位指示符组成的字符串。根据值的大小,单位为字节、KiB(千比字节)、MiB(兆比字节)、GiB(吉比字节)、TiB(太比字节)或PiB(皮比字节)。

参数

bytes TEXT:要格式化的字节数。

返回值

文本值。

示例

mysql 选择sys.format_bytes(512), sys.format_bytes(18446644073709551615);

+———————-+————————– —————–+

sys.format_bytes(512) | sys.format_bytes(18446644073709551615)

+———————-+————————– —————–+

| 512 字节| 16383.91 PiB

+———————-+————————– —————–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-format-path.html

30.4.5.4 format_path()函数

给定一个路径名,按顺序用以下系统变量的值替换匹配的子路径后返回修改后的路径名:

数据目录

临时目录

Slave_load_tmpdir 或replica_load_tmpdir

innodb_data_home_dir

innodb_log_group_home_dir

innodb_undo_directory

基目录

任何与系统变量*sysvar* 的值匹配的值都将替换为字符串@@GLOBAL.*sysvar*。

参数

path VARCHAR(512): 要格式化的路径名。

返回数值

VARCHAR(512) 字符集utf8mb3 值。

示例

mysql SELECT sys.format_path(\’/usr/local/mysql/data/world/City.ibd\’);

+————————————————- ——–+

| sys.format_path(\’/usr/local/mysql/data/world/City.ibd\’)

+————————————————- ——–+

| @@datadir/world/City.ibd |

+————————————————- ——–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-format-statement.html

30.4.5.5 The format_statement() Function

将指定字符串(通常表示SQL 语句)截断为statements_truncate_len 配置选项指定的长度并返回结果。如果字符串短于statement_truncate_len,则不会发生截断。否则,字符串的中间部分将替换为省略号(.)。

此函数将从性能模式表检索的长语句格式化为已知的固定最大长度。

参数

Statement LONGTEXT:需要格式化的语句。

配置选项

可以使用以下配置选项或相应的用户定义变量来修改format_statement() 函数的操作(请参见第30.4.2.1 节“sys_config 表”):

statements_truncate_len,@sys.statement_truncate_len

format_statement() 函数返回的语句的最大长度。超过此长度的语句将被截断至此长度。默认值为64。

返回值

长文本值。

示例

默认情况下,format_statement() 函数将语句截断为64 个字符或更少。设置@sys.statement_truncate_len 会更改当前会话的截断长度。

mysql SET @stmt=\’从sys_config 选择变量、值、set_time、set_by\’;

mysql SELECT sys.format_statement(@stmt);

+————————————————- ——–+

| sys.format_statement(@stmt) |

+————————————————- ——–+

| 从sys_config 中选择变量、值、set_time、set_by

+————————————————- ——–+

mysql SET @sys.statement_truncate_len=32;

mysql SELECT sys.format_statement(@stmt);

+——————————–+

| sys.format_statement(@stmt) |

+——————————–+

| 选择变量. ROM sys_config |

+——————————–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-format-time.html

30.4.5.6 format_time() 函数

消息

从MySQL 8.0.16 开始,format_time() 函数已弃用,并将在未来的MySQL 版本中删除。使用此功能的应用程序应迁移为使用内置的FORMAT_PICO_TIME() 函数。请参阅性能架构函数。

给定性能模式延迟或等待时间(以皮秒为单位),将其转换为人类可读的格式并返回由值和单位指示符组成的字符串。根据值的大小,单位部分为ps(皮秒)、ns(纳秒)、us(微秒)、ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天) ) 或w(周)。

参数

皮秒文本:要格式化的皮秒值。

返回值

文本值。

示例

mysql 选择sys.format_time(3501), sys.format_time(188732396662000);

+———————-+————————– ————+

sys.format_time(3501) | sys.format_time(188732396662000)

+———————-+————————– ————+

| 3.50ns | 3.15m |

+———————-+————————– ————+

dev.mysql.com/doc/refman/8.0/en/sys-list-add.html

30.4.5.7 list_add()函数

将一个值添加到以逗号分隔的值列表中并返回结果。

此函数和list_drop() 函数对于接受以逗号分隔的值列表的操作系统变量(例如sql_mode 和optimizer_switch)的值很有用。

参数

in_list TEXT:需要修改的列表。

in_add_value 文本:要添加到列表中的值。

返回值

文本值。

示例

mysql 选择@@sql_mode;

+———————————————— +

| @@sql_模式|

+———————————————— +

| ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES |

+———————————————— +

mysql SET @@sql_mode=sys.list_add(@@sql_mode, \’NO_ENGINE_SUBSTITUTION\’);

mysql 选择@@sql_mode;

+————————————————- ————–+

| @@sql_模式|

+————————————————- ————–+

| ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ENGINE_SUBSTITUTION |

+————————————————- ————–+

mysql SET @@sql_mode=sys.list_drop(@@sql_mode, \’ONLY_FULL_GROUP_BY\’);

mysql 选择@@sql_mode;

+————————————————- +

| @@sql_模式|

+————————————————- +

| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |

+————————————————- +

原文:dev.mysql.com/doc/refman/8.0/en/sys-list-drop.html

30.4.5.8 list_drop() 函数

从逗号分隔的值列表中删除一个值并返回结果。有关详细信息,请参阅list_add()“ 函数的说明。

参数

in_list TEXT: 要更改的列表。

in_drop_value TEXT: 要从列表中删除的值。

返回值

文本值。

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-is-account-enabled.html

30.4.5.9 ps_is_account_enabled() 函数

返回YES 或NO 指示是否为指定帐户启用性能模式检测。

参数

in_host VARCHAR(60): 要检查的帐户的主机名。

in_user VARCHAR(32): 要检查的帐户的用户名。

返回值

ENUM(\’是\’,\’否\’) 值。

示例

mysql SELECT sys.ps_is_account_enabled(\’localhost\’, \’root\’);

+————————————————+

| sys.ps_is_account_enabled(\’localhost\’, \’root\’) |

+————————————————+

| 是|

+————————————————+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-is-consumer-enabled.html

30.4.5.10 ps_is_consumer_enabled() 函数

返回YES 或NO 来指示是否启用指定的性能模式使用者,如果参数为NULL,则返回NULL。如果参数不是有效的使用者名称,则会发生错误。 (在MySQL 8.0.18 之前,如果参数不是有效的使用者名称,该函数将返回NULL。)

此函数考虑了消费者层次结构,因此除非所有相关消费者也有效,否则它不会被视为有效。有关消费者层次结构的更多信息,请参阅第29.4.7 节“按消费者进行预过滤”。

参数

in_consumer VARCHAR(64): 要检查的使用者的名称。

返回值

ENUM(\’是\’,\’否\’) 值。

示例

mysql SELECT sys.ps_is_consumer_enabled(\’thread_instrumentation\’);

+————————————————- —-+

| sys.ps_is_consumer_enabled(\’thread_instrumentation\’) |

+————————————————- —-+

| 是|

+————————————————- —-+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-is-instrument-default-enabled.html

30.4.5.11 ps_is_instrument_default_enabled()函数

返回YES 或NO 指示默认情况下是否启用指定的性能模式工具。

参数

in_instrument VARCHAR(128): 要检查的仪器的名称。

返回值

ENUM(\’是\’,\’否\’) 值。

示例

mysql SELECT sys.ps_is_instrument_default_enabled(\’内存/innodb/row_log_buf\’);

+————————————————- —————–+

| sys.ps_is_instrument_default_enabled(\’内存/innodb/row_log_buf\’) |

+————————————————- —————–+

| 没有|

+————————————————- —————–+

mysql SELECT sys.ps_is_instrument_default_enabled(\’语句/sql/alter_user\’);

+————————————————- —————–+

| sys.ps_is_instrument_default_enabled(\’语句/sql/alter_user\’) |

+————————————————- —————–+

| 是|

+————————————————- —————–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-is-instrument-default-timed.html

30.4.5.12 ps_is_instrument_default_timed()函数

返回YES 或NO 指示指定的性能模式工具是否默认测量时间。

参数

in_instrument VARCHAR(128): 要检查的仪器的名称。

返回值

ENUM(\’是\’,\’否\’) 值。

示例

mysql SELECT sys.ps_is_instrument_default_timed(\’内存/innodb/row_log_buf\’);

+————————————————- ————–+

| sys.ps_is_instrument_default_timed(\’内存/innodb/row_log_buf\’) |

+————————————————- ————–+

| 没有|

+————————————————- ————–+

mysql SELECT sys.ps_is_instrument_default_timed(\’语句/sql/alter_user\’);

+————————————————- ————–+

| sys.ps_is_instrument_default_timed(\’语句/sql/alter_user\’) |

+————————————————

—————————–+
| YES |
+—————————————————————-+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-is-thread-instrumented.html

30.4.5.13 ps_is_thread_instrumented()函数

返回YES或NO以指示给定连接 ID 的性能模式仪器是否启用,如果 ID 未知则返回UNKNOWN,如果 ID 为NULL则返回NULL。

参数

in_connection_id BIGINT UNSIGNED:连接 ID。这是性能模式threads表中PROCESSLIST_ID列或SHOW PROCESSLIST输出中Id列中给定类型的值。

返回值

一个ENUM(\’YES\’,\’NO\’,\’UNKNOWN\’)值。

示例

mysql> SELECT sys.ps_is_thread_instrumented(43);
+———————————–+
| sys.ps_is_thread_instrumented(43) |
+———————————–+
| UNKNOWN |
+———————————–+
mysql> SELECT sys.ps_is_thread_instrumented(CONNECTION_ID());
+————————————————+
| sys.ps_is_thread_instrumented(CONNECTION_ID()) |
+————————————————+
| YES |
+————————————————+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-account.html

30.4.5.14 ps_thread_account()函数

给定一个性能模式线程 ID,返回与该线程关联的*user_name*@*host_name*账户。

参数

in_thread_id BIGINT UNSIGNED:要返回账户的线程 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。

返回值

一个TEXT值。

示例

mysql> SELECT sys.ps_thread_account(sys.ps_thread_id(CONNECTION_ID()));
+———————————————————-+
| sys.ps_thread_account(sys.ps_thread_id(CONNECTION_ID())) |
+———————————————————-+
| root@localhost |
+———————————————————-+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-id.html

30.4.5.15 ps_thread_id()函数

注意

截至 MySQL 8.0.16,ps_thread_id() Function\”)已被弃用,并将在未来的 MySQL 版本中移除。使用它的应用程序应该迁移到使用内置的PS_THREAD_ID()和PS_CURRENT_THREAD_ID()函数。参见第 14.21 节,“性能模式函数”

返回给定连接 ID 分配的性能模式线程 ID,如果连接 ID 为NULL,则返回当前连接的线程 ID。

参数

in_connection_id BIGINT UNSIGNED: 要返回线程 ID 的连接的 ID。这是性能模式threads表中PROCESSLIST_ID列中给定类型的值,或SHOW PROCESSLIST输出中的Id列。

返回值

一个BIGINT UNSIGNED值。

示例

mysql> SELECT sys.ps_thread_id(260);
+———————–+
| sys.ps_thread_id(260) |
+———————–+
| 285 |
+———————–+

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-stack.html

30.4.5.16 ps_thread_stack() 函数

返回给定线程 ID 的性能模式中所有语句、阶段和事件的 JSON 格式堆栈。

参数

in_thread_id BIGINT: 要跟踪的线程的 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。
in_verbose BOOLEAN: 是否在事件中包含file:lineno信息。

返回值

一个LONGTEXT CHARACTER SET latin1值。

示例

mysql> SELECT sys.ps_thread_stack(37, FALSE) AS thread_stack\\G
*************************** 1\\. row ***************************
thread_stack: {\”rankdir\”: \”LR\”,\”nodesep\”: \”0.10\”,
\”stack_created\”: \”2014-02-19 13:39:03\”, \”mysql_version\”: \”8.0.2-dmr-debug-log\”,
\”mysql_user\”: \”root@localhost\”,\”events\”: [{\”nesting_event_id\”: \”0\”,
\”event_id\”: \”10\”, \”timer_wait\”: 256.35, \”event_info\”: \”sql/select\”,
\”wait_info\”: \”select @@version_comment limit 1\\nerrors: 0\\nwarnings: 0\\nlock time:

原文:dev.mysql.com/doc/refman/8.0/en/sys-ps-thread-trx-info.html

30.4.5.17 The ps_thread_trx_info() Function

返回一个包含有关给定线程信息的 JSON 对象。该信息包括当前事务以及它已经执行的语句,从性能模式events_transactions_current和events_statements_history表中获取的。(这些表的消费者必须启用才能在 JSON 对象中获取完整数据。)

如果输出超过截断长度(默认为 65535),将返回一个 JSON 错误对象,例如:

{ \”error\”: \”Trx info truncated: Row 6 was cut by GROUP_CONCAT()\” }

在函数执行期间引发的其他警告和异常会返回类似的错误对象。

参数

in_thread_id BIGINT UNSIGNED:要返回事务信息的线程 ID。该值应与某些性能模式threads表行的THREAD_ID列匹配。

配置选项

ps_thread_trx_info() Function\”) 操作可以使用以下配置选项或它们对应的用户定义变量进行修改(参见第 30.4.2.1 节,“sys_config 表”):

ps_thread_trx_info.max_length,@sys.ps_thread_trx_info.max_length
输出的最大长度。默认为 65535。

返回值

一个LONGTEXT值。

示例

mysql> SELECT sys.ps_thread_trx_info(48)\\G
*************************** 1\\. row ***************************
sys.ps_thread_trx_info(48): [
{
\”time\”: \”790.70 us\”,
\”state\”: \”COMMITTED\”,
\”mode\”: \”READ WRITE\”,
\”autocommitted\”: \”NO\”,
\”gtid\”: \”AUTOMATIC\”,
\”isolation\”: \”REPEATABLE READ\”,
\”statements_executed\”: [
{
\”sql_text\”: \”INSERT INTO info VALUES (1, \\\’foo\\\’)\”,
\”time\”: \”471.02 us\”,
\”schema\”: \”trx\”,
\”rows_examined\”: 0,
\”rows_affected\”: 1,
\”rows_sent\”: 0,
\”tmp_tables\”: 0,
\”tmp_disk_tables\”: 0,
\”sort_rows\”: 0,
\”sort_merge_passes\”: 0
},
{
\”sql_text\”: \”COMMIT\”,
\”time\”: \”254.42 us\”,
\”schema\”: \”trx\”,
\”rows_examined\”: 0,
\”rows_affected\”: 0,
\”rows_sent\”: 0,
\”tmp_tables\”: 0,
\”tmp_disk_tables\”: 0,
\”sort_rows\”: 0,
\”sort_merge_passes\”: 0
}
]
},
{
\”time\”: \”426.20 us\”,
\”state\”: \”COMMITTED\”,
\”mode\”: \”READ WRITE\”,
\”autocommitted\”: \”NO\”,
\”gtid\”: \”AUTOMATIC\”,
\”isolation\”: \”REPEATABLE READ\”,
\”statements_executed\”: [
{
\”sql_text\”: \”INSERT INTO info VALUES (2, \\\’bar\\\’)\”,
\”time\”: \”107.33 us\”,
\”schema\”: \”trx\”,
\”rows_examined\”: 0,
\”rows_affected\”: 1,
\”rows_sent\”: 0,
\”tmp_tables\”: 0,
\”tmp_disk_tables\”: 0,
\”sort_rows\”: 0,
\”sort_merge_passes\”: 0
},
{
\”sql_text\”: \”COMMIT\”,
\”time\”: \”213.23 us\”,
\”schema\”: \”trx\”,
\”rows_examined\”: 0,
\”rows_affected\”: 0,
\”rows_sent\”: 0,
\”tmp_tables\”: 0,
\”tmp_disk_tables\”: 0,
\”sort_rows\”: 0,
\”sort_merge_passes\”: 0
}
]
}
]

原文:dev.mysql.com/doc/refman/8.0/en/sys-quote-identifier.html

30.4.5.18 quote_identifier()函数

给定一个字符串参数,此函数生成一个适合包含在 SQL 语句中的带引号标识符。当要用作标识符的值是保留字或包含反引号时,这将非常有用。

mysql> SELECT sys.quote_identifier(‘plain’);

±——————————+

sys.quote_identifier(‘plain’)
±——————————+

plain
±——————————+

mysql> SELECT sys.quote_identifier(‘trick`ier’);

±———————————-+

sys.quote_identifier(‘trick`ier’)
±———————————-+

trick“ier
±———————————-+

mysql> SELECT sys.quote_identifier(‘integer’);

±——————————–+

sys.quote_identifier(‘integer’)
±——————————–+

integer
±——————————–+

> 原文:[`dev.mysql.com/doc/refman/8.0/en/sys-sys-get-config.html`](https://dev.mysql.com/doc/refman/8.0/en/sys-sys-get-config.html)
#### 30.4.5.19 sys_get_config()函数
给定配置选项名称,从`sys_config`表中返回选项值,如果该选项在表中不存在,则返回提供的默认值(可能为`NULL`)。
如果`sys_get_config()`函数\”)返回默认值且该值为`NULL`,则期望调用者能够处理给定配置选项的`NULL`。
按照惯例,调用`sys_get_config()`函数\”)的例程首先检查相应的用户定义变量是否存在且非`NULL`。如果是,则例程使用变量值而不读取`sys_config`表中的选项值。如果变量不存在或为`NULL`,则例程从表中读取选项值并将用户定义变量设置为该值。有关配置选项及其相应用户定义变量之间关系的更多信息,请参见第 30.4.2.1 节,“sys_config 表”。
如果要检查配置选项是否已设置,并在没有设置时使用`sys_get_config()`的返回值,可以使用`IFNULL(…)`(见后面的示例)。但是,这不应该在循环内执行(例如,在结果集中的每一行),因为对于需要在第一次迭代中才需要赋值的重复调用,使用`IFNULL(…)`预计比使用`IF (…) THEN … END IF;`块要慢得多(见后面的示例)。
##### 参数
+ `in_variable_name VARCHAR(128)`: 要返回值的配置选项的名称。
+ `in_default_value VARCHAR(128)`: 如果在`sys_config`表中找不到配置选项,则返回的默认值。
##### 返回值
一个`VARCHAR(128)`值。
##### 示例
从`sys_config`表中获取配置值,如果该选项在表中不存在,则返回默认值 128:
“`sql
mysql> SELECT sys.sys_get_config(\’statement_truncate_len\’, 128) AS Value;
+——-+
| Value |
+——-+
| 64 |
+——-+

一行示例:检查选项是否已设置;如果没有,则分配IFNULL(…)结果(使用sys_config表中的值):

mysql> SET @sys.statement_truncate_len =
IFNULL(@sys.statement_truncate_len,
sys.sys_get_config(\’statement_truncate_len\’, 64));

IF (…) THEN … END IF;块示例:检查选项是否已设置;如果没有,则分配sys_config表中的值:

IF (@sys.statement_truncate_len IS NULL) THEN
SET @sys.statement_truncate_len = sys.sys_get_config(\’statement_truncate_len\’, 64);
END IF;

dev.mysql.com/doc/refman/8.0/en/sys-version-major.html

30.4.5.20 version_major()函数

此函数返回 MySQL 服务器的主要版本。

参数

无。

返回值

一个TINYINT UNSIGNED值。

示例

mysql> SELECT VERSION(), sys.version_major();
+————–+———————+
| VERSION() | sys.version_major() |
+————–+———————+
| 8.0.26-debug | 8 |
+————–+———————+

原文:dev.mysql.com/doc/refman/8.0/en/sys-version-minor.html

30.4.5.21 版本次要() 函数

此函数返回 MySQL 服务器的次要版本。

参数

无。

返回值

一个 TINYINT UNSIGNED 值。

示例

mysql> SELECT VERSION(), sys.version_minor();
+————–+———————+
| VERSION() | sys.version_minor() |
+————–+———————+
| 8.0.26-debug | 0 |
+————–+———————+

原文:dev.mysql.com/doc/refman/8.0/en/sys-version-patch.html

30.4.5.22 版本 _patch() 函数

此函数返回 MySQL 服务器的补丁发布版本。

参数

无。

返回值

一个TINYINT UNSIGNED值。

示例

mysql> SELECT VERSION(), sys.version_patch();
+————–+———————+
| VERSION() | sys.version_patch() |
+————–+———————+
| 8.0.26-debug | 26 |
+————–+———————+

第三十一章 连接器和 API

原文:dev.mysql.com/doc/refman/8.0/en/connectors-apis.html

目录

31.1 MySQL Connector/C++

31.2 MySQL Connector/J

31.3 MySQL Connector/NET

31.4 MySQL Connector/ODBC

31.5 MySQL Connector/Python

31.6 MySQL Connector/Node.js

31.7 MySQL C API

31.8 MySQL PHP API

31.9 MySQL Perl API

31.10 MySQL Python API

31.11 MySQL Ruby APIs

31.11.1 MySQL/Ruby API

31.11.2 Ruby/MySQL API

31.12 MySQL Tcl API

31.13 MySQL Eiffel Wrapper

MySQL 连接器为客户端程序提供了与 MySQL 服务器的连接。API 使用经典的 MySQL 协议或 X 协议提供对 MySQL 资源的低级访问。连接器和 API 都使您能够从另一种语言或环境连接和执行 MySQL 语句,包括 ODBC、Java(JDBC)、C++、Python、Node.js、PHP、Perl、Ruby 和 C。

MySQL 连接器

Oracle 开发了许多连接器:

Connector/C++ 使 C++应用程序能够连接到 MySQL。
Connector/J 提供了驱动程序支持,用于使用标准的 Java 数据库连接(JDBC)API 从 Java 应用程序连接到 MySQL。
Connector/NET 使开发人员能够创建连接到 MySQL 的.NET 应用程序。Connector/NET 实现了完全功能的 ADO.NET 接口,并提供了与 ADO.NET 感知工具一起使用的支持。使用 Connector/NET 的应用程序可以用任何支持的.NET 语言编写。
Connector/ODBC 提供了驱动程序支持,用于使用开放数据库连接(ODBC)API 连接到 MySQL。支持从 Windows、Unix 和 macOS 平台进行 ODBC 连接。
Connector/Python 提供了驱动程序支持,用于使用符合Python DB API version 2.0的 API 从 Python 应用程序连接到 MySQL。不需要额外的 Python 模块或 MySQL 客户端库。
Connector/Node.js提供了一个异步 API,用于使用 X 协议从 Node.js 应用程序连接到 MySQL。Connector/Node.js 支持管理数据库会话和模式,处理 MySQL 文档存储集合,并使用原始 SQL 语句。

MySQL C API

要直接在 C 应用程序中使用 MySQL,C API 通过libmysqlclient客户端库提供了对 MySQL 客户端/服务器协议的低级访问。这是连接到 MySQL 服务器实例的主要方法,被 MySQL 命令行客户端和这里详细介绍的许多 MySQL 连接器和第三方 API 所使用。

libmysqlclient包含在 MySQL 发行版中。

另请参阅 MySQL C API 实现。

要从 C 应用程序访问 MySQL,或者为本章中未支持的语言构建与 MySQL 的接口,C API 是起点。有许多程序员工具可用于帮助处理此过程;请参阅第 6.7 节,“程序开发工具”。

第三方 MySQL API

本章描述的其余 API 提供了从特定应用程序语言到 MySQL 的接口。这些第三方解决方案并非由 Oracle 开发或支持。这里仅提供它们的使用和能力的基本信息供参考。

所有第三方语言 API 都是使用两种方法之一开发的,使用libmysqlclient或通过实现本机驱动程序。这两种解决方案提供不同的好处:

使用*libmysqlclient*完全兼容 MySQL,因为它使用与 MySQL 客户端应用程序相同的库。但是,功能集仅限于通过libmysqlclient公开的实现和接口,性能可能较低,因为数据在本机语言和 MySQL API 组件之间进行复制。
本机驱动程序是完全在主机语言或环境中实现 MySQL 网络协议的驱动程序。本机驱动程序速度快,因为在组件之间的数据复制较少,并且可以提供标准 MySQL API 无法提供的高级功能。本机驱动程序也更容易供最终用户构建和部署,因为构建本机驱动程序组件不需要 MySQL 客户端库的副本。

表 31.1,“MySQL API 和接口”列出了许多可用于 MySQL 的库和接口。

表 31.1 MySQL API 和接口

环境API类型备注AdaGNU Ada MySQL 绑定libmysqlclient请参阅GNU Ada 的 MySQL 绑定CC APIlibmysqlclient请参阅 MySQL 8.0 C API 开发人员指南。C++连接器/C++libmysqlclient请参阅 MySQL Connector/C++ 8.3 开发人员指南。MySQL++libmysqlclient请参阅MySQL++网站。MySQL wrappedlibmysqlclient查看MySQL wrapped。CocoaMySQL-Cocoalibmysqlclient与 Objective-C Cocoa 环境兼容。查看mysql-cocoa.sourceforge.net/。DD 的 MySQLlibmysqlclient查看D 的 MySQL。EiffelEiffel MySQLlibmysqlclient查看第 31.13 节,“MySQL Eiffel 包装器”。Erlangerlang-mysql-driverlibmysqlclient查看erlang-mysql-driver。HaskellHaskell MySQL 绑定本地驱动程序查看Brian O’Sullivan 的纯 Haskell MySQL 绑定。hsql-mysqllibmysqlclient查看Haskell 的 MySQL 驱动程序。Java/JDBCConnector/J本地驱动程序查看 MySQL Connector/J 8.0 开发者指南。KayaMyDBlibmysqlclient查看MyDB。LuaLuaSQLlibmysqlclient查看LuaSQL。.NET/MonoConnector/NET本地驱动程序查看 MySQL Connector/NET 开发者指南。Objective CamlObjective Caml MySQL 绑定libmysqlclient查看Objective Caml 的 MySQL 绑定。OctaveGNU Octave 的数据库绑定libmysqlclient查看GNU Octave 的数据库绑定。ODBCConnector/ODBClibmysqlclient查看 MySQL Connector/ODBC 开发者指南。PerlDBI/DBD::mysqllibmysqlclient查看第 31.9 节,“MySQL Perl API”。Net::MySQL本地驱动程序查看Net::MySQL在 CPAN 上。PHPmysql,ext/mysql接口(已弃用)libmysqlclient查看 MySQL 和 PHP。mysqli,ext/mysqli接口libmysqlclient查看 MySQL 和 PHP。PDO_MYSQLlibmysqlclient查看 MySQL 和 PHP。PDO mysqlnd本地驱动程序PythonConnector/Python本地驱动程序查看 MySQL Connector/Python 开发者指南。PythonConnector/Python C 扩展libmysqlclient查看 MySQL Connector/Python 开发者指南。MySQLdblibmysqlclient查看第 31.10 节,“MySQL Python API”。Rubymysql2libmysqlclient使用libmysqlclient。查看第 31.11 节,“MySQL Ruby APIs”。SchemeMyscshlibmysqlclient查看Myscsh。SPLsql_mysqllibmysqlclient查看SPL 中的sql_mysql。TclMySQLtcllibmysqlclient查看第 31.12 节,“MySQL Tcl API”。环境API类型备注

31.1 MySQL Connector/C++

原文:dev.mysql.com/doc/refman/8.0/en/connector-cpp-info.html

MySQL Connector/C++ 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关信息,请参阅以下文档:

主要手册:MySQL Connector/C++ 8.3 开发人员指南
发行说明:MySQL Connector/C++ 发行说明

31.2 MySQL Connector/J

原文:dev.mysql.com/doc/refman/8.0/en/connector-j-info.html

MySQL Connector/J 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关详细信息,请参阅以下文档:

主要手册:MySQL Connector/J 开发人员指南
发行说明:MySQL Connector/J 发行说明

31.3 MySQL Connector/NET

原文:dev.mysql.com/doc/refman/8.0/en/connector-net-info.html

MySQL Connector/NET 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关详细信息,请参阅这些文档:

主要手册:MySQL Connector/NET 开发人员指南
发行说明:MySQL Connector/NET 发行说明

31.4 MySQL Connector/ODBC

原文:dev.mysql.com/doc/refman/8.0/en/connector-odbc-info.html

MySQL Connector/ODBC 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关详细信息,请参阅这些文档:

主要手册:MySQL Connector/ODBC 开发人员指南
发行说明:MySQL Connector/ODBC 发行说明

31.5 MySQL Connector/Python

原文:dev.mysql.com/doc/refman/8.0/en/connector-python-info.html

MySQL Connector/Python 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关详细信息,请参阅以下文档:

主要手册:MySQL Connector/Python 开发者指南
发布说明:MySQL Connector/Python 发布说明

31.6 MySQL Connector/Node.js

原文:dev.mysql.com/doc/refman/8.0/en/connector-nodejs-info.html

MySQL Connector/Node.js 手册以独立形式发布,而不作为 MySQL 参考手册的一部分。有关信息,请参阅以下文档:

发行说明:MySQL Connector/Node.js 发行说明

31.7 MySQL C API

原文:dev.mysql.com/doc/refman/8.0/en/c-api-info.html

MySQL C API 开发者指南以独立形式发布,而不作为 MySQL 参考手册的一部分。请参阅 MySQL 8.0 C API 开发者指南。

31.8 MySQL PHP API

原文:dev.mysql.com/doc/refman/8.0/en/apis-php-info.html

MySQL PHP API 手册现在以独立形式发布,不再作为 MySQL 参考手册的一部分。请参阅 MySQL and PHP。

31.9 MySQL Perl API

原文:dev.mysql.com/doc/refman/8.0/en/apis-perl.html

Perl DBI 模块提供了一个通用的数据库访问接口。您可以编写一个可以与许多不同数据库引擎一起使用的 DBI 脚本,而无需更改。要与 MySQL 一起使用 DBI,请安装以下内容:

DBI 模块。
DBD::mysql 模块。这是 Perl 的 DataBase Driver (DBD) 模块。
可选地,用于访问其他类型数据库服务器的 DBD 模块。

Perl DBI 是推荐的 Perl 接口。它取代了一个名为 mysqlperl 的旧接口,应被视为过时。

这些部分包含有关在 Perl 中与 MySQL 一起使用以及在 Perl 中编写 MySQL 应用程序的信息:

有关 Perl DBI 支持的安装说明,请参见 第 2.10 节,“Perl 安装说明”。
有关从选项文件中读取选项的示例,请参见 第 7.8.4 节,“在多服务器环境中使用客户端程序”。
有关安全编码提示,请参见 第 8.1.1 节,“安全指南”。
有关调试提示,请参见 第 7.9.1.4 节,“在 gdb 下调试 mysqld”。
有关一些 Perl 特定的环境变量,请参见 第 6.9 节,“环境变量”。
关于在 macOS 上运行的考虑,请参见 第 2.4 节,“在 macOS 上安装 MySQL”。
有关引用字符串文字的方法,请参见 第 11.1.1 节,“字符串文字”。

DBI 信息可以在命令行、在线或印刷形式中获得:

一旦安装了 DBI 和 DBD::mysql 模块,您可以使用 perldoc 命令在命令行获取有关它们的信息:
$> perldoc DBI
$> perldoc DBI::FAQ
$> perldoc DBD::mysql
您还可以使用 pod2man、pod2html 等工具将此信息转换为其他格式。
有关 Perl DBI 的在线信息,请访问 DBI 网站 dbi.perl.org/。该网站托管了一个通用的 DBI 邮件列表。
有关印刷信息,官方的 DBI 书籍是 Programming the Perl DBI(Alligator Descartes 和 Tim Bunce,O’Reilly & Associates,2000)。有关该书的信息可在 DBI 网站 dbi.perl.org/ 上找到。

31.10 MySQL Python API

原文:dev.mysql.com/doc/refman/8.0/en/apis-python.html

MySQLdb 是一个第三方驱动程序,为 Python 提供 MySQL 支持,符合 Python DB API 版本 2.0。它可以在 sourceforge.net/projects/mysql-python/ 找到。

新的 MySQL Connector/Python 组件提供了与相同 Python API 的接口,并内置于 MySQL Server 中,由 Oracle 支持。有关 Connector 的详细信息,请参阅 MySQL Connector/Python Developer Guide,以及 Python 应用程序的编码准则和示例 Python 代码。

31.11 MySQL Ruby APIs

原文:dev.mysql.com/doc/refman/8.0/en/apis-ruby.html

31.11.1 MySQL/Ruby API

31.11.2 Ruby/MySQL API

mysql2 Ruby gem 提供了一个用于连接到 MySQL、执行查询和遍历结果的 API;它旨在支持 MySQL 5.7 和 MySQL 8.0。更多信息,请参阅RubyGems.org 上的 mysql2 页面或项目的GitHub 页面。

有关 Ruby 语言的背景和语法信息,请参阅Ruby 编程语言。

31.11.1 MySQL/Ruby API

原文:dev.mysql.com/doc/refman/8.0/en/apis-ruby-mysqlruby.html

MySQL/Ruby 模块通过libmysqlclient提供了使用 Ruby 访问 MySQL 数据库的功能。

有关安装该模块以及公开的函数的信息,请参阅MySQL/Ruby。

31.11.2 Ruby/MySQL API

原文:dev.mysql.com/doc/refman/8.0/en/apis-ruby-rubymysql.html

Ruby/MySQL 模块通过使用 MySQL 网络协议提供了使用 Ruby 访问 MySQL 数据库的本地驱动程序接口。

有关安装该模块以及公开的函数的信息,请参阅Ruby/MySQL。

31.12 MySQL Tcl API

原文:dev.mysql.com/doc/refman/8.0/en/apis-tcl.html

MySQLtcl是一个简单的 API,用于从Tcl 编程语言访问 MySQL 数据库服务器。它可以在www.xdobry.de/mysqltcl/找到。

31.13 MySQL Eiffel 包装器

原文:dev.mysql.com/doc/refman/8.0/en/apis-eiffel.html

Eiffel MySQL 是使用Eiffel 编程语言编写的与 MySQL 数据库服务器交互的接口,作者是 Michael Ravits。可以在efsa.sourceforge.net/archive/ravits/mysql.htm找到。

第三十二章 MySQL 企业版

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise.html

目录

32.1 MySQL 企业备份概述

32.2 MySQL 企业安全概述

32.3 MySQL 企业加密概述

32.4 MySQL 企业审计概述

32.5 MySQL 企业防火墙概述

32.6 MySQL 企业线程池概述

32.7 MySQL 企业数据脱敏和去标识化概述

32.8 MySQL 企业监控概述

32.9 MySQL 遥测

MySQL 企业版是一款商业产品。与 MySQL 社区版一样,MySQL 企业版包括 MySQL 服务器,一个完全集成的事务安全、ACID 兼容的数据库,具有完整的提交、回滚、崩溃恢复和行级锁定功能。此外,MySQL 企业版还包括以下组件,旨在提供监控和在线备份,以及改进的安全性和可扩展性:

以下各节简要讨论了每个组件,并指出了如何找到更详细的信息。要了解更多关于商业产品的信息,请参阅www.mysql.com/products/。

MySQL 企业备份
MySQL 企业安全
MySQL 企业加密
MySQL 企业审计
MySQL 企业防火墙
MySQL 企业线程池
MySQL 企业数据脱敏和去标识化
MySQL 企业监控

32.1 MySQL 企业备份概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-backup.html

MySQL 企业备份执行 MySQL 数据库的热备份操作。该产品的架构旨在对由 InnoDB 存储引擎创建的表进行高效可靠的备份。为了完整性,它还可以备份来自 MyISAM 和其他存储引擎的表。

以下讨论简要总结了 MySQL 企业备份。有关更多信息,请参阅 MySQL 企业备份手册,网址为dev.mysql.com/doc/mysql-enterprise-backup/en/。

热备份是在数据库运行并且应用程序正在读写时执行的。这种类型的备份不会阻塞正常的数据库操作,并且即使在备份过程中发生更改,也会捕获这些更改。出于这些原因,当您的数据库“成熟”时,即数据足够大以至于备份需要显著时间,并且您的数据对您的业务非常重要以至于您必须捕获每一个变化而不使您的应用程序、网站或网络服务下线时,热备份是可取的。

MySQL 企业备份对使用 InnoDB 存储引擎的所有表进行热备份。对于使用 MyISAM 或其他非 InnoDB 存储引擎的表,它进行“温暖”备份,数据库继续运行,但在备份过程中这些表无法修改。为了进行高效的备份操作,您可以将 InnoDB 指定为新表的默认存储引擎,或将现有表转换为使用 InnoDB 存储引擎。

32.2 MySQL 企业安全概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-security.html

MySQL 企业版提供实现安全功能的插件,使用外部服务:

MySQL 企业版包括一个认证插件,使 MySQL 服务器能够使用 LDAP(轻量级目录访问协议)来认证 MySQL 用户。LDAP 认证支持用户名和密码、SASL 以及 GSSAPI/Kerberos 认证方法连接到 LDAP 服务。更多信息,请参见 Section 8.4.1.7,“LDAP 可插拔认证”。
MySQL 企业版包括一个认证插件,使 MySQL 服务器能够使用本地 Kerberos 来认证 MySQL 用户使用其 Kerberos Principals。更多信息,请参见 Section 8.4.1.8,“Kerberos 可插拔认证”。
MySQL 企业版包括一个认证插件,使 MySQL 服务器能够使用 PAM(可插拔认证模块)来认证 MySQL 用户。PAM 使系统能够使用标准接口访问各种认证方法,如 Unix 密码或 LDAP 目录。更多信息,请参见 Section 8.4.1.5,“PAM 可插拔认证”。
MySQL 企业版包括一个在 Windows 上执行外部认证的认证插件,使 MySQL 服务器能够使用本机 Windows 服务来认证客户端连接。已登录 Windows 的用户可以根据其环境中的信息从 MySQL 客户端程序连接到服务器,而无需指定额外密码。更多信息,请参见 Section 8.4.1.6,“Windows 可插拔认证”。
MySQL 企业版包括一套掩码和去识别函数,执行子集、随机生成和字典替换以去识别字符串、数字、电话号码、电子邮件等。这些函数使得可以使用多种方法对现有数据进行掩码,如混淆(删除识别特征)、生成格式化的随机数据以及数据替换或替代。更多信息,请参见 Section 8.5,“MySQL 企业数据掩码和去识别”。
MySQL 企业版包括一组基于 OpenSSL 库的加密函数,将 OpenSSL 功能暴露在 SQL 级别。更多信息,请参见 Section 32.3,“MySQL 企业加密概述”。
MySQL 企业版 5.7 及更高版本包括一个使用 Oracle Key Vault 作为密钥环存储后端的密钥环插件。更多信息,请参见第 8.4.4 节,“MySQL 密钥环”。
MySQL 透明数据加密(TDE)为 MySQL 服务器中可能包含敏感数据的所有文件提供静态加密。更多信息,请参见第 17.13 节,“InnoDB 静态数据加密”,第 19.3.2 节,“加密二进制日志文件和中继日志文件”,以及加密审计日志文件。

对于其他相关的企业安全功能,请参见第 32.3 节,“MySQL 企业加密概述”。

32.3 MySQL 企业加密概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-encryption.html

MySQL 企业版包括一组基于 OpenSSL 库的加密函数,这些函数在 SQL 级别暴露了 OpenSSL 的功能。这些函数使企业应用程序能够执行以下操作:

使用公钥非对称加密实现额外的数据保护
创建公钥和私钥以及数字签名
执行非对称加密和解密
使用加密哈希进行数字签名和数据验证

欲了解更多信息,请参阅第 8.6 节,“MySQL 企业加密”。

欲了解其他相关的企业安全功能,请参阅第 32.2 节,“MySQL 企业安全概述”。

32.4 MySQL 企业审计概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-audit.html

MySQL 企业版包括使用服务器插件实现的 MySQL 企业审计。MySQL 企业审计使用开放的 MySQL 审计 API,可以对特定 MySQL 服务器上执行的连接和查询活动进行标准、基于策略的监控和记录。MySQL 企业审计旨在满足 Oracle 审计规范,为受内部和外部监管指导的应用程序提供了一个开箱即用、易于使用的审计和合规解决方案。

安装后,审计插件使 MySQL 服务器能够生成一个包含服务器活动审计记录的日志文件。日志内容包括客户端连接和断开的时间,以及连接时执行的操作,例如访问哪些数据库和表。

更多信息,请参阅 第 8.4.5 节,“MySQL 企业审计”.

32.5 MySQL 企业防火墙概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-firewall.html

MySQL 企业版包括 MySQL 企业防火墙,这是一个应用级防火墙,允许数据库管理员根据匹配接受语句模式的允许列表来允许或拒绝 SQL 语句的执行。这有助于加固 MySQL 服务器,防范诸如 SQL 注入或试图利用应用程序以外的合法查询工作负载特征来攻击的行为。

每个在防火墙中注册的 MySQL 账户都有自己的语句允许列表,可以根据账户进行定制化保护。对于给定的账户,防火墙可以在记录或保护模式下运行,用于训练接受的语句模式或保护不可接受的语句。

更多信息,请参见 第 8.4.7 节,“MySQL 企业防火墙”。

32.6 MySQL 企业版线程池概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-thread-pool.html

MySQL 企业版包括 MySQL 企业版线程池,使用服务器插件实现。MySQL 服务器中的默认线程处理模型使用一个线程来执行每个客户端连接的语句。随着更多客户端连接到服务器并执行语句,整体性能会下降。在 MySQL 企业版中,一个线程池插件提供了一个旨在减少开销并提高性能的替代线程处理模型。该插件实现了一个线程池,通过有效地管理大量客户端连接的语句执行线程来提高服务器性能。

欲了解更多信息,请参阅第 7.6.3 节,“MySQL 企业版线程池”。

32.7 MySQL 企业数据脱敏和去标识化概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-data-masking.html

MySQL 企业版 5.7 及更高版本包括 MySQL 企业数据脱敏和去标识化,实现为包含插件和多个可加载函数的插件库。数据脱敏通过用替代值替换真实值来隐藏敏感信息。MySQL 企业数据脱敏和去标识化函数使得可以使用多种方法对现有数据进行脱敏,例如混淆(删除识别特征)、生成格式化的随机数据以及数据替换或替代。

有关更多信息,请参阅第 8.5 节,“MySQL 企业数据脱敏和去标识化”。

32.8 MySQL 企业监控器概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-monitor.html

有关 MySQL 企业监控器行为的信息,请参阅 MySQL 企业监控器手册:dev.mysql.com/doc/mysql-monitor/en/。

重要

MySQL 企业监控器将于 2025 年 1 月 1 日停止生命周期并被淘汰。

在此日期之后,MySQL 企业监控器将不再接收安全更新、非安全更新、错误修复或在线技术内容更新。它将转向Sustaining Support 模式。

当 MySQL 企业监控器达到生命周期终点(EOL)时可以期待什么:

MySQL 将停止为该产品进行所有错误修复活动
MySQL 将停止为该产品进行所有安全修复活动
MySQL 将停止为该产品进行所有新功能工作

持续支持不包括:

新的程序更新、修复、安全警报和关键补丁更新
新的税收、法律或监管更新
新的升级脚本
与新第三方产品/版本的认证
24 小时承诺和响应准则,适用于在名为“Oracle 软件技术支持政策”中定义的“第 9 节 – 严重性定义”中定义的严重性 1 服务请求
Oracle 此前已撤回的先前发布的修复或更新。旧版或现有的已发布软件包将作为存档内容保留。

有关 Oracle 技术支持政策集,请访问:www.oracle.com/support/policies.html

欲了解不同支持模式(如持续支持)的解释,请访问:www.oracle.com/support/lifetime-support/

对于目前使用较早版本的 MySQL 企业监控器的客户,您的选择包括:

使用 MySQL 的企业管理器。这是一个免费产品,适用于拥有有效 Oracle 支持合同的客户。欲了解更多信息,请访问使用企业管理器对 MySQL 数据库进行全面监控和合规管理。
使用 OCI 数据库管理服务的数据库监控功能。对于 MySQL 本地客户,这是一个即将推出的付费功能。欲了解更多信息,请访问MySQL HeatWave 的数据库管理。

受影响的部署

MySQL 企业监控器服务管理器适用于 Linux x86(64 位)
MySQL 企业监控器代理适用于 Linux x86(64 位)
MySQL 企业监控器服务管理器适用于 Windows x86(64 位)
MySQL 企业监控器代理适用于 Microsoft Windows x86(64 位)
MySQL 企业监控器服务管理器适用于 Mac OS X x86(64 位)
MySQL 企业监控代理程序适用于 Mac OS X x86(64 位)

32.9 MySQL 遥测

原文:dev.mysql.com/doc/refman/8.0/en/mysql-enterprise-telemetry.html

MySQL 遥测组件基于开放遥测(OTel)项目,这是一个开源、供应商中立的可观察性框架,提供了一个通用的可观察性标准。它使用户能够为他们的应用程序添加仪表,以便导出可观察性数据:跟踪、指标和日志,从而增加调试和测试的细粒度。

欲了解更多信息,请参阅遥测。

第三十三章 MySQL Workbench

原文:dev.mysql.com/doc/refman/8.0/en/workbench.html

MySQL Workbench 提供了一个用于与 MySQL 服务器和数据库交互的图形工具。MySQL Workbench 完全支持 MySQL 版本 5.5 及更高版本。

以下讨论简要描述了 MySQL Workbench 的功能。有关更多信息,请参阅 MySQL Workbench 手册,网址为dev.mysql.com/doc/workbench/en/。

MySQL Workbench 提供五个主要功能领域:

SQL 开发:使您能够创建和管理与数据库服务器的连接。除了使您能够配置连接参数外,MySQL Workbench 还提供了使用内置 SQL 编辑器在数据库连接上执行 SQL 查询的功能。此功能取代了以前由 Query Browser 独立应用程序提供的功能。
数据建模:使您能够以图形方式创建数据库模式的模型,反向和正向工程之间的模式和实时数据库,并使用全面的表编辑器编辑数据库的所有方面。表编辑器提供了易于使用的功能,用于编辑表、列、索引、触发器、分区、选项、插入和权限、例程和视图。
服务器管理:使您能够创建和管理服务器实例。
数据迁移:允许您从 Microsoft SQL Server、Sybase ASE、SQLite、SQL Anywhere、PostreSQL 和其他 RDBMS 表、对象和数据迁移到 MySQL。迁移还支持从早期版本的 MySQL 迁移到最新版本。
MySQL 企业支持:支持企业产品,如 MySQL 企业备份和 MySQL 审计。

MySQL Workbench 有两个版本,社区版和商业版。社区版免费提供。商业版提供额外的企业功能,如数据库文档生成,成本低廉。

第三十四章 MySQL 在 OCI 市场上

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace.html

目录

34.1 在 Oracle 云基础设施上部署 MySQL EE 的先决条件

34.2 在 Oracle 云基础设施上部署 MySQL EE

34.3 配置网络访问

34.4 连接

34.5 维护

本章描述了如何将 MySQL 企业版部署为 Oracle 云基础设施(OCI)市场应用程序。这是一种 BYOL 产品。

注意

有关 OCI 市场的更多信息,请参阅市场概述。

MySQL 企业版市场应用程序是一个运行 Oracle Linux 7.9 的 OCI 计算实例,带有 MySQL EE 8.0。部署图像上的 MySQL EE 安装类似于 RPM 安装,如第 2.5.4 节,“使用来自 Oracle 的 RPM 包在 Linux 上安装 MySQL”中所述。

有关 MySQL 企业版的更多信息,请参阅第三十二章,MySQL 企业版。

有关 MySQL 高级配置的更多信息,请参阅安全部署指南。

有关 Oracle Linux 7 的更多信息,请参阅Oracle Linux 文档

本产品由用户管理,这意味着您负责升级和维护。

部署 MySQL EE 到 Oracle Cloud Infrastructure 的先决条件 34.1

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace-prereqs.html

以下假设已经做出:

你熟悉 OCI 术语。如果你是 OCI 的新手,请参阅入门指南。
你可以访问一个正确配置的虚拟云网络(VCN)和子网。更多信息,请参阅虚拟网络。
你有权限在你租户的一个区段中部署 OCI Marketplace 应用程序。更多信息,请参阅策略工作原理。

34.2 在 Oracle 云基础设施上部署 MySQL EE

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace-deploy.html

在 Oracle 云基础设施上部署 MySQL EE,请执行以下操作:

打开 OCI Marketplace 并选择 MySQL。
显示了 MySQL 列表。
单击“启动实例”开始应用程序启动过程。
显示“创建计算实例”对话框。
有关如何填写字段的信息,请参阅创建 Linux 实例。

默认情况下,MySQL 服务器监听端口 3306,并配置有单个用户 root。

重要

部署完成并启动 MySQL 服务器后,您必须连接到计算实例并检索写入 MySQL 日志文件的默认 root 密码。

有关更多信息,请参阅使用 SSH 连接。

已安装以下 MySQL 软件:

MySQL 服务器 EE
MySQL 企业备份
MySQL Shell
MySQL 路由器

MySQL 配置

出于安全考虑,以下内容已启用:

SELinux:有关更多信息,请参阅配置和使用 SELinux
firewalld:有关更多信息,请参阅控制 firewalld 防火墙服务

已启用以下 MySQL 插件:

thread_pool
validate_password

启动时,会发生以下情况:

MySQL 服务器读取 /etc/my.cnf 和 /etc/my.cnf.d/ 中所有名为 ***.cnf 的文件。
/etc/my.cnf.d/perf-tuning.cnf 是由 /usr/bin/mkcnf 基于所选的 OCI 形状创建的。
注意
要禁用此机制,请删除 /etc/systemd/system/mysqld.service.d/perf-tuning.conf。
针对以下形状配置了性能调整:

VM.Standard2.1
VM.Standard2.2
VM.Standard2.4
VM.Standard2.8
VM.Standard2.16
VM.Standard2.24
VM.Standard.E2.1
VM.Standard.E2.2
VM.Standard.E2.4
VM.Standard.E2.8
VM.Standard.E3.Flex
VM.Standard.E4.Flex
BM.Standard2.52
对于所有其他形状,使用 VM.Standard2.1 的调整。

34.3 配置网络访问

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace-network-configuration.html

有关 OCI 安全规则的信息,请参阅安全规则。

重要

您必须在以下端口上启用入口:

22: SSH
3306: MySQL
33060: (可选)MySQL X 协议。由 MySQL Shell 使用。

34.4 连接

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace-connecting.html

本节描述了连接到 OCI 计算实例上部署的 MySQL 服务器的各种连接方法。

通过 SSH 连接

本节详细介绍了如何从类 UNIX 平台连接到 OCI 计算实例。有关使用 SSH 连接的更多信息,请参阅使用 SSH 访问 Oracle Linux 实例和连接到您的实例。

要通过 SSH 连接到运行在计算实例上的 Oracle Linux,请运行以下命令:

ssh opc@*computeIP*

其中opc是计算用户,*computeIP*是您计算实例的 IP 地址。

要查找为 root 用户创建的临时根密码,请运行以下命令:

sudo grep \’temporary password\’ /var/log/mysqld.log

要更改默认密码,请使用生成的临时密码登录服务器,使用以下命令:mysql -uroot -p。然后运行以下命令:

ALTER USER \’root\’@\’localhost\’ IDENTIFIED BY \’MyNewPass4!\’;

使用 MySQL 客户端连接

注意

要从本地 MySQL 客户端连接,您必须首先在 MySQL 服务器上创建一个允许远程登录的用户。

要从本地 MySQL 客户端连接到 MySQL 服务器,请在您的 shell 会话中运行以下命令:

mysql -uroot -p -h*computeIP*

其中*computeIP*是您计算实例的 IP 地址。

使用 MySQL Shell 连接

要从本地 MySQL Shell 连接到 MySQL 服务器,请运行以下命令启动您的 shell 会话:

mysqlsh \\connect root@*computeIP*

其中*computeIP*是您计算实例的 IP 地址。

有关 MySQL Shell 连接的更多信息,请参阅 MySQL Shell 连接。

连接到工作台

要从 MySQL Workbench 连接到 MySQL 服务器,请参阅 MySQL Workbench 中的连接。

34.5 维护

原文:dev.mysql.com/doc/refman/8.0/en/mysql-oci-marketplace-maintenance.html

该产品是用户管理的,意味着您负责升级和维护。

升级 MySQL

现有安装是基于 RPM 的,要升级 MySQL 服务器,请参见第 3.7 节,“在 Unix/Linux 上升级 MySQL 二进制或基于包的安装”。

您可以使用 scp 将所需的 RPM 复制到 OCI 计算实例,或者从 OCI 对象存储中复制,如果您已配置访问权限。文件存储也是一个选择。更多信息,请参见文件存储和 NFS。

备份和恢复

MySQL Enterprise Backup 是首选的备份和恢复解决方案。更多信息,请参见备份到云存储。

有关 MySQL Enterprise Backup 的信息,请参见开始使用 MySQL Enterprise Backup。

有关默认 MySQL 备份和恢复的信息,请参见第九章,备份和恢复。

附录 A MySQL 8.0 常见问题解答

原文:dev.mysql.com/doc/refman/8.0/en/faqs.html

目录

A.1 MySQL 8.0 常见问题解答:常规

A.2 MySQL 8.0 常见问题解答:存储引擎

A.3 MySQL 8.0 常见问题解答:服务器 SQL 模式

A.4 MySQL 8.0 常见问题解答:存储过程和函数

A.5 MySQL 8.0 常见问题解答:触发器

A.6 MySQL 8.0 常见问题解答:视图

A.7 MySQL 8.0 常见问题解答:INFORMATION_SCHEMA

A.8 MySQL 8.0 常见问题解答:迁移

A.9 MySQL 8.0 常见问题解答:安全性

A.10 MySQL 8.0 常见问题解答:NDB 集群

A.11 MySQL 8.0 常见问题解答:MySQL 中文、日文和韩文字符集

A.12 MySQL 8.0 常见问题解答:连接器和 API

A.13 MySQL 8.0 常见问题解答:C API, libmysql

A.14 MySQL 8.0 常见问题解答:复制

A.15 MySQL 8.0 常见问题解答:MySQL 企业线程池

A.16 MySQL 8.0 常见问题解答:InnoDB 变更缓冲区

A.17 MySQL 8.0 常见问题解答:InnoDB 数据静态加密

A.18 MySQL 8.0 常见问题解答:虚拟化支持

A.1 MySQL 8.0 FAQ:通用问题

原文:dev.mysql.com/doc/refman/8.0/en/faqs-general.html

A.1.1. 哪个版本的 MySQL 是生产就绪(GA)的?

A.1.2. 为什么 MySQL 版本号跳过了 6 和 7 版直接到 8.0 版?

A.1.3. MySQL 8.0 能做子查询吗?

A.1.4. MySQL 8.0 能执行多表插入、更新和删除吗?

A.1.5. MySQL 8.0 有序列吗?

A.1.6. MySQL 8.0 有带秒的 NOW() 函数吗?

A.1.7. MySQL 8.0 能与多核处理器一起工作吗?

A.1.8. 为什么我看到 mysqld 有多个进程?

A.1.9. MySQL 8.0 能执行 ACID 事务吗?

A.1.1.哪个版本的 MySQL 是生产就绪(GA)的?MySQL 8.3 和 8.0 目前都在积极支持生产使用。MySQL 8.1 是第一个创新版本,于 2023 年 7 月 18 日发布,供生产使用。创新版本轨道从 8.1.0 开始,可能会继续增加次要版本,如 8.2.0 和 8.3.0,直到 8.4.0 开始一个新的 LTS 系列。创新版本包含新功能和错误修复。MySQL 8.0 在 2018 年 4 月 19 日发布的 MySQL 8.0.11 版本中获得了通用可用性(GA)状态。随着创新版本轨道的引入,MySQL 8.0.34 成为了一个 bug 修复系列。MySQL 5.7 在 2015 年 10 月 21 日发布的 MySQL 5.7.9 版本中获得了通用可用性(GA)状态。MySQL 5.7 的活跃开发于 2023 年 10 月 25 日以 MySQL 5.7.44 版本结束。MySQL 5.6 在 2013 年 2 月 5 日发布的 MySQL 5.6.10 版本中获得了通用可用性(GA)状态。MySQL 5.6 的活跃开发已经结束。MySQL 5.5 在 2010 年 12 月 3 日发布的 MySQL 5.5.8 版本中获得了通用可用性(GA)状态。MySQL 5.5 的活跃开发已经结束。MySQL 5.1 在 2008 年 11 月 14 日发布的 MySQL 5.1.30 版本中获得了通用可用性(GA)状态。MySQL 5.1 的活跃开发已经结束。MySQL 5.0 在 2005 年 10 月 19 日发布的 MySQL 5.0.15 版本中获得了通用可用性(GA)状态。MySQL 5.0 的活跃开发已经结束。A.1.2.为什么 MySQL 版本号跳过了 6 和 7 版直接到 8.0 版?由于我们在这个 MySQL 版本中引入了许多新的重要功能,我们决定开始一个全新的系列。由于 MySQL 实际上曾经使用过系列号 6 和 7,我们选择了 8.0 版本。A.1.3.MySQL 8.0 可以执行子查询吗?是的。参见第 15.2.15 节,“子查询”。A.1.4.MySQL 8.0 能执行多表插入、更新和删除吗?是的。有关执行多表更新所需的语法,请参见第 15.2.17 节,“UPDATE 语句”;执行多表删除所需的语法,请参见第 15.2.2 节,“DELETE 语句”。可以通过使用FOR EACH ROW子句包含多个INSERT语句的触发器来实现多表插入,在BEGIN … END块中。请参见第 27.3 节,“使用触发器”。A.1.5.MySQL 8.0 有序列吗?不。但是,MySQL 有一个AUTO_INCREMENT系统,在 MySQL 8.0 中也可以处理多源复制设置中的插入。通过auto_increment_increment和auto_increment_offset系统变量,您可以设置每个服务器生成不与其他服务器冲突的自增值。auto_increment_increment值应大于服务器数量,并且每个服务器应具有唯一的偏移量。A.1.6.MySQL 8.0 是否具有带有秒的NOW()函数?是的,参见第 13.2.6 节,“时间值中的小数秒”。A.1.7.MySQL 8.0 是否与多核处理器兼容?
| | 是的。MySQL 是完全多线程的,并利用所有可用的 CPU。并非所有 CPU 都可能可用;现代操作系统应该能够利用所有底层 CPU,但也可以限制进程仅在特定 CPU 或 CPU 组上运行。在 Windows 上,目前有一个限制,即mysqld可以使用的(逻辑)处理器数量有限:一个处理器组,最多限制为 64 个逻辑处理器。多核的使用可能体现在以下几种方式中:

通常使用单个核心来处理从一个会话发出的命令。
一些后台线程有限地利用额外的核心;例如,用于保持后台 I/O 任务的运行。
如果数据库受 I/O 限制(由 CPU 消耗少于容量表示),增加更多的 CPU 是徒劳的。如果数据库被分为 I/O 受限部分和 CPU 受限部分,增加 CPU 可能仍然有用。

|

A.1.8.为什么我看到mysqld有多个进程?mysqld 是一个单进程程序,不是一个多进程程序,也不会分叉或启动其他进程。然而,mysqld 是多线程的,一些进程报告系统工具会为多线程进程的每个线程显示单独的条目,这可能导致在实际上只有一个 mysqld 进程的情况下出现多个 mysqld 进程的外观。A.1.9.MySQL 8.0 能执行 ACID 事务吗?是的。所有当前的 MySQL 版本都支持事务。InnoDB 存储引擎提供了具有行级锁定、多版本控制、非锁定可重复读取和所有四个 SQL 标准隔离级别的完整 ACID 事务。NDB 存储引擎仅支持 READ COMMITTED 事务隔离级别。

A.2 MySQL 8.0 FAQ:存储引擎

原文:dev.mysql.com/doc/refman/8.0/en/faqs-storage-engines.html

A.2.1. 我在哪里可以获取 MySQL 存储引擎的完整文档?

A.2.2. MySQL 8.0 中是否有任何新的存储引擎?

A.2.3. MySQL 8.0 中是否移除了任何存储引擎?

A.2.4. 我可以阻止使用特定的存储引擎吗?

A.2.5. 仅使用 InnoDB 存储引擎是否比使用 InnoDB 和非 InnoDB 存储引擎的组合有优势?

A.2.6. ARCHIVE 存储引擎有哪些独特的优势?

A.2.1.我在哪里可以获取 MySQL 存储引擎的完整文档?请参阅 第十八章,“替代存储引擎”。该章节包含了除 InnoDB 存储引擎和 NDB 存储引擎(用于 MySQL Cluster)之外的所有 MySQL 存储引擎的信息。InnoDB 在 第十七章,“InnoDB 存储引擎” 中有介绍。NDB 在 第二十五章,“MySQL NDB Cluster 8.0” 中有介绍。A.2.2.MySQL 8.0 中是否有任何新的存储引擎?没有。InnoDB 是新表的默认存储引擎。有关详细信息,请参阅 第 17.1 节,“InnoDB 简介”。A.2.3.MySQL 8.0 中是否移除了任何存储引擎?提供分区支持的 PARTITION 存储引擎插件被本机分区处理程序取代。作为这一变化的一部分,服务器不能再使用 -DWITH_PARTITION_STORAGE_ENGINE 构建。partition 也不再显示在 SHOW PLUGINS 的输出中,或显示在 INFORMATION_SCHEMA.PLUGINS 表中。为了支持给定表的分区,现在用于表的存储引擎必须提供自己的(“本机”)分区处理程序。InnoDB 是 MySQL 8.0 中唯一支持本机分区处理程序的存储引擎。在 MySQL 8.0 中使用任何其他存储引擎创建分区表的尝试将失败。(MySQL Cluster 使用的 NDB 存储引擎也提供自己的分区处理程序,但目前不受 MySQL 8.0 支持。)A.2.4.我可以阻止使用特定存储引擎吗?是的。disabled_storage_engines 配置选项定义了哪些存储引擎不能用于创建表或表空间。默认情况下,disabled_storage_engines 为空(没有禁用的引擎),但可以设置为一个或多个引擎的逗号分隔列表。A.2.5.仅使用 InnoDB 存储引擎有什么优势,与使用 InnoDB 和非 InnoDB 存储引擎的组合相比?是的。仅使用 InnoDB 表可以简化备份和恢复操作。MySQL 企业版备份对所有使用 InnoDB 存储引擎的表进行热备份。对于使用 MyISAM 或其他非 InnoDB 存储引擎的表,它进行“温暖”备份,数据库继续运行,但这些表在备份时无法修改。参见第 32.1 节,“MySQL 企业版备份概述”。A.2.6.ARCHIVE 存储引擎的独特优势是什么?ARCHIVE 存储引擎存储大量数据而不使用索引;它占用空间小,并使用表扫描执行选择操作。详细信息请参见第 18.5 节,“ARCHIVE 存储引擎”。

A.3 MySQL 8.0 FAQ:服务器 SQL 模式

原文:dev.mysql.com/doc/refman/8.0/en/faqs-sql-modes.html

A.3.1. 什么是服务器 SQL 模式?

A.3.2. 服务器 SQL 模式有多少种?

A.3.3. 如何确定服务器 SQL 模式?

A.3.4. 模式是否依赖于数据库或连接?

A.3.5. 严格模式的规则可以扩展吗?

A.3.6. 严格模式会影响性能吗?

A.3.7. 当安装 MySQL 8.0 时,默认的服务器 SQL 模式是什么?

A.3.1.什么是服务器 SQL 模式?服务器 SQL 模式定义了 MySQL 应支持的 SQL 语法以及应执行的数据验证检查类型。这使得在不同环境中使用 MySQL 以及与其他数据库服务器一起使用 MySQL 变得更加容易。MySQL 服务器将这些模式分别应用于不同的客户端。更多信息,请参阅第 7.1.11 节,“服务器 SQL 模式”。A.3.2.服务器 SQL 模式有多少种?每种模式都可以独立开启和关闭。查看第 7.1.11 节,“服务器 SQL 模式”,获取可用模式的完整列表。A.3.3.如何确定服务器 SQL 模式?您可以使用–sql-mode选项设置默认的 SQL 模式(用于mysqld启动)。使用语句SET [GLOBAL|SESSION] sql_mode=\’*modes*\’,您可以在连接内部更改设置,可以在连接本地设置,也可以全局生效。您可以通过发出SELECT @@sql_mode语句来检索当前模式。A.3.4.模式是否依赖于数据库或连接?模式与特定数据库无关。模式可以在会话(连接)中本地设置,也可以在服务器全局设置。您可以使用SET [GLOBAL|SESSION] sql_mode=\’*modes*\’来更改这些设置。A.3.5.严格模式的规则可以扩展吗?当我们提到严格模式时,我们指的是至少启用了TRADITIONAL、STRICT_TRANS_TABLES或STRICT_ALL_TABLES中的一个模式。选项可以组合,因此您可以向模式添加限制。有关更多信息,请参见第 7.1.11 节,“服务器 SQL 模式”。A.3.6.严格模式会影响性能吗?一些设置对输入数据进行的密集验证需要比不进行验证时花费更多的时间。虽然性能影响并不那么大,如果您不需要这样的验证(也许您的应用程序已经处理了所有这些),那么 MySQL 可以让您选择禁用严格模式。但是,如果您需要它,严格模式可以提供这样的验证。A.3.7.MySQL 8.0 安装时的默认服务器 SQL 模式是什么?MySQL 8.0 中的默认 SQL 模式包括这些模式:ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO和NO_ENGINE_SUBSTITUTION。有关所有可用模式和默认 MySQL 行为的信息,请参见第 7.1.11 节,“服务器 SQL 模式”。

A.4 MySQL 8.0 FAQ:存储过程和函数

原文:dev.mysql.com/doc/refman/8.0/en/faqs-stored-procs.html

A.4.1. MySQL 8.0 支持存储过程和函数吗?

A.4.2. 我在哪里可以找到 MySQL 存储过程和存储函数的文档?

A.4.3. 是否有关于 MySQL 存储过程的讨论论坛?

A.4.4. 我在哪里可以找到 ANSI SQL 2003 存储过程规范?

A.4.5. 如何管理存储例程?

A.4.6. 有没有办法查看给定数据库中的所有存储过程和存储函数?

A.4.7. 存储过程存储在哪里?

A.4.8. 是否可以将存储过程或存储函数分组到包中?

A.4.9. 存储过程可以调用另一个存储过程吗?

A.4.10. 存储过程可以调用触发器吗?

A.4.11. 存储过程可以访问表吗?

A.4.12. 存储过程是否有用于引发应用程序错误的语句?

A.4.13. 存储过程提供异常处理吗?

A.4.14. MySQL 8.0 存储例程可以返回结果集吗?

A.4.15. 存储过程支持 WITH RECOMPILE 吗?

A.4.16. 是否有 MySQL 等效于在 Apache 上使用 mod_plsql 作为直接与数据库中存储过程通信的网关?

A.4.17. 我可以将数组作为输入传递给存储过程吗?

A.4.18. 我可以将游标作为 IN 参数传递给存储过程吗?

A.4.19. 我可以从存储过程中将游标作为 OUT 参数返回吗?

A.4.20. 我可以在存储例程中打印变量的值以进行调试吗?

A.4.21. 我可以在存储过程中提交或回滚事务吗?

A.4.22. MySQL 8.0 存储过程和函数是否与复制兼容?

A.4.23. 在复制源服务器上创建的存储过程和函数是否会被复制到副本?

A.4.24. 存储过程和函数内部发生的操作如何被复制?

A.4.25. 在使用存储过程和函数与复制一起时是否有特殊的安全要求?

A.4.26. 复制存储过程和函数操作存在哪些限制?

A.4.27. 上述限制是否影响 MySQL 进行点时间恢复的能力?

A.4.28. 正在做什么来纠正上述限制?

A.4.1.MySQL 8.0 是否支持存储过程和函数?是的。MySQL 8.0 支持两种类型的存储例程,存储过程和存储函数。A.4.2.我在哪里可以找到 MySQL 存储过程和存储函数的文档?请参阅 Section 27.2, “Using Stored Routines”。A.4.3.是否有关于 MySQL 存储过程的讨论论坛?是的。请参阅 forums.mysql.com/list.php?98。A.4.4.我在哪里可以找到 ANSI SQL 2003 存储过程的规范?不幸的是,官方规范并不是免费提供的(ANSI 让它们可以购买)。然而,有一些书籍,比如 Peter Gulutzan 和 Trudy Pelzer 的SQL-99 Complete, Really,提供了标准的全面概述,包括存储过程的覆盖范围。A.4.5.如何管理存储例程?对于你的存储例程使用清晰的命名方案始终是一个好习惯。你可以使用 CREATE [FUNCTION|PROCEDURE]、ALTER [FUNCTION|PROCEDURE]、DROP [FUNCTION|PROCEDURE] 和 SHOW CREATE [FUNCTION|PROCEDURE] 来管理存储过程。你可以使用 INFORMATION_SCHEMA 数据库中的 ROUTINES 表来获取有关现有存储过程的信息(参见 Section 28.3.30, “The INFORMATION_SCHEMA ROUTINES Table”)。A.4.6.是否有一种方法可以查看给定数据库中的所有存储过程和存储函数?
| | 能。对于名为*dbname*的数据库,在INFORMATION_SCHEMA.ROUTINES表上使用以下查询:

SELECT ROUTINE_TYPE, ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA=\’*dbname*\’;

有关更多信息,请参见第 28.3.30 节,“The INFORMATION_SCHEMA ROUTINES Table”。存储过程的主体可以使用SHOW CREATE FUNCTION(用于存储函数)或SHOW CREATE PROCEDURE(用于存储过程)来查看。有关更多信息,请参见第 15.7.7.9 节,“SHOW CREATE PROCEDURE Statement”。

A.4.7.存储过程存储在哪里?存储过程存储在 mysql.routines 和 mysql.parameters 表中,这些表是数据字典的一部分。您不能直接访问这些表。而是查询 INFORMATION_SCHEMA 的 ROUTINES 和 PARAMETERS 表。参见第 28.3.30 节,“The INFORMATION_SCHEMA ROUTINES Table”,以及第 28.3.20 节,“The INFORMATION_SCHEMA PARAMETERS Table”。您还可以使用SHOW CREATE FUNCTION获取有关存储函数的信息,以及SHOW CREATE PROCEDURE获取有关存储过程的信息。有关更多信息,请参见第 15.7.7.9 节,“SHOW CREATE PROCEDURE Statement”。A.4.8.是否可以将存储过程或存储函数分组到包中?不支持在 MySQL 8.0 中。A.4.9.存储过程能调用另一个存储过程吗?是的。A.4.10.存储过程能调用触发器吗?存储过程可以执行导致触发器激活的 SQL 语句,比如UPDATE。A.4.11.存储过程能访问表吗?是的。存储过程可以根据需要访问一个或多个表。A.4.12.存储过程有用于引发应用程序错误的语句吗?是的。MySQL 8.0 实现了 SQL 标准的 SIGNAL 和 RESIGNAL 语句。参见第 15.6.7 节,“条件处理”。A.4.13.存储过程提供异常处理吗?MySQL 根据 SQL 标准实现了HANDLER定义。详细信息请参见 Section 15.6.7.2, “DECLARE … HANDLER Statement”。A.4.14.MySQL 8.0 的存储过程能返回结果集吗?存储过程可以,但存储函数不行。如果在存储过程内执行普通的SELECT,结果集会直接返回给客户端。你需要使用 MySQL 4.1(或更高版本)的客户端/服务器协议才能实现这一点。这意味着,例如,在 PHP 中,你需要使用mysqli扩展而不是旧的mysql扩展。A.4.15.存储过程支持WITH RECOMPILE吗?MySQL 8.0 中不支持。A.4.16.MySQL 有没有类似于在 Apache 上使用mod_plsql作为网关直接与数据库中的存储过程通信的等价项?MySQL 8.0 中没有等价项。A.4.17.我能将数组作为输入传递给存储过程吗?MySQL 8.0 中不支持。A.4.18.我能将游标作为IN参数传递给存储过程吗?在 MySQL 8.0 中,游标仅在存储过程内部可用。A.4.19.我能将游标作为OUT参数从存储过程中返回吗?在 MySQL 8.0 中,游标仅在存储过程内部可用。但是,如果你没有在SELECT上打开游标,结果会直接发送给客户端。你也可以使用SELECT INTO变量。请参见 Section 15.2.13, “SELECT Statement”。A.4.20.我能在存储过��中打印变量的值以进行调试吗?是的,你可以在存储过程中执行此操作,但不能在存储函数中。如果在存储过程内执行普通的SELECT,结果集会直接返回给客户端。你必须使用 MySQL 4.1(或更高版本)的客户端/服务器协议才能实现这一点。这意味着,例如,在 PHP 中,你需要使用mysqli扩展而不是旧的mysql扩展。A.4.21.我能在存储过程内提交或回滚事务吗?是的。但是,你不能在存储函数内执行事务操作。A.4.22.MySQL 8.0 的存储过程和函数是否与复制兼容?是的,存储过程和函数中执行的标准操作会从复制源服务器复制到副本。有一些详细描述的限制,请参见 Section 27.7, “Stored Program Binary Logging”。A.4.23.在复制源服务器上创建的存储过程和函数是否会被复制到副本?是的,通过在复制源服务器上使用正常 DDL 语句执行的存储过程和函数的创建会被复制到副本中,以便这些对象存在于两个服务器上。存储过程和函数的ALTER和DROP语句也会被复制。A.4.24.存储过程和函数内部发生的操作如何复制?MySQL 记录存储过程中发生的每个 DML 事件,并将这些单独的操作复制到副本中。执行存储过程的实际调用不会被复制。更改数据的存储函数被记录为函数调用,而不是在每个函数内发生的 DML 事件。A.4.25.在复制中使用存储过程和函数是否有特殊的安全要求?
| | 是的。因为副本有权执行从源二进制日志中读取的任何语句,所以在使用存储函数与复制一起时存在特殊的安全约束。如果复制或二进制日志记录一般情况下(用于时点恢复)是活动的,则 MySQL DBA 有两种安全选项可供选择:

任何希望创建存储函数的用户必须被授予SUPER权限。
或者,DBA 可以将log_bin_trust_function_creators系统变量设置为 1,这样任何拥有标准CREATE ROUTINE权限的人都可以创建存储函数。

|

A.4.26.复制存储过程和函数操作存在哪些限制?嵌入存储过程中的非确定性(随机)或基于时间的操作可能无法正确复制。由于随机产生的结果本质上是不可预测的,也无法完全复制;因此,在副本上复制的随机操作不会与源上执行的操作相同。声明存储函数为DETERMINISTIC或将log_bin_trust_function_creators系统变量设置为 0,可以防止随机操作产生随机值。此外,基于时间的操作无法在副本上重现,因为存储过程中此类操作的时间安排无法通过用于复制的二进制日志复制。它仅记录 DML 事件,不考虑时间约束。最后,在进行大规模 DML 操作(如批量插入)时发生错误的非事务表可能会在复制过程中出现问题,因为源可能会因 DML 活动而部分更新,但由于发生的错误,副本不会进行更新。一种解决方法是使用IGNORE关键字执行函数的 DML 操作,以便忽略导致错误的源上更新,并将不导致错误的更新复制到副本上。A.4.27.前述限制是否影响 MySQL 进行点时间恢复的能力?影响复制的相同限制也会影响到点时间恢复。A.4.28.有什么措施正在采取来纠正上述限制?您可以选择基于语句的复制或基于行的复制。最初的复制实现是基于基于语句的二进制日志记录的。基于行的二进制日志记录解决了前面提到的限制。还提供了混合复制(通过使用–binlog-format=mixed启动服务器)。这种混合形式的复制“知道”是否可以安全地使用基于语句的复制,还是需要基于行的复制。有关更多信息,请参见 Section 19.2.1, “Replication Formats”。

A.5 MySQL 8.0 FAQ: Triggers

原文:dev.mysql.com/doc/refman/8.0/en/faqs-triggers.html

A.5.1. 我在哪里可以找到 MySQL 8.0 触发器的文档?

A.5.2. 是否有关于 MySQL 触发器的讨论论坛?

A.5.3. MySQL 8.0 是否具有语句级触发器还是行级触发器?

A.5.4. 是否有任何默认触发器?

A.5.5. MySQL 中的触发器是如何管理的?

A.5.6. 是否有一种方法可以查看给定数据库中的所有触发器?

A.5.7. 触发器存储在哪里?

A.5.8. 触发器是否可以调用存储过程?

A.5.9. 触发器是否可以访问表?

A.5.10. 一个表是否可以有多个具有相同触发器事件和操作时间的触发器?

A.5.11. 触发器是否可以更新远程服务器上的表?

A.5.12. 触发器是否与复制一起工作?

A.5.13. 如何通过触发器在源上执行的操作传递到副本上?

A.5.1.我在哪里可以找到 MySQL 8.0 触发器的文档?参见 Section 27.3, “Using Triggers”。A.5.2.是否有关于 MySQL 触发器的讨论论坛?是的。可在 forums.mysql.com/list.php?99 找到。A.5.3.MySQL 8.0 是否具有语句级触发器还是行级触发器?在 MySQL 8.0 中,所有触发器都是FOR EACH ROW;也就是说,触发器会在每插入、更新或删除的行上被激活。MySQL 8.0 不支持使用FOR EACH STATEMENT的触发器。A.5.4.是否有任何默认触发器?并非明确。MySQL 对于一些特定的TIMESTAMP列,以及使用AUTO_INCREMENT定义的列有特殊行为。A.5.5.MySQL 中的触发器是如何管理的?在 MySQL 8.0 中,可以使用CREATE TRIGGER语句创建触发器,并使用DROP TRIGGER删除触发器。有关这些语句的更多信息,请参见第 15.1.22 节,“CREATE TRIGGER Statement”和第 15.1.34 节,“DROP TRIGGER Statement”。可以通过查询INFORMATION_SCHEMA.TRIGGERS表来获取有关触发器的信息。请参见第 28.3.45 节,“INFORMATION_SCHEMA TRIGGERS Table”。A.5.6.有没有办法查看给定数据库中的所有触发器?
| | 是的。您可以使用对INFORMATION_SCHEMA.TRIGGERS表的查询来获取在数据库dbname上定义的所有触发器的列表,例如下面显示的查询:

SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_STATEMENT
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_SCHEMA=\’*dbname*\’;

有关此表格的更多信息,请参见第 28.3.45 节,“INFORMATION_SCHEMA TRIGGERS Table”。您还可以使用SHOW TRIGGERS语句,该语句专用于 MySQL。请参见第 15.7.7.40 节,“SHOW TRIGGERS Statement”。 |

A.5.7.触发器存储在哪里?触发器存储在mysql.triggers系统表中,该表是数据字典的一部分。A.5.8.触发器可以调用存储过程吗���是的。A.5.9.触发器可以访问表吗?触发器可以访问其自己表中的旧数据和新数据。触发器还可以影响其他表,但不允许修改已被调用函数或触发器的语句正在使用(读取或写入)的表。A.5.10.表格可以具有具有相同触发事件和操作时间的多个触发器吗?在 MySQL 8.0 中,可以为给定表定义具有相同触发事件和操作时间的多个触发器。例如,您可以为表定义两个BEFORE UPDATE触发器。默认情况下,具有相同触发事件和操作时间的触发器按创建顺序激活。要影响触发器顺序,请在FOR EACH ROW之后指定一个子句,指示FOLLOWS或PRECEDES以及具有相同触发事件和操作时间的现有触发器的名称。使用FOLLOWS,新触发器在现有触发器之后激活。使用PRECEDES,新触发器在现有触发器之前激活。A.5.11.触发器是否可以更新远程服务器上的表?是的。可以使用 FEDERATED 存储引擎更新远程服务器上的表(参见 第 18.8 节,“FEDERATED 存储引擎”)。A.5.12.触发器与复制一起工作吗?是的。然而,它们的工作方式取决于您是使用 MySQL 的“经典”基于语句还是基于行的复制格式。当使用基于语句的复制时,在复制品上执行触发器是由在源上执行的语句执行的(并复制到复制品)。当使用基于行的复制时,由于在源上运行然后复制到复制品的语句,触发器不会在复制品上执行。相反,当使用基于行的复制时,源上执行触发器引起的更改会应用于复制品。有关更多信息,请参见 第 19.5.1.36 节,“复制和触发器”。A.5.13.通过源上的触发器执行的操作如何复制到复制品?
| | 再次,这取决于您是使用基于语句还是基于行的复制。基于语句的复制。 首先,源上存在的触发器必须在复制品服务器上重新创建。完成此操作后,复制流程就像参与复制的任何其他标准 DML 语句一样工作。例如,考虑一个具有在复制源服务器上存在的 AFTER 插入触发器的 EMP 表。在复制品服务器上也存在相同的 EMP 表和 AFTER 插入触发器。复制流程将是:

向 EMP 进行了 INSERT 语句。
EMP 上的 AFTER 触发器被激活。
INSERT 语句被写入二进制日志。
复制品捡起 INSERT 语句到 EMP 并执行它。
复制品上存在的 EMP 上的 AFTER 触发器被激活。

基于行的复制。 当您使用基于行的复制时,源上执行触发器引起的更改会应用到副本上。然而,在基于行的复制下,触发器本身实际上不会在副本上执行。这是因为,如果源和副本都应用了源上的更改,并且触发这些更改的触发器在副本上也被应用,那么这些更改实际上会在副本上应用两次,导致源和副本上的数据不同。在大多数情况下,基于行和基于语句的复制的结果是相同的。然而,如果您在源和副本上使用不同的触发器,则无法使用基于行的复制。(这是因为基于行的格式将在源上执行的触发器引起的更改复制到副本上,而不是导致触发器执行的语句,副本上对应的触发器也不会被执行。)相反,导致这些触发器被执行的任何语句必须使用基于语句的复制进行复制。有关更多信息,请参见 Section 19.5.1.36, “Replication and Triggers”. |

A.6 MySQL 8.0 FAQ:视图

原文:dev.mysql.com/doc/refman/8.0/en/faqs-views.html

A.6.1. 我在哪里找到涵盖 MySQL 视图的文档?

A.6.2. 是否有关于 MySQL 视图的讨论论坛?

A.6.3. 如果基础表被删除或重命名,视图会发生什么?

A.6.4. MySQL 8.0 是否有表快照?

A.6.5. MySQL 8.0 是否有物化视图?

A.6.6. 是否可以向基于连接的视图插入数据?

A.6.1.我在哪里找到涵盖 MySQL 视图的文档?查看 Section 27.5,“使用视图”。您可能还会发现MySQL 用户论坛很有帮助。A.6.2.是否有关于 MySQL 视图的讨论论坛?查看MySQL 用户论坛。A.6.3.如果基础表被删除或重命名,视图会发生什么?创建视图后,可以删除或更改定义所指的表或视图。要检查此类问题的视图定义,请使用CHECK TABLE语句。(参见 Section 15.7.3.2,“CHECK TABLE Statement”.)A.6.4.MySQL 8.0 是否有表快照?没有。A.6.5.MySQL 8.0 是否有物化视图?没有。A.6.6.是否可以向基于连接的视图插入数据?可能,只要您的INSERT语句有一个清晰的列列表,表明只涉及一个表。您不能通过单个视图插入多个表。

A.7 MySQL 8.0 FAQ: INFORMATION_SCHEMA

原文:dev.mysql.com/doc/refman/8.0/en/faqs-information-schema.html

A.7.1. 我在哪里可以找到 MySQL INFORMATION_SCHEMA 数据库的文档?

A.7.2. 是否有关于 INFORMATION_SCHEMA 的讨论论坛?

A.7.3. 我在哪里可以找到 ANSI SQL 2003 关于 INFORMATION_SCHEMA 的规范?

A.7.4. Oracle 数据字典和 MySQL INFORMATION_SCHEMA 有什么区别?

A.7.5. 我可以添加或修改在 INFORMATION_SCHEMA 数据库中找到的表吗?

A.7.1.我在哪里可以找到 MySQL INFORMATION_SCHEMA数据库的文档?请参阅第二十八章,INFORMATION_SCHEMA Tables。您也可以在MySQL 用户论坛找到帮助。A.7.2.是否有关于INFORMATION_SCHEMA的讨论论坛?请参阅MySQL 用户论坛。A.7.3.我在哪里可以找到 ANSI SQL 2003 关于INFORMATION_SCHEMA的规范?不幸的是,官方规范并非免费提供。(ANSI 提供购买)。但是,有一些书籍可供参考,比如 Peter Gulutzan 和 Trudy Pelzer 的SQL-99 Complete, Really,提供了关于标准的全面概述,包括INFORMATION_SCHEMA。A.7.4.Oracle 数据字典和 MySQL INFORMATION_SCHEMA有什么区别?Oracle 和 MySQL 都在表中提供元数据。但是,Oracle 和 MySQL 使用不同的表名和列名。MySQL 的实现更类似于 DB2 和 SQL Server 中找到的实现,它们也支持 SQL 标准中定义的INFORMATION_SCHEMA。A.7.5.我可以添加或修改在INFORMATION_SCHEMA数据库中找到的表吗?没有。由于应用程序可能依赖于某种标准结构,因此不应进行修改。因此,我们无法支持由于修改INFORMATION_SCHEMA表或数据而导致的错误或其他问题。

A.8 MySQL 8.0 FAQ:迁移

原文:dev.mysql.com/doc/refman/8.0/en/faqs-migration.html

A.8.1. 我在哪里可以找到有关如何从 MySQL 5.7 迁移到 MySQL 8.0 的信息?

A.8.2. MySQL 8.0 中存储引擎(表类型)支持与以前版本有何变化?

A.8.1.我在哪里可以找到有关如何从 MySQL 5.7 迁移到 MySQL 8.0 的信息?有关详细的升级信息,请参阅 第三章,升级 MySQL。在升级时不要跳过一个主要版本,而是逐步完成过程,每次从一个主要版本升级到下一个主要版本。这可能看起来更复杂,但最终可以节省时间和麻烦。如果在升级过程中遇到问题,其来源更容易识别,无论是您自己还是如果您有 MySQL Enterprise 订阅,则由 MySQL 支持。A.8.2.MySQL 8.0 中存储引擎(表类型)支持与以前版本有何变化?
| | 存储引擎支持已更改如下:

MySQL 5.0 中移除了对 ISAM 表的支持,现在应该使用 MyISAM 存储引擎代替 ISAM。要将表 tblname 从 ISAM 转换为 MyISAM,只需发出类似于以下语句:
ALTER TABLE *tblname* ENGINE=MYISAM;
MySQL 5.0 中也移除了 MyISAM 表的内部 RAID。以前用于允许在不支持大于 2GB 文件大小的文件系统中的大表。所有现代文件系统都允许更大的表;此外,现在还有其他解决方案,如 MERGE 表和视图。
现在,VARCHAR 列类型在所有存储引擎中保留尾随空格。
MEMORY 表(以前称为 HEAP 表)也可以包含 VARCHAR 列。

|

A.9 MySQL 8.0 FAQ:安全性

原文:dev.mysql.com/doc/refman/8.0/en/faqs-security.html

A.9.1. 我在哪里可以找到有关 MySQL 安全问题的文档?](faqs-security.html#faq-mysql-where-docs-security)

A.9.2. MySQL 8.0 中的默认身份验证插件是什么?](faqs-security.html#faq-mysql-default-authentication-plugin)

A.9.3. MySQL 8.0 是否原生支持 SSL?](faqs-security.html#faq-mysql-have-native-ssl)

A.9.4. SSL 支持是否内置于 MySQL 二进制文件中,还是必须重新编译二进制文件才能启用?](faqs-security.html#faq-mysql-is-ssl-available)

A.9.5. MySQL 8.0 是否内置对 LDAP 目录的身份验证?](faqs-security.html#faq-mysql-have-builtin-ldap)

A.9.6. MySQL 8.0 是否包含基于角色的访问控制(RBAC)支持?](faqs-security.html#faq-mysql-have-builtin-rbac)

A.9.7. MySQL 8.0 是否支持 TLS 1.0 和 1.1?](faqs-security.html#faq-mysql-tls-versions)

A.9.1.我在哪里可以找到有关 MySQL 安全问题的文档?
| | 最好的起点是第八章,安全。MySQL 文档的其他部分,您可能会发现与特定安全问题相关的包括以下内容:

第 8.1.1 节,“安全准则”.
第 8.1.3 节,“使 MySQL 免受攻击者攻击”.
第 B.3.3.2 节,“如何重置根密码”.
第 8.1.5 节,“如何以普通用户身份运行 MySQL”.
第 8.1.4 节,“与安全相关的 mysqld 选项和变量”.
第 8.1.6 节,“LOAD DATA LOCAL 的安全注意事项”.
第 2.9 节,“安装后设置和测试”.
第 8.3 节,“使用加密连接”.
可加载函数安全预防措施.

还有安全部署指南,提供了使用 MySQL 企业版服务器的通用二进制分发功能的部署程序,以管理 MySQL 安装的安全性。 |

A.9.2.MySQL 8.0 中的默认身份验证插件是什么?MySQL 8.0 中默认的身份验证插件是caching_sha2_password。有关此插件的信息,请参阅 Section 8.4.1.2, “Caching SHA-2 Pluggable Authentication”。caching_sha2_password插件提供比mysql_native_password插件更安全的密码加密(前一个 MySQL 系列的默认插件)。有关此默认插件更改对服务器操作和服务器与客户端及连接器兼容性的影响的信息,请参阅 caching_sha2_password as the Preferred Authentication Plugin。有关可插拔身份验证和其他可用身份验证插件的一般信息,请参阅 Section 8.2.17, “Pluggable Authentication”,以及 Section 8.4.1, “Authentication Plugins”。A.9.3.MySQL 8.0 是否原生支持 SSL?大多数 8.0 二进制文件支持客户端和服务器之间的 SSL 连接。请参阅 Section 8.3, “Using Encrypted Connections”。您还可以使用 SSH 隧道连接,如果(例如)客户端应用程序不支持 SSL 连接。有关示例,请参阅 Section 8.3.4, “Connecting to MySQL Remotely from Windows with SSH”。A.9.4.SSL 支持是否内置于 MySQL 二进制文件中,还是必须重新编译二进制文件才能启用?大多数 8.0 二进制文件已启用 SSL,用于客户端/服务器连接的安全、身份验证或两者兼有。请参阅 Section 8.3, “Using Encrypted Connections”。A.9.5.MySQL 8.0 是否内置对 LDAP 目录的身份验证?企业版包括一个 PAM 身份验证插件,支持对 LDAP 目录进行身份验证。A.9.6.MySQL 8.0 是否支持基于角色的访问控制(RBAC)?目前不支持。A.9.7.MySQL 8.0 是否支持 TLS 1.0 和 1.1?
| | 从 MySQL 8.0.28 开始,不再支持 TLSv1 和 TLSv1.1 连接协议。这些协议从 MySQL 8.0.26 开始被弃用。有关该移除的后果,请参阅 移除对 TLSv1 和 TLSv1.1 协议的支持。移除对 TLS 版本 1.0 和 1.1 的支持是因为这些协议版本过时,分别于 1996 年和 2006 年发布。使用的算法是薄弱且过时的。除非您正在使用非常旧的 MySQL Server 或连接器版本,否则不太可能有使用 TLS 1.0 或 1.1 的连接。MySQL 连接器和客户端默认选择可用的最高 TLS 版本。MySQL Server 何时添加对 TLS 1.2 的支持? MySQL Community Server 在 2019 年切换到 OpenSSL 时为 MySQL 5.6、5.7 和 8.0 添加了 TLS 1.2 支持。对于 MySQL Enterprise Edition,OpenSSL 在 2015 年为 MySQL Server 5.7.10 添加了 TLS 1.2 支持。如何查看正在使用的 TLS 版本? 对于 MySQL 5.7 或 8.0,通过运行此查询查看是否正在使用 TLS 1.0 或 1.1:

SELECT
`session_ssl_status`.`thread_id`, `session_ssl_status`.`ssl_version`,
`session_ssl_status`.`ssl_cipher`, `session_ssl_status`.`ssl_sessions_reused`
FROM `sys`.`session_ssl_status`
WHERE ssl_version NOT IN (\’TLSv1.3\’,\’TLSv1.2\’);

如果列出了使用 TLSv1.0 或 TLSv1.1 的线程,您可以通过运行此查询确定此连接来自何处:

SELECT thd_id,conn_id, user, db, current_statement, program_name
FROM sys.processlist
WHERE thd_id IN (
SELECT `session_ssl_status`.`thread_id`
FROM `sys`.`session_ssl_status`
WHERE ssl_version NOT IN (\’TLSv1.3\’,\’TLSv1.2\’)
);

或者,您可以运行此查询:

SELECT *
FROM sys.session
WHERE thd_id IN (
SELECT `session_ssl_status`.`thread_id`
FROM `sys`.`session_ssl_status`
WHERE ssl_version NOT IN (\’TLSv1.3\’,\’TLSv1.2\’)
);

这些查询提供了确定哪个应用程序不支持 TLS 1.2 或 1.3 所需的详细信息,并针对升级进行目标升级。是否有其他测试 TLS 1.0 或 1.1 的选项? 是的,您可以在将服务器升级到新版本之前禁用这些版本。明确指定要使用的版本,可以在 mysql.cnf(或 mysql.ini)中或通过 SET PERSIST 来指定,例如:–tls-version=TLSv12。所有 MySQL 连接器(5.7 和 8.0)是否支持 TLS 1.2 及更高版本?C 和 C++ 应用程序使用 libmysql 呢? 对于使用社区 libmysqlclient 库的 C 和 C++ 应用程序,请使用基于 OpenSSL 的库(即,不要 使用 YaSSL)。在 2018 年统一使用 OpenSSL(分别在 MySQL 8.0.4 和 5.7.28 中)。对于 Connector/ODBC 和 Connector/C++ 也是如此。要确定使用了哪些库依赖项,请运行以下命令查看 OpenSSL 是否被列出。在 Linux 上,使用以下命令:

$> sudo ldd usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

在 MacOS 上,使用以下命令:

$> sudo otool -l /usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

关于 Connector/J? Java 8 在 2014 年 1 月将 TLS 1.2 作为默认版本;在此之前就已经支持了 TLS 1.2,所以除非你在运行一个非常老的版本的 Connector/J,否则你已经支持 TLS 1.2 了。关于 Connector/NET? 对于 .NET 应用程序,微软在 2020 年底停止了对 TLS 1.0 和 1.1 的支持。TLS 1.2 在 2012 年就已经添加了支持。你需要一个非常老的版本的 Connector/NET 才不支持 TLS 1.2。关于 Connector/Python? 这取决于你运行的 Python 版本。Python 2.6 中的 SSL 模块只支持到 1.0 版本的 TLS。在这种情况下,你需要升级到 Python 2.7.9 或更高版本,或者使用 Python 3.x,两者都支持更新版本的 TLS。详情请参见 Connector/Python 版本 和 www.calazan.com/how-to-check-if-your-python-app-supports-tls-12/。关于 Connector/Node.js 或 Node MySQL2? TLS 随 nodejs 一起提供,所有支持的 Node.js 版本使用 OpenSSL v1.1.1(截至 2020 年 4 月),再次支持 TLS 1.2 及更高版本。关于 PHP? 这些版本的 PHP 支持 TLS 1.2 及更高版本。

#以上关于MySQL8 中文参考(一百一十四)的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92663.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月28日 上午5:34
下一篇 2024年6月28日 上午5:34

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注