MySQL 8.0报错1114, “The table ‘xxx‘ is full

363 阅读1分钟

最近查询MySQL的一个报表程序,在执行大的查询分组操作的时候报错。

sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1114, "The table '/data/mysql/5306/tmp/#sql70da_911_3' is full")
 
[SQL: select .. group by ..) a
        ;]

数据库版本:

dba_ch [(none)]> select version();
+-----------+
| version() |
+-----------+
| 8.0.25-15 |
+-----------+
1 row in set (0.00 sec)

解决方法:

  1. 调整 internal_tmp_mem_storage_engine
set global internal_tmp_mem_storage_engine = MEMORY;

链接:forums.percona.com/t/mysql-8-0…

  1. 并增大tmp_table_size、max_heap_table_size参数的值到640M。
root [(none)]> set global tmp_table_size=134217728*5;
Query OK, 0 rows affected (0.00 sec)
 
root [(none)]> set global max_heap_table_size=134217728*5;
Query OK, 0 rows affected (0.00 sec)

# 查询
SHOW VARIABLES LIKE 'tmp_table_size';    
SHOW VARIABLES LIKE 'max_heap_table_size';