加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 数据库 > MySql > 正文

MySQL如何优雅的删除大表实例详解

发布时间:2023-12-14 12:19:01 所属栏目:MySql 来源:DaWei
导读: 前言

删除表,大家下意识想到的命令可能是直接使用DROP TABLE “表名”,这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候。这样一条命令下去,MySQL
前言

删除表,大家下意识想到的命令可能是直接使用DROP TABLE “表名”,这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候。这样一条命令下去,MySQL可能就直接夯住了,外在表现就是QPS急速下降,客户请求变慢。

解决办法

1.业务低峰时间手动执行删除

这个可能就需要DBA不辞辛劳,大晚上爬起来删表了。

2.先清除数据,最后再删除的方式

譬如1000万条数据,写脚本每次删除20万,睡眠一段时间,继续执行。这样也能做到对用户无感知。

3.对表文件(idb文件)做一个硬链接来加速删除

这个方法利用了linux下硬链接的知识,来进行快速删除,不记得话可以回去翻一下《鸟哥的linux私房菜》

ln data_center_update_log.ibd data_center_update_log.ibd.hdlk[root@mysql01 sports_center]# ll总用量 19903792-rw-r—– 1 mysql mysql 9076 10月 17 13:15 data_center_update_log.frm-rw-r—– 2 mysql mysql 8447328256 12月 23 11:35 data_center_update_log.ibd-rw-r—– 2 mysql mysql 8447328256 12月 23 11:35 data_center_update_log.ibd.hdlk

执行上面命令后,我们就多了一个data_center_update_log.ibd.hdlk文件。此操作实际上不会占用磁盘空间,只是增加了一次对磁盘上文件的引用。

当我们删除其中任何一个文件时,都不会影响磁盘上真实的文件,只是将其引用数目减去1。当被引用的数目变为1的时候,再去删除文件,才会真正做IO来删除它。

正是利用这个特点,将由原来mysql来删除大文件的操作,转换为一个简单的操作系统级的文件删除,从而减少了对mysql的影响。

4.登陆mysql,执行drop表操作

很快,200万条数据只用了1秒完成,此操作是在创建硬链接后执行的

mysql> drop tables data_center_update_log;Query OK, 0 rows affected (1.02 sec)mysql> exitBye退出来,再次查看数据目录,发现就只剩data_center_update_log.ibd.hdlk硬链接文件了[root@mysql01 sports_center]# ll总用量 19903792-rw-r—– 2 mysql mysql 8447328256 12月 23 11:35 data_center_update_log.ibd.hdlk

5.如何正确删除ibd.hdlk硬链接文件呢

虽然drop table之后,剩下的硬链接文件已经和mysql没有关系了。但如果文件过大,直接用rm命令来删除,也是会造成IO开销飙升,CPU负载过高,进而影响到MySQL。 这里我们用到的方法,可以循环分块删除,慢慢地清理文件,通过一个脚本即可搞定 Truncate命令通常用于将文件缩小或扩展到指定的大小。如果文件大于指定的大小,则会丢失额外的数据。如果文件较短,则会对其进行扩展,并且扩展部分的读数为零字节。

5.1 安装truncate命令

[root@mysql01 ~]# cruncate-bash: cruncate: 未找到命令通常操作系统会安装truncate命令,该命令在coreutils安装包里面,如果没有安装可以使用下面命令安装[root@mysql01 ~]# yum provides truncatecoreutils-8.22-24.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts源 :base匹配来源:文件名 :/usr/bin/truncate可以看到truncate由coreutils安装包提供,下面安装coreutils安装包:[root@mysql01 ~]# yum install -y coreutils

5.2 truncate常用选项

-c, –no-create –> 不创建任何文件

-o, –io-blocks –> 将大小视为存储块的数量,而不是字节

-r, –reference=RFILE –> 参考指定的文件大小

-s, –size=SIZE –> 按照指定的字节设置文件大小

5.3 truncate_bigfile.sh脚本

原理:使用truncate -s选项可以指定文件大小,通过脚本指定每次文件减少的大小,并sleep睡眠一定时间,从而达到可控的删除文件

附:truncate_bigfile.sh脚本

#! /bin/bash#TRUNCATE=/usr/bin/truncateFILE=$1if [ x”$1″ = x ];then echo “Please input filename in” exit 1;else SIZE_M=$(du -sm “$1” | awk ’{print $1}’) for i in $(seq “${SIZE_M}” -100 0) do sleep 1 echo “${TRUNCATE} -s ${i}M ${FILE}” ${TRUNCATE} -s “${i}”M “${FILE}” donefiif [ $? -eq 0 ];then rm -f “${FILE}”else echo “Please check file”fi总结

到此这篇关于MySQL如何优雅的删除大表的文章就介绍到这了,更多相关MySQL优雅删除大表内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

mysql如何删除表 mysql怎样删除表

1.点击左下角开始菜单按钮。

2.在开始菜单下方搜索框中搜索cmd。

4.输入mysql -u root -p命令,然后回车。

5.提示输入密码,输入正确的密码,进入mysql命令行。

6.切换到指定的数据库,然后使用show tables;命令展示所有表。

7.删除表的命令格式为DROP TABLE 。

mysql 删除整张表的sql语句

MyS

如何删除Mysql数据库里面的表?

1. 先登录数据库,在左侧控制面板点击“自助管理”-“数据库”,选择数据库点“管理”,点击“高级管理”2. 出现MYSQL高级管理登录框,用您的数据库用户名,密码登录,在登陆时,需要根据您的数据库编码选择对应的语言,一般可以选择“Chinese Simplified (zh-utf-8)”和“Chinese Simplified (zh-gb2312)”,根据你的MYSQL数据库编码来确定。3. 登陆MYSQL管理器后,左侧点击你的数据库名字,右侧会出现该数据库下所有数据表。

5. 要删除多个表,勾选每个表,点最底部的删除按钮。

如何对 MYSQL 大数据库执行表数据删除操作,单表数据量超过 15.6G

如何对 MYSQL 大数据库执行表数据删除操作,单表数据量超过 15.6Gdelete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动drop 语句将表所占用的空间全部释放。truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

如何大批量清除线上MySQL历史数据

一.使用phpmyadmin工具批量删除mysql数据库表使用phpmyadmin数据库管理工具进行删除,这是一个传统的方法,在任何php虚拟主机中,你都可以操作。下面是操作过程介绍:

1.登录phpmyadmin。

如下图:PHPMYADMIN使用技巧:如何快速批量删除Mysql数据库中的数据表 image00114 150×150

二.使用php脚本完成批量删除无忧主机()小编从网上找了一段php代码,也可以帮我们快速实现删除。如果你对phpmyadmin工具“敏感”,可以使用下面的方式来实现快速删除mysql数据库表。 在下面的代码复制到记事本后,配置过程中你要注意几个问题:

1. 正确配置你mysql数据库信息。这个你可以直接咨询你的空间商就可以获得啦。

2. 正确设置要删除的数据库表前缀,这个非常重要,填写错误,将操作错误。请你务必确认你的数据库表前缀哦mysql删除表,数据库表前缀你可以在phpmyadmin中查询到。一般都是xx_开头的。

设置好后,将这段代码另存为.php文件(如51php.php)然后上传到您空间的网站根目录(public_html)。上传完毕,直接用域名/51php.php,就可以删除了。 代码如下:以上两种方法都可批量删除数据表,特别提醒一下,数据是无价的,操作数据表的时候一定要先做好备份。

免得误删除数据是无法恢复的。

mysql 如何删除 数据库中所有的表,要不删除 database的,只删database下面所有的表。

SEL

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章