mysql 删表引出的问题

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 背景 将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!!   步骤 1. 既然已经把数据同步过来的话,那就直接delete掉就行,多大的事呢? 于是 delete from table_name where 1=1; 结果傻眼了,执行了一会儿就卡死了,对卡死了!   2.

背景

将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!!

 

步骤

1. 既然已经把数据同步过来的话,那就直接delete掉就行,多大的事呢? 于是

delete from table_name where 1=1;

结果傻眼了,执行了一会儿就卡死了,对卡死了!

 

2. 那么问题来了,是不是死锁了呢?那怎么判断死锁呢?

SHOW PROCESSLIST;

 

执行这个命令可以查看数据库当前的进程

 

3. 查看当前的事物

#当前运行的所有事务
mysql> SELECT * FROM information_schema.INNODB_TRX;

#当前出现的锁
mysql> SELECT * FROM information_schema.INNODB_LOCKs;

#锁等待的对应关系
mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;

如果你是linux上直接执行mysql命令的话可以这样执行

SELECT * FROM information_schema.INNODB_TRX\G
这样的话会换行展示数据,更人性化

 

4. 可以通过kill命令来干掉一些数据库的进程

kill 2

这样既可,这样只是解决了卡死的问题,执行同样的命令还是会卡死的 ;

 

5. 那就想想为什么会卡死呢 ?原来有个这么一个参数

一般等待超时的时候会抛出这样的异常:

Lock wait timeout exceeded; try restarting transaction

是因为mysql的话,默认锁等待时间是50s,就是说50s后就会报错,所以需要修改下个时间

mysql的配置一般都是在my.cnf文件中,自己找下

新增/修改innodb_lock_wait_timeout=500既可

 

6. 修改后重启mysql,这里面又涉及到mysql的关闭

bin/mysqladmin -uroot -p shutdown

就关闭了sql的,不建议直接kill -9 ,不知道会出现什么幺蛾子

重启的话,还是用mysql_safe去启动既可

 

7. 其实把,删除表数据的话,用truncate就行的 ,

truncate table table_name;

 

8. 那么就比较下 drop,truncate,delete的区别吧

  a. drop是整个表都没有了的,表结构也没没有了的,truncate和delete的表结构还在;

  b. delete可以指定where条件删除哪一行,truncate是整个表的;

  c. 来百度一下,^_^

  

1. truncate和 delete只删除数据不删除表的结构(定义) 
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态. 
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发. 
   truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger. 
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动 
  显然drop语句将表所占用的空间全部释放 
  truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始). 
4.速度,一般来说: drop>; truncate >; delete 
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及

 

虽千万人,吾往矣!
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
mysql中执行 sql 语句报语法错误引出的代码空格问题
根据报错提示 sql 语法错误,错误状态码 1064,网上很多人说是使用了 mysql 保留关键字,没用反单引号``包起来,或者普通字符串使用了反单引号这些...反正大部分都是说引号这块出了问题,但一遍遍地检查确实又都没发现问题
Mysql - 存储过程 - 定时删表
Mysql - 存储过程 - 定时删表在工业监控里面, 需要对每天的数据, 进行记录, 时间长了之后, 数据库很容易撑爆. 这时候, 如果允许, 可以对之前的数据进行一次清除, 只记录几个月内的数据.
1142 0
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
265 82
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
251 42