mysql 删表引出的问题
背景
将测试环境的表同步到另外一个数据库服务器中,但有些表里面数据巨大,(其实不同步该表的数据就行,当时没想太多),几千万的数据!!
步骤
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,尤其没有备份的时候.否则哭都来不及
mysql 删表引出的问题的更多相关文章
- MySQL的奇怪的删表数据文件而表照样能打开
MySQL的奇怪的删表数据文件而表照样能打开 author:headsen chen 2017-11-02 17:57:17 现象:删除一个正在运行的mysql数据库的表的数据文件:* ...
- Mysql - 存储过程 - 定时删表
在工业监控里面, 需要对每天的数据, 进行记录, 时间长了之后, 数据库很容易撑爆. 这时候, 如果允许, 可以对之前的数据进行一次清除, 只记录几个月内的数据. delimiter $ DROP P ...
- MYSQL删除表的记录后如何使ID从1开始
MYSQL删除表的记录后如何使ID从1开始 MYSQL删除表的记录后如何使ID从1开始 http://hi.baidu.com/289766516/blog/item/a3f85500556e2c09 ...
- Mysql分表和分区的区别、分库分表介绍与区别
分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这 ...
- mysql分表与分区表
mysql分表与分区表 转自:http://blog.51yip.com/mysql/949.html 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具 ...
- mysql分表,分区的区别和联系
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...
- Mysql分表和分区的区别
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...
- 设置MySQL数据表主键
设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
随机推荐
- linux命令killall 、kill 、pkill 命令详解
转自:http://www.cnblogs.com/rsky/p/4886043.html killall 命令 Linux系统中的killall命令用于杀死指定名字的进程(kill processe ...
- 5月25日-js操作DOM遍历子节点
一.遍历节点 遍历子节点 children();//获取节点的所有直接子类 遍历同辈节点 next(); prev(); siblings();//所有同辈元素 *find(); 从后代元素中查找匹配 ...
- 【DataGuard】部署Data Guard相关参数详解 (转载)
原文地址:[DataGuard]部署Data Guard相关参数详解 作者:secooler 有关物理Data Guard部署参考<[DataGuard]同一台主机实现物理Data Gua ...
- jenkins之构建触发器
build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job. build after other projects ...
- leetcode204
public class Solution { public int CountPrimes(int n) { ) { ; } ]; ]; ; ; i < n; i++) { mark[i] = ...
- asp.net webapi 参数绑定总结
首先必须得更正下自己一直以来对于get请求和post请求理解的一个误区:get请求只能通过url传参,post请求只能通过body传参. 其实上面的理解是错误的,翻阅了不少资料及具体实践,正确理解应该 ...
- 什么是First-class citizen?
[什么是First-class citizen?] In programming language design, a first-class citizen (also type, object, ...
- sqlserver2008事物处理---待续
声明事物:begin tran 回滚事物:ROLLBACK TRAN 提交事物:commit tran(不写会隐式提交) 判断是否发生异常: 结束前: IF @@ERROR <> 0 BE ...
- sqlserver查询存储过程的创建时间及最后修改时间
select [name] ,create_date ,modify_date FROM sys.all_objects where type_desc = N'SQL_STORED_PROCE ...
- How to use Qt Designed Ui file
Ui Designed file In Working, we can use Qt Designer to designe UI; Then, use uic -o head.h designe.u ...
