MySQL8 中文参考(二十三)(3)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL8 中文参考(二十三)

MySQL8 中文参考(二十三)(2)https://developer.aliyun.com/article/1566146


7.9.2 调试 MySQL 客户端

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

要能够使用集成的调试包调试 MySQL 客户端,您应该使用-DWITH_DEBUG=1配置 MySQL。参见 Section 2.8.7, “MySQL Source-Configuration Options”。

在运行客户端之前,您应该设置MYSQL_DEBUG环境变量:

$> MYSQL_DEBUG=d:t:O,/tmp/client.trace
$> export MYSQL_DEBUG

这会导致客户端在/tmp/client.trace中生成一个跟踪文件。

如果您在自己的客户端代码中遇到问题,您应该尝试连接到服务器,并使用已知可工作的客户端运行您的查询。通过在调试模式下运行mysql(假设您已经使用调试编译 MySQL)来执行此操作:

$> mysql --debug=d:t:O,/tmp/client.trace

这将为您提供有用的信息,以防您发送错误报告。请参见 Section 1.5, “How to Report Bugs or Problems”。

如果您的客户端在某些看起来“合法”的代码处崩溃,您应该检查您的mysql.h包含文件是否与您的 MySQL 库文件匹配。一个非常常见的错误是在新的 MySQL 库中使用来自旧的 MySQL 安装的旧mysql.h文件。

7.9.3 LOCK_ORDER 工具

原文:dev.mysql.com/doc/refman/8.0/en/lock-order-tool.html

MySQL 服务器是一个使用许多内部锁定和与锁相关的原语的多线程应用程序,例如互斥锁,rwlocks(包括 prlocks 和  sxlocks),条件和文件。在服务器内部,锁相关对象的集合随着实现新功能和代码重构以提高性能而改变。与使用锁定原语的任何多线程应用程序一样,当同时持有多个锁时,在执行期间遇到死锁的风险始终存在。对于  MySQL,死锁的影响是灾难性的,会导致完全丧失服务。

从 MySQL 8.0.17 开始,为了启用锁获取死锁检测和确保运行时执行不包含死锁的强制执行,MySQL 支持LOCK_ORDER工具。这使得可以定义锁顺序依赖图作为服务器设计的一部分,并且服务器运行时检查以确保锁获取是无环的,并且执行路径符合图形。

本节提供有关使用LOCK_ORDER工具的信息,但仅在基本水平上。有关完整详情,请参阅 MySQL Server Doxygen 文档中的 Lock Order 部分,网址为dev.mysql.com/doc/index-other.html

LOCK_ORDER工具旨在用于调试服务器,而非生产使用。

要使用LOCK_ORDER工具,请按照以下步骤进行:

  1. 从源代码构建 MySQL,并使用-DWITH_LOCK_ORDER=ON CMake选项进行配置,以便构建包含LOCK_ORDER工具的内容。
    注意
    启用WITH_LOCK_ORDER选项后,MySQL 构建需要flex程序。
  2. 要在启用LOCK_ORDER工具的情况下运行服务器,请在服务器启动时启用lock_order系统变量。还有其他用于LOCK_ORDER配置的系统变量可用。
  3. 对于 MySQL 测试套件操作,mysql-test-run.pl具有一个--lock-order选项,用于控制在测试用例执行期间是否启用LOCK_ORDER工具。

以下描述的系统变量配置LOCK_ORDER工具的操作,假设 MySQL 已构建包含LOCK_ORDER工具。主要变量是lock_order,指示是否在运行时启用LOCK_ORDER工具:

  • 如果lock_order被禁用(默认情况下),则其他LOCK_ORDER系统变量不会产生任何影响。
  • 如果启用了lock_order,则其他系统变量配置哪些LOCK_ORDER功能要启用。

注意

通常情况下,应通过使用 --lock-order 选项执行 mysql-test-run.pl 来配置 LOCK_ORDER 工具,并让 mysql-test-run.plLOCK_ORDER 系统变量设置为适当的值。

