阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

数据库硬盘空间可用小于90%解决的方案

337次阅读
没有评论

共计 1326 个字符,预计需要花费 4 分钟才能阅读完成。

数据库硬盘空间可用小于 90% 解决方案

一. 问题描述

我司在某云的 MySQL 数据库占硬盘空间大于 90%,RDS 空间总空间为 700G,表 A 分析之后。某渠道统计的表有 5 亿,单表空间超过 350G。

服务器架构:一主多从。

数据库硬盘空间可用小于 90% 解决的方案

报警截图:

数据库硬盘空间可用小于 90% 解决的方案

二. 处理流程

1. 解决方法一:

钞能力,增加 RDS 硬盘空间,剧终!但是会有大表查询效率问题,数据到达一定量还是需要会出现同样的问题。

2. 解决方法二:

  1. 备份表 A(mysqldump、xtrabackup 等)
  2. 跟研发沟通,新建相同表结构 B,将业务数据写入表 B 中,跑一段时间无问题。【实际业务中,将此表按月分表】
  3. 截断表 A,释放硬盘空间(不会导致主从延迟)。
  4. 定时任务:定期备份删除过期数据。

涉及到的知识点:

mysql 备份(鄙视一下某云,某云备份居然还要收费)。

截断表是否会导致主从延迟(不会)。

表空间分析

数据库硬盘空间可用小于 90% 解决的方案

mysqldump 备份命令

mysqldump -u 用户名 -h 数据库地址 -p '密码' --opt 数据库名 表名 > /data/ 备份文件名.sql

备份表的时候报错:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `XXXXX` at row: 686431

有报错,于是发工单,某云客服推荐使用 DMS 导出

数据库硬盘空间可用小于 90% 解决的方案

备份的时候影响小部分性能, 但是免费居然超过免费额度。 本着能免费,为啥要收费呢,真的是无语了,浪费几个小时!

 导出失败: 您当前使用的数据库实例管控模式为“自由操作”,已超出免费额度 1,000,000。如您需要继续操作请调整实例管控模式为“稳定变更”、“安全协同”后再进行 
数据库硬盘空间可用小于 90% 解决的方案

域名是修改数据库配置,再用 mysqldump 将表导出。

net_read_timeout:30
net_write_timeout:60

于是把这个参数修改为:

net_read_timeout:288000
net_write_timeout:288000

修改数据库配置

数据库硬盘空间可用小于 90% 解决的方案

再用 mysqldump 导出数据库,等了将近十几个小时之后终于备份成功,大小为 193G

mysqldump -u 用户名 -h 数据库地址 -p '密码' --opt 数据库名 表名 > /data/ 备份文件名.sql

新上一张表

实际在跟研发沟通,按月来做分表。比如:表名 + 日期 table_2208

数据库硬盘空间可用小于 90% 解决的方案

截断表之后的硬盘总大小

数据库硬盘空间可用小于 90% 解决的方案

删除表和截断表命令之间的区别

表删除包括表的定义和关联对象(规则、索引、约、触发器、主键,等)。很明显,一旦表被删除,那么表中包含的所有的数据行都会被一同删除。

truncate 命令则仅仅删除了表中所有的数据行。表的结构和所有的索引仍然继续存在,直到你输入删除表的命令(如上所述)。绑定到列上的规则、默认值、约束仍然继续绑定,并且触发器也仍然起作用。

截断表命令还会回收所有索引的分配页。

截断表的执行速度与不带 where 子句的 delete(删除)命令相同,甚至比它还要快。delete(删除)一次删除一行数据,并且将每一行被删除的数据都作为一个事务记录日志;而 truncate(截断)表则回收整个数据页,只记录很少的日志项。delete(删除)和 truncate(截断)都会回收被数据占用的空间,以及相关的索引。只有表的拥有者可以截断表。

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-08-08发表,共计1326字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中