首先这里先描述下问题出现的场景,由于业务迭代过程中数据量出现剧增需要对服务进行压力测试,所以我们要搭建一套压测环境。这里就需要搭建一套专属压测的数据库,在安装好数据库服务后我们需要将现有正确数据导入进去模拟生产环境的场景。
导入数据到数据库这点就不多介绍了,有些可以直接通过两台数据库连接传输数据,或者通过一些数据日志文件进行同步。一切进行的都很顺利,过了一晚回来准备部署服务,但是却看到The table is full
的错误,这里从字面来看就是告诉我们表满了。通过一些资料和博客查询,主要从两个方面来解决。
这种情况的话需要修改Mysql的一些配置。主要也分两种情况。
第一种就是表最大行数有限制,这里我们执行ALTER TABLE tbl_name MAX_ROWS= ?;
修改即可。
第二种就是内存临时表大小受限,我们找到my.cnf
文件中的[mysqld]
添加两个参数。第一个是tmp_table_size = 256M
修改临时表大小,第二个就是max_heap_table_size = 256M
修改内存表大小。然后重启Mysql服务即可。
其实我们这边根据场景分析优先选择考虑是哪种情况,我们这边由于仅仅是数据传输场景,所以其实我这边是优先考虑这个情况造成的
The table is full
。
我们通过df -h
和du -sh *
逐步定位到我们Mysql服务的dataDir
目录磁盘已满,所以分析就是这个问题造成的数据传输中断。我们查到这台服务器其他磁盘目录分配了很大的空间未使用,这里我们通过【Linux - 利用软链接解决目录空间不足的问题】将原有data
目录移至新的目录并建立了软连接避免过多的关联修改,重启Mysql服务器后就恢复正常了。