mysql 表ful,你所不知的table is full那些事
当我们要写入新数据而发生“The table is full”告警错误时,先不要着急,按照下面的思路来逐步分析即可:
1、查看操作系统以及MySQL的错误日志文件
确认操作系统的文件系统没有报错,并且MySQL的错误日志文件中是否有一些最直观的可见的错误提示。
有可能是数据库文件超过操作系统层的文件大小限制,比如fat/fat32以及低版本的Linux,文件最大不可以大于2G(最大扩展到4G),这就需要转换fat32为NTFS,或升级Linux版本。
2、确认磁盘空间没有满
执行 df -h 查看剩余磁盘空间,如果发现磁盘空间确实已经用完,则尽快删除不需要的文件。
如果通过 du 计算各个目录的总和却发现根本不会用完磁盘空间时,就需要注意了,可能是某个被删除的文件还没完全释放,导致 df 看起来已经用完,但 du 却又统计不到。
这时候可以执行 lsof | grep -i deleted 找到被删除的大文件,将其对应的进程杀掉,释放该文件描述符。
如果该进程不能被杀掉,例如是 mysqld 进程在占用的话,可以在 MySQL 里找到是哪个内部线程在用,停止该线程即可。
曾经发生过这样一个例子:
用vim打开MySQL的slow query log,退出时选择了 “wq” 指令,也就是保存退出,结果悲剧发生了。
因为在其打开的那段时间内,slow query log有新日志产生,会持续写入,但他退出时采用保存退出的方式,变成了一个“新”文件(或者说新文件句柄 file handler),这个“新”文件无法被mysqld进程识别,
mysqld进程依旧将slow query log写入到原来它打开的那个文件(或者说文件句柄)里,该日志文件在持续增长,但手工保存退出的文件却再也不增长了,直接查看文件看不出任何异常。
这时候只能用 lsof -p `pidof mysqld` 才能看到该文件。
解决方法很简单,将原来的文件备份一下,执行下面的指令:
FLUSH SLOW LOGS;
备注:MySQL 5.5开始才支持 BINARY/ENGINE/ERROR/GENERAL/RELAY/SLOW 等关键字,之前的版本只能刷新全部日志。
3、确认数据表状态
如果是MyISAM引擎
默认配置下,MyISAM引擎最大可支持256TB(myisam_data_pointer_size = 6,256^6 = 256TB),除非操作系统层有限制。
在MySQL5.0中,MyISAM引擎行记录默认是动态长度,单表最大可达256TB,MyISAM行指针(myisam_data_pointer_size)长度为6字节。
在这之前,MyISAM行指针默认长度为4字节,只支持4GB的数据。改行指针最大值可设为8字节。
在行指针设置较小不够用的时候,为提高MyISAM表最大容量,可以修改表定义设定MAX_ROWS的值:ALTER TABLE `xx` ENGINE=MyISAM MAX_ROWS=nn
备注:表定义中,AVG_ROW_LENGTH 属性定义的是 BLOB/TEXT 字段类型的最大长度。
如果是InnoDB引擎
ibdata*共享表空间最后一个文件没有设置成自增长,或者超过32位系统的单文件大小限制。
解决方法:
1、ibdata*的最后一个文件(非最后一个文件无法设置为自动增长)设置成自动增长;
2、检查操作系统,迁移到64位操作系统下;
3、转成独立表空间;
4、删除历史数据,重整表空间;
如果是MEMORY引擎
1、适当提高max_heap_table_size设置(注意该值是会话级别,不要设置过大,例如1GB,一般不建议超过256MB);
2、执行ALTER TABLE t_mem ENGINE=MEMORY; 重整表空间,否则无法写入新数据;
3、删除部分历史数据或者直接清空,重整表空间;
4、设置 big_tables = 1,将所有临时表存储在磁盘,而非内存中,缺点是如果某个SQL执行时需要用到临时表,则性能会差很多;
顺便说下,如果数据表有一列自增INT做主键,但是该ID值达到了INT最大值的话,MyISAM、MEMORY、InnoDB三种引擎的告警信息是不一样的。
InnoDB引擎的告警信息类似这样:
ERROR 1467 (HY000): Failed to read auto-increment value from storage engine
而MyISAM和MEMORY引擎则都是这样:
ERROR 1062 (23000): Duplicate entry ’4294967295′ for key ‘PRIMARY’
参考
觉得文章有用?立即:
和朋友一起 共学习 共进步!
猜想失败,您看看下面的文章有用吗?
mysql 表ful,你所不知的table is full那些事相关推荐
- MySQL还能这样玩---第一篇之你所不知道的命令
MySQL还能这样玩---第一篇之你所不知道的命令 命令篇 DDL---表定义相关命令操作 show create table 表名 ---查看创建表的SQL语句 alter table 表名 mod ...
- MySql清空表的方法介绍 : truncate table 表名
清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...
- 解决(springboot项目)mysql表名大写,造成jpa Table doesn‘t exist问题
解决(springboot项目)mysql表名大写,造成jpa Table doesn't exist问题 参考文章: (1)解决(springboot项目)mysql表名大写,造成jpa Table ...
- MySQL表碎片化(Table Fragmentation)以及处理
关于MySQL中表碎片化(Table Fragmentation)产生的原因: 简单总结一下,MySQL Engine不同,碎片化的原因可能也有所差别.这里没有深入理解.分析这些差别.此文仅以Inno ...
- mysql.servers表存在_ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
MySQL版本:mysql5.7.21 修改用户权限,刷新权限表,报1146 mysql> flush privileges; ERROR 1146 (42S02): Table 'mysql. ...
- Mysql You can‘t specify target table ‘表名‘ for update in FROM clause错误解决方案
Mysql You can't specify target table '表名' for update in FROM clause错误解决方案 测试表结构及测试数据 1. 更新 code 开始以 ...
- mysql表被锁住/表打不开 Waiting for table metadata lock
mysql表被锁住/表打不开 Waiting for table metadata lock 执行命令: SHOW PROCESSLIST; 如果发现State 字段是:Waiting for tab ...
- 重启服务器后mysql表损坏 Incorrect key file for table ‘.\axxxx.MYI‘; try to repair it“,“tourl“:““,.....
重启系统后mysql表损坏 Incorrect key file for table '.\axxxx.MYI'; try to repair it","tourl":& ...
- 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
https://my.oschina.net/fdhay/blog/638631 高性能网络 | 你所不知道的TIME_WAIT和CLOSE_WAIT 2016-02-18 大房 大房说 本文是我将最 ...
最新文章
- cisco+路由器+固定外网IP与NAT+设置
- 5G 行业专网 — 公有云上的 5G 专网
- java 枚举高级应用_【后端】java基础(5.6)java高级基础之枚举
- 用php求n个分数的和,php关于数组n个随机数分成x组,使每组值相近的算法
- web加减乘除法c#_C#的加减乘除的问题
- gensim读取已训练模型LDA模型的模型与dictionary
- 深度学习2.0-25.Train-Val-Test划分检测过拟合(交叉验证)
- hashmap扩容机制 jdk1.7
- websocket实时聊天(一)
- 案例:Java多态实现饮料购买咖啡、可乐、矿泉水
- face++ 行驶证OCR识别
- 安装mysql忘了初始密码咋办_mysql安装忘记初始密码怎么办
- 用api提取ip的优点
- 三体归零者和盘龙鸿蒙,《三体》里归零者那么厉害,为什么不能逆转降维打击?...
- 图像处理——简单浮雕效果和倒影效果实战
- 谷歌adwords教程_区块链技术作为Google AdWords中的安全剧院
- 安卓手机管理_彻底解决安卓手机通知管理难题,顺便还实现了聊天消息防撤回!?
- 随机的UserAgent对付某反爬虫网站
- idea完美激活 转载
- 导线中电流分布和集肤深度
热门文章
- Unity3D手机斗地主游戏开发实战(02)_叫地主功能实现
- 基于zbus的MySQL透明代理(100行)
- WinSCP实现Ubuntu与 Windows 文件共享方法
- Oracle11.2.0.4 windows32+64bit opatch工具 11.2.0.0 百度云盘下载
- 查询指定目录下的文件中是否包含指定字符串
- 您不能在64-位可执行文件上设置DEP属性?
- 新RSS reader
- 迅雷Chrome插件引发的Uncaught ReferenceError: xl_chrome_menu is not defined JS报错
- Linux下的文件系统与目录系统简介
- 机器学习解决什么问题_机器学习帮助解决水危机