背景:我在 Ubuntu 18.04 LTS 下的 Apache2 网络服务器上运行 cqpweb,这是一个用 PHP 编写并连接到 mysql 数据库的语料库查询接口。Ubuntu 服务器是从头开始设置的,目前没有对 mysql 或 php 进行手动配置。
cqpweb 运行顺利,除非它开始抛出如下错误消息:
A MySQL query did not run successfully!
Original query: LOAD DATA LOCAL INFILE '/data2/cqpweb/cach/tab_dist_fycel9oplk' INTO TABLE `db_dist_g2f3ndxf40` FIELDS ESCAPED BY '' /* from User: knappen |
Function: create_db() | 2019-Apr-25 11:23:01 */
Error # 0:
这件事发生在一夜之间,系统没有更新或其他更改。因此我怀疑数据库的大小已达到某个限制,我必须增加它。
问题:mysql 数据库的大小限制是多少以及如何增加它们?
附加信息:
php --version
PHP 7.2.17-0ubuntu0.18.04.1 (cli) (built: Apr 18 2019 14:12:38) ( NTS )
mysql --version
mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper
mysql 的大小:
root@corpora:/var/lib/mysql# du -h ./
23M ./mysql
676K ./sys
16G ./cqpweb
1.1M ./performance_schema
16G ./
错误日志:有不相关消息/var/log/mysql/error.log
。
从 mysql 提示符(与 cqpweb 在同一数据库用户下)手动运行数据库查询成功(令我大吃一惊)。
编辑:原始磁盘空间不是问题——设备上有足够的空间。
EDIT2:我尝试采用蛮力方法解决基本问题,使用备份了数据库中的数据mysqldump
,销毁了数据库,重新安装了mysql服务器,从转储中恢复数据库;将大小从16G减少到11G,但原来的问题仍然存在。
答案1
因此,我怀疑数据库的大小已经达到限制,我必须增加它。
我对此表示怀疑。如果达到限制,则会被报告(可能是/var/log/mysql/error.log
,和/或/var/log/mysql.log
)。
mysql 数据库的大小限制是多少以及如何增加它们
这些限制不可编辑:
InnoDB 允许最多 40 亿个表。
MySQL 对每个表的列数有严格的限制,为 4096 个
表空间的最大大小为四十亿页(64TB),这也是表的最大大小。
MyISAM 默认允许数据和索引文件最大增长到 256 TB,但此限制可以更改为最大允许大小 65,536 TB(2567 − 1 字节)。
但你离这些还差得很远。
其他限制可以通过编辑来强制执行/etc/my.cnf
,但如果您添加了它们的话。
MySQL 查询未成功运行!
这条通知没有说任何有用的东西。
您的问题出在函数上create_db
,MySQL 抛出了错误。从理论上讲,这确实可能是 MySQL 的限制,但查询出错的可能性要高得多。也许数据中有一个(双)引号或其他字符未正确处理。或者 JOIN 不正确,并且由于数据量大,MySQL 现在认为它需要使用另一个 INDEX(根据我的经验,带有 ORDER BY 的 SELECT 具有大量相同值或字段中有 NULL 值,往往会频繁切换 INDEX)。
您可能需要找出 SQL 命令实际上是什么并检查它或执行的结果。
如果没有函数的实际内容和数据库的示例,那么就没有什么可继续的。