# 问题描述经常遇到 MySQL 因为表级锁导致的 SQL 阻塞问题,那么如何找到 MySQL 中被表级锁占用的线程和具体SQL内容?# 问题分析如果需要分析查看持有表级锁的线程及执行 SQL,需要开启 performance_schema 库并开启表级锁对应的instruments(wait/lock/metadata/sql/mdl),全局配置项 global_instrumentation 控制着 setup_consumers 的记录,所以也需要开启。# 问题复现### Session 1:```sqlmysql> begin;Query OK, 0 rows a...
在会话 2 中对表执行 DDL 操作:我们会发现操作被阻塞````undefinedmysql> alter table t1 add index i_c(id);````3. 使用 `show full processlist` 命令进行排查,会发现 State 字段出现 **Waiting for table metadata lock**![图片](https://lf3-volc-editor.volccdn.com/obj/volcfe/sop-public/upload_9b15372045d69fcfe68a398c5dfb0577.png)# 解决方案### 1. 前提条件* 排查 MDL 锁依赖于 performance_schema,请...
# 问题描述在真实的生产环境中,死锁问题是非常常见的,我们应该如何排查此类问题并进行规避?# 问题分析表结构与测试数据:```CREATE TABLE `dead_lock` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `kcol1` (`col1`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mysql> select * from dead_lock;+----+------+| id | col1 |+----+----...
# 问题描述在真实的生产环境中,死锁问题是非常常见的,我们应该如何排查此类问题并进行规避?# 问题分析表结构与测试数据:````undefinedCREATE TABLE `dead_lock` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col1` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `kcol1` (`col1`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mysql> select * from dead_lock;+----+------+| id | col1 |+--...
大表的 DDL 操作往往会比较耗时,在无法感知整个 DDL 的进行阶段与阶段进度时,可能会产生很大的困扰;MySQL 原生的 performance_schema 功能开启后,会带来一定的性能损失和内存占用。为解决以上问题,云数据库 MySQL 版提供了一种轻量化的 performance_schema 功能,能够在低消耗的前提下提供 MDL 锁视图与 DDL 进度显示的能力。 使用限制该功能仅在数据库版本为 MySQL 8.0 的实例提供。 使用方法修改参数 loose_rds_performance_sch...
为什么云数据库 MySQL 版不支持 MyISAM 引擎、 Memory 引擎?云数据库 MySQL 版在 MySQL 5.7 及以上版本中默认支持 InnoDB 引擎,不再支持 MyISAM 引擎和 Memory 引擎,主要原因是: 云数据库 MySQL 版对 InnoDB 做了很多内核优化,已具备明显的性能优势。 MyISAM 采用的是表级锁机制,而 InnoDB 采用的是行级锁机制,InnoDB 在通常情况下具备更高的写入效率。 MyISAM 对数据完整性的保护存在缺陷,这些缺陷会导致数据库数据的损坏甚至...
# 前言MySQL 从 5.6.6 版本开始,支持密码过期功能,在 mysql.user 表中添加 password_expired 功能 [1],这样用户可以像 Oracle 一样设置密码自动过期。从 MySQL 5.7.4 开始,增加了新的参数 default_password_lifetime [2],允许全局的为数据库中的用户设置密码过期策略。# 如何设置密码过期初始创建用户,我们可以看到密码默认不过期,最近一次修改密码的时间为 2022-04-07 14:30:32。```sqlmysql> create user rudonx1@'%' id...
# 前言MySQL 的原生备份工具 mysqldump 是特别常用的备份工具,它具有如下优点:1. 工具使用并不复杂,命令简单。2. 将数据生成 SQL语句,方便在不同数据库平台之间做数据迁移3. 对于 innodb 表可以在线备份。本文主要探讨 mysqldump 是如何保证备份一致性的。# 关键参数如何保证备份的一致性使用到如下两个关键参数### 1. --single-transaction加上这个参数目的在于,在备份 innodb 表前,将事务的隔离级别设置为 REPE...
# 前言MySQL 的原生备份工具 mysqldump 是特别常用的备份工具,它具有如下优点:1. 工具使用并不复杂,命令简单。2. 将数据生成 SQL语句,方便在不同数据库平台之间做数据迁移3. 对于 innodb 表可以在线备份。本文主要探讨 mysqldump 是如何保证备份一致性的。# 关键参数如何保证备份的一致性使用到如下两个关键参数### 1. --single-transaction加上这个参数目的在于,在备份 innodb 表前,将事务的隔离级别设置为 REPEATAB...
mysql> SELECT COUNT(*) FROM mysql.proc;+----------+| COUNT(*) |+----------+| 0 |+----------+1 row in set (0.00 sec)mysql> select count(*) from information_schema.ROUTINES where ROUTINE_SCHEMA='sys';+----------+| count(*) |+----------+| 0 |+----------+1 row in set (0.00 sec)```检查备份文件后发现:1. DROP TABLE IF EXISTS `proc`;2. 重建 mysql.proc3. 锁表进行备份,备...
本文汇总了使用云数据库 MySQL 版备份恢复的常见问题。 为什么无法进行备份操作?若您出现无法进行备份操作的问题,请根据如下建议进行排查: 确认 MySQL 实例是否为运行中的状态。 确认备份期间未执行 DDL 操作,避免锁表导致备份失败。 表的数量超过 600,000 时将无法为实例进行备份。表数量过多的时候,建议对实例进行拆分。 若排查之后仍出现无法进行备份操作的问题,您可以提交工单联系技术支持。 备份类型是否支持逻辑备份?逻辑备...
binlog 记录了对 MySQL 数据库执行更改的所有的写操作,包括所有对数据库的数据、表结构、索引等等变更的操作。> 注意:这其中不包含 SELECT、SHOW 等,因为对数据没有修改只要是对数据库有变更的操作都会记录到 binlog 里面来,我们可以把数据库的数据看做银行账户里的余额,而 binlog 就相当于我们银行卡的流水记录。账户余额只是一个结果,至于这个结果怎么来的,那就必须得看流水了。在实际应用中, binlog 的主要应用场景分别...
是MySQL中比较常用的事务隔离级别,它可以有效的防止“脏读”,在这个隔离级别下,MySQL要求客户端必须等待其他连接的修改提交,然后在进行读取操作。MySQL 在该隔离级别下创建的事务,可以避免读取还在被修改的数据的情况发生,直到事务提交(commit)后才能读取。可重复读(Repeatable Read)是MySQL支持的最高事务隔离级别,它要求在一个事务开始后结束前,任何改变都无法发生,同时手工加了锁定表,避免及时别的连接改变任何数据。该隔离...