所有 LOCK_ORDER 系统变量必须在服务器启动时设置。在运行时,它们的值是可见的,但不能更改。

一些系统变量存在成对出现,例如 lock_order_debug_looplock_order_trace_loop。对于这样的成对变量,在发生与其关联的条件时,这些变量的区别如下:

  • 如果启用了 _debug_ 变量,则会引发调试断言。
  • 如果启用了 _trace_ 变量,则会将错误打印到日志中。

表 7.8 LOCK_ORDER 系统变量摘要

变量名称 变量类型 变量范围
lock_order 布尔值 全局
lock_order_debug_loop 布尔值 全局
lock_order_debug_missing_arc 布尔值 全局
lock_order_debug_missing_key 布尔值 全局
lock_order_debug_missing_unlock 布尔值 全局
lock_order_dependencies 文件名 全局
lock_order_extra_dependencies 文件名 全局
lock_order_output_directory 目录名 全局
lock_order_print_txt 布尔值 全局
lock_order_trace_loop 布尔值 全局
lock_order_trace_missing_arc 布尔值 全局
lock_order_trace_missing_key 布尔值 全局
lock_order_trace_missing_unlock 布尔值 全局
变量名称 变量类型 变量范围
  • lock_order
命令行格式 --lock-order[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • 是否在运行时启用LOCK_ORDER工具。如果禁用了lock_order,则不会影响任何其他LOCK_ORDER系统变量。如果启用了lock_order,则其他系统变量配置哪些LOCK_ORDER功能启用。
    如果启用了lock_order,则如果服务器遇到未在锁定顺序图中声明的锁定获取序列,将引发错误。
  • lock_order_debug_loop
命令行格式 --lock-order-debug-loop[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_debug_loop
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER工具遇到在锁定顺序图中标记为循环的依赖关系时,是否导致调试断言失败。
  • lock_order_debug_missing_arc
命令行格式 --lock-order-debug-missing-arc[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_debug_missing_arc
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER工具遇到在锁定顺序图中未声明的依赖关系时,是否导致调试断言失败。
  • lock_order_debug_missing_key
命令行格式 --lock-order-debug-missing-key[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_debug_missing_key
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER工具遇到未正确使用性能模式仪器的对象时,是否导致调试断言失败。
  • lock_order_debug_missing_unlock
命令行格式 --lock-order-debug-missing-unlock[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_debug_missing_unlock
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER工具在遇到仍在持有的锁被销毁时是否导致调试断言失败。
  • lock_order_dependencies
命令行格式 --lock-order-dependencies=file_name
引入版本 8.0.17
系统变量 lock_order_dependencies
作用域 全局
动态
SET_VAR提示适用
类型 文件名
默认值 空字符串
  • lock_order_dependencies.txt文件的路径,定义了服务器锁定顺序依赖图。
    可以指定不使用任何依赖项。在这种情况下,将使用空依赖图。
  • lock_order_extra_dependencies
命令行格式 --lock-order-extra-dependencies=file_name
引入版本 8.0.17
系统变量 lock_order_extra_dependencies
作用域 全局
动态
SET_VAR提示适用
类型 文件名
默认值 空字符串
  • 包含额外依赖项的文件路径,用于修改锁定顺序依赖图的主要服务器依赖图。这对于使用额外依赖项描述第三方代码行为很有用,而不是修改lock_order_dependencies.txt文件本身(这是不鼓励的替代方法)。
    如果未设置此变量,则不使用辅助文件。
  • lock_order_output_directory
命令行格式 --lock-order-output-directory=dir_name
���入版本 8.0.17
系统变量 lock_order_output_directory
作用域 全局
动态
SET_VAR提示适用
类型 目录名称
默认值 空字符串
  • LOCK_ORDER工具写入其日志的目录。如果未设置此变量,则默认为当前目录。
  • lock_order_print_txt
命令行格式 --lock-order-print-txt[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_print_txt
作用域 全局
动态
SET_VAR提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER工具是否执行锁定顺序图分析并打印文本报告。报告包括检测到的任何锁获取循环。
  • lock_order_trace_loop
命令行格式 --lock-order-trace-loop[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_trace_loop
作用范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER 工具在遇到在锁序图中标记为循环的依赖关系时是否在日志文件中打印跟踪信息。
  • lock_order_trace_missing_arc
命令行格式 --lock-order-trace-missing-arc[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_trace_missing_arc
作用范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 ON
  • LOCK_ORDER 工具在遇到在锁序图中未声明的依赖关系时是否在日志文件中打印跟踪信息。
  • lock_order_trace_missing_key
命令行格式 --lock-order-trace-missing-key[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_trace_missing_key
作用范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • LOCK_ORDER 工具在遇到未正确使用性能模式进行仪表化的对象时是否在日志文件中打印跟踪信息。
  • lock_order_trace_missing_unlock
命令行格式 --lock-order-trace-missing-unlock[={OFF|ON}]
引入版本 8.0.17
系统变量 lock_order_trace_missing_unlock
作用范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 ON
  • LOCK_ORDER 工具在遇到一个被销毁但仍被持有的锁时是否在日志文件中打印跟踪信息。

7.9.4 DBUG

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

MySQL 服务器和大多数 MySQL 客户端都是使用由 Fred Fish 最初创建的 DBUG 包编译的。当您为调试配置 MySQL 时,此包使得可以获得程序正在执行的跟踪文件。参见 Section 7.9.1.2, “Creating Trace Files”。

本节总结了在使用带有调试支持的 MySQL 程序时可以在命令行上指定的调试选项的参数值。

DBUG 包可以通过使用 --debug[=*debug_options*]-# [*debug_options*] 选项来调用程序。如果您在不指定 debug_options 值的情况下指定 --debug-# 选项,大多数 MySQL 程序会使用默认值。在 Unix 上,服务器默认值为 d:t:i:o,/tmp/mysqld.trace,在 Windows 上为 d:t:i:O,\mysqld.trace。这个默认值的效果是:

  • d: 启用所有调试宏的输出
  • t: 跟踪函数调用和退出
  • i: 在输出行中添加 PID
  • o,/tmp/mysqld.trace, O,\mysqld.trace: 设置调试输出文件。

大多数客户端程序使用默认的 debug_options 值为 d:t:o,/tmp/*program_name*.trace,无论平台如何。

以下是一些示例调试控制字符串,如在 shell 命令行上指定的方式:

--debug=d:t
--debug=d:f,main,subr1:F:L:t,20
--debug=d,input,output,files:n
--debug=d:t:i:O,\\mysqld.trace

对于 mysqld,还可以通过设置 debug 系统变量在运行时更改 DBUG 设置。此变量具有全局和会话值:

mysql> SET GLOBAL debug = '*debug_options*';
mysql> SET SESSION debug = '*debug_options*';

更改全局 debug 值需要足够设置全局系统变量的权限。更改会话 debug 值需要足够设置受限会话系统变量的权限。参见 Section 7.1.9.1, “System Variable Privileges”。

debug_options 值是一个以冒号分隔的字段序列:

field_1:field_2:...:field_*N*

值内的每个字段由一个必需的标志字符组成,可选地前面跟着一个 +- 字符,并可选地后跟着一个逗号分隔的修饰符列表:

[+|-]flag[,modifier,modifier,...,modifier]


MySQL8 中文参考(二十三)(4)https://developer.aliyun.com/article/1566148

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
74 3
|
4月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
112 3
|
4月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
46 3
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
65 2
|
4月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
56 2
|
4月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
38 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(1)
MySQL8 中文参考(二十四)
43 2
|
4月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
52 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
31 2
|
4月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(2)
MySQL8 中文参考(二十四)
56 1