相关疑难解决方法(0)

`ERROR 1114 (HY000) the table ... is full` innodb_file_per_table 设置为 autoextend

我有一个 MySQL 数据库,其中包含大量数据(100-200GB - 一堆科学测量值)。绝大多数数据存储在一张表中Sample。现在我正在创建数据库的从属副本,我想innodb_file_per_table在此过程中利用它的优势。所以我设置innodb_file_per_table了我的从属配置并导入了数据库的转储。令我惊讶的是,它失败了

第 5602 行的 ERROR 1114 (HY000):表 'Sample' 已满

该文件Sample.ibd目前约为 93GB,分区上有超过 600GB 的可用空间,因此这不是磁盘可用空间问题。它似乎没有达到任何类型的文件系统限制(我使用的是 ext4)。

对于可能是什么原因或要调查什么的任何想法,我将不胜感激。


更新:我正在使用mysql Ver 14.14 Distrib 5.1.66, for debian-linux-gnu (x86_64).

SELECT @@datadir; -- returns `/home/var/lib/mysql/`
SHOW VARIABLES LIKE '%innodb_data_file_path%'; -- ibdata1:10M:autoextend 

df -h /home/var/lib/mysql/
768G   31G  699G   5% /home
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-5.1

27
推荐指数
1
解决办法
8万
查看次数

即使设置了 innodb_file_per_table,Innodb ibdata1 文件如何增长 5 倍?

我设置了 innodb_file_per_table 并且就在今天,在我对 800M 表进行了几次更改以将其减少到大约 600M 之后,我的 ibdata1 文件从 59M 跳到了 323M。该特定表的 .ibd 文件减少了,但服务器的 ibdata1 文件变得疯狂。有任何想法吗?

mysql innodb ibdata

7
推荐指数
1
解决办法
3052
查看次数

什么会导致 RDS MySQL 数据库可用存储空间快速下降?

我在 Amazon RDS 上的 MySQL 数据库最近如何在大约 1.5 小时内从 10.5 GB 免费变为“存储已满”状态?

这是一个运行在 db.t2.micro 实例上的 15GB MySQL 5.6.27 数据库。通常每天只有几百 KB 被添加到它。

大约一天前,免费存储空间在大约 1.5 小时内从 10.5 GB 变为基本上 0 GB。写入 IOPS 图表仅显示在那段时间内我的常规低流量流量,因此显然数据必须是在服务器端生成的。

一个可能相关的说明是我的数据库有大约 7,000 个表,并且将 innodb_file_per_table 设置为 1。

类似的事件显然发生在 8 天前,但没有那么严重,我什至没有注意到它,因为它没有填满存储空间。

屏幕截图显示了 8 天前的事件以及一天前的存储填充事件 在此处输入图片说明

屏幕截图显示了存储填充事件的详细视图 在此处输入图片说明

我不是数据库专家,这是我的一个业余爱好项目,所以我正在努力弄清楚如何开始解决这个问题!

编辑 1

我开始查看@RolandoMySQLDBA 提供的答案,我意识到我遗漏了一些非常有用的细节。

写入数据库的唯一系统是两个 EC2 实例,它们每 30 分钟写入一次,这与图中看到的存储减少相对应。

这两个系统都从网络上收集相同的数据,然后它们都尝试在半小时内将收集到的数据同时写入我的数据库。我使用两个数据收集系统只是为了冗余,并且我对我的写入例程进行了编码,以便每个系统将尝试使用 INSERT IGNORE INTO 写入其所有数据,因此无论哪个系统首先写入该特定数据,第二个系统的插入尝试是干脆忽略了。

在每 30 分钟发生一次的写入期间,除了一个表外,数据库中的数千个表中的每一个都插入了一行。该表中没有插入任何内容,但其(大约)2000 行中的每一行都会更新,一次一个。

编辑 2

在添加了大约 2.5GB 的数据后,我从一个点恢复了数据库的实例(8/16 上的事件,如第一个屏幕截图所示),这样我就可以运行命令而不会遇到“存储已满”错误。

在@RolandoMySQLDBA 的帮助下,我能够看到使用了多少 InnoDB 和 MyISAM 数据(如何监视 MySQL …

mysql innodb mysql-5.6 amazon-rds

6
推荐指数
1
解决办法
6025
查看次数

MySQL无法删除表

我有一个损坏的表,无法删除它来恢复它。如何从数据库中删除该表?

当我尝试在表上查询时,这就是我得到的......

mysql> SELECT * FROM tbl_company LIMIT 10;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    4
Current database: us_businessdb

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.soc            k' (111)
ERROR:
Can't connect to the server
Run Code Online (Sandbox Code Playgroud)

这是错误日志;

2017-08-10T16:11:28.492290Z 4 [ERROR] InnoDB: Trying to access page number 3 in space 35, space name us_businessdb/tbl_company, which is …
Run Code Online (Sandbox Code Playgroud)

mysql innodb

3
推荐指数
1
解决办法
2万
查看次数

MariaDB:如何减小 ibdata 文件大小

我发现我的MariaDB的ibdata文件不断增加。所以,我搜索了这个,发现innodb_file_per_table应该设置为1。但是,我的DBMS的配置已经设置为1;

为什么 ibdata 文件大小不断增加以及我还应该为此做什么。

以下是我的 dbms 信息。

DBMS: MariaDB
engine: InnoDB Engine
version: 10.3

** my.cnf **
innodb_file_per_table=ON
transaction-isolation=READ-COMMITTED
Run Code Online (Sandbox Code Playgroud)

mysql innodb mariadb ibdata

3
推荐指数
1
解决办法
5039
查看次数

临时表已满

The table '/mnt/disks/data/tmp/#sql58de_a0f6_7' is full

查询相当复杂/大。连接和并集中的大量连接、排序、分组……返回十分之一的结果。否则会导致上述错误。

运行查询时,CPU 和内存会增加,但不会达到最大值。有足够的磁盘空间(100Gb 可用)。

我摆弄过:

innodb_log_file_size
innodb_log_buffer_size
innodb_temp_data_file_path
innodb_data_file_path
innodb_data_home_dir

max_heap_table_size
tmp_table_size

table_open_cache
table_definition_cache
thread_cache_size
sort_buffer_size
Run Code Online (Sandbox Code Playgroud)

tmpdirslave_load_tmpdir设置为/mnt/disks/data/tmp具有足够的空间并且在运行查询时永远不会耗尽空间。innodb_tmpdir设置为NULL这意味着它回落到tmpdir?

由于我读到了有关此问题的内容,我更改了一些设置。其他的经过mysqltuner的建议。但我不能让查询始终成功。

所以:有些东西空间不足。但什么?那么在哪里呢?

  • 版本:Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)
  • 存储引擎:InnoDB

mysql temporary-tables

3
推荐指数
1
解决办法
9320
查看次数