在mysql 上如何在不影响生产的情况下删除一个大表
mysql 中常用的删除的方法基本上有下面三种方式:
1、delete
一般用于删除少量表中的数据
优化建议,一定要加上where 条件,并且where条件的列上 一定要有主键或者索引。否则会出现全表扫描的情况
2、drop
直接将表删除,包括表的数据和表的定义。
这种操作,MySQL 会加上一个全局锁,删除期间会阻塞操作,所以对大表来说这样操作一定会对生产造成很大的影响
优化建议,大表不要使用drop table 这种方式,可以考虑 truncate table的方式
3、truncate
这种方式要优于 drop table,风险较之 drop 要小一点,不需要加锁,所以删除表的速度很快
注意事项:这种方式虽然很快,但是需要考虑删除大文件对IO产生的影响
使用下面的骚操作更安全吆!
以上三种方式的各有适用的场景,下面介绍一种删除大表又同时能够规避删除大文件带来 IO 过载风险的方式。
1、对表的 idb 文件创建硬链接,这样实际存储的文件上有两个inode指向这个文件。当文件有两个及以上硬连接时,对文件删除,操作系统只会删除这个硬链接,而不是实际上的文件
2、drop table table_name;这样实际上删除的是ibd 文件的硬链接,速度会非常快,不用考虑锁操作
3、这样 drop 掉表之后,数据文件实际上还是存在的,所以我们还要删除文件系统中的文件
4、使用操作系统的 truncate 工具可以指定将文件削减到指定大小,所以我们可以使用这个工具控制删除文件的速度,也就是说可以控制 IO 的占用
truncate 工具使用实例:
for i in `seq - `;
do
sleep
truncate -s ${i}G /data/test.ibd.hardlk
done
rm -rf /data/mysql/mytest/erp.ibd.hardlk
上面代码就是讲一个 300G的文件每次减小 10G,间隔 2秒,最后剩余 10G 用rm -rf 删除即可。
在mysql 上如何在不影响生产的情况下删除一个大表的更多相关文章
- 如果让你来做HashMap扩容,如何实现在不影响读写的情况下扩容?
我觉得逼格高,不是体现在问题多刁钻,知识点多深,而是一个非常明确,无歧义的问题,能考察出面试者多方面的能力.这个问题背后:1.了解java中,HashMap的实现:如果一个面试者了解这一点,说明至少他 ...
- 关于MySQL什么时候使用索引问题以及什么情况下应不建或少建索引
一,什么情况下使用索引1. 表的主关键字 自动建立唯一索引 2. 表的字段唯一约束 ORACLE利用索引来保证数据的完整性 3. 直接条件查询的字段 在SQL中用于条件约束的字段 如zl_yhjbqk ...
- mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复
转载自 https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c42cf94e51d45524861122d#heading-8 mysql ...
- MySQL 实现将一个库表里面的数据实时更新到另一个库表里面
MySQL 实现将一个库表里面的数据实时更新到另一个库表里面 需求描述:MySQL 里面有很多的数据库,这些数据库里面都有同一种表结构的表 (tb_warn_log),这张表的数据是实时更新的,现在需 ...
- 定点分析: MySQL InnoDB是如何保证系统异常断电情况下的数据可靠性?
MySQL支持事务,所以保证数据可靠的前提是对数据的修改事务已经成功提交 这个问题可以解释为'MySQL InnoDB是如何保证事务C(一致性)D(持久性)性的?' 可能出现的两种情况: (一致性)数 ...
- springmvc+ajaxFileUpload上传文件(前后台彻底分离的情况下)
首先是导入jar包: web.xml: <servlet> <servlet-name>mvc-dispatcher</servlet-name> <serv ...
- 开源的Eclipse的文件转码插件,可以在不影响中文的情况下改变项目文件编
http://www.blogjava.net/lifesting/archive/2008/04/11/192250.html, 感谢此作者! 问题描述: 我们项目开发都统一采用utf-8格式编码, ...
- C#实现不影响当前线程情况下间隔一定的时间执行一段代码
大家知道C#间隔一定时间去执行一段代码,常用的有 1. Thread.Sleep(多少毫秒); 2. 使用Timer控件间隔一定的时间,设置执行一次 以上两种方法,实现起来不难,弊端在于会阻塞当前线程 ...
- MySQL把一个大表拆分多个表后,如何解决跨表查询效率问题
大表分表后每个表的结构相同,可以用sql的union 比如a,b表结构相同可以通过union来联接 select * from aunion allselect * from bwhere.... 其 ...
随机推荐
- mysql知识点汇集
1.将两个表字段类型一致的数据合并到一个新表的命令. INSERT into new_table(user_name,password,age) SELECT user_name,password,a ...
- 菜鸟的周末_Python试水
搭建开发环境 下载安装包,打开官网,选择最新Windows Installer版本下载. 运行安装包,勾选Add Python 3.8 to Path,选择Install Now,等待安装完成,直接关 ...
- Linux搭建ftp服务器简单教程及使用方法
参考文章:https://www.waitig.com/linux-or-centos-install-vsftpd-and-setup-it.html 步骤概括如下: 安装:yum install ...
- mysql 安装 和 mysql 远程连接
一.mysql安装 1.下载MySQL数据库可以访问官方网站:https://www.mysql.com/ 2.点击DOWNLOADS模块下的Community模块下的MySQL Community ...
- Linux Openssh源码升级
telnet服务 yum install -y telnet-server xinetd systemctl start xinetd systemctl start telnet.socket #监 ...
- java文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个需要在JAVA.MyEclipse环境下大文件上传的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下 ...
- JavaScript(1):Base/Tips
目录 输出 全局变量 字符串 类型及转换 变量提升 严格模式 表单验证 (1) 输出 <!DOCTYPE html> <html> <body> <p> ...
- Qt qss问题总结
1.在QWidget中设定了setObjectName,就是不起作用. 解决方法重写paintEvent. #ifndef BROWSEWIDGET_H #define BROWSEWIDGET_H ...
- Linux编辑网络连接
Linux编辑网络连接 实验目标: 通过本实验掌握新建网络连接.修改hosts文件.修改主机名的方法. 实验步骤: 1.新建一个名为review的网络连接,并配置ip地址,启用新连接 2.修改ho ...
- TCP/IP中32位IP地址与字符串转化
转载:http://www.cnitblog.com/wujian-IT/archive/2007/10/11/34739.aspx 在网络上面我们用的IP都是数字加点(192.168.0.1)构成的 ...