背景:我在 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-server,从转储中恢复数据库;将大小从16G减小到11G,但原来的问题依然存在。
我对此表示怀疑。如果您达到限制,则会被报告(可能
/var/log/mysql/error.log
,和/或/var/log/mysql.log
)。这些限制不可编辑:
InnoDB 允许多达 40 亿个表。
MySQL 每个表的硬限制为 4096 列
最大表空间大小为 40 亿页 (64TB),这也是表的最大大小。
默认情况下,MyISAM 允许数据和索引文件增加到 256TB,但可以将此限制更改为最大允许大小 65,536TB(2567 - 1 个字节)。
但你离那些不远。
其他限制可以通过编辑来实施,
/etc/my.cnf
但如果有你添加它们。这个通知没有说什么有用的。
您的问题出在函数上
create_db
,MySQL 抛出错误。从理论上讲,它确实可能是 MySQL 的限制,但查询错误的几率要高得多。数据中可能存在(双)引号或其他未正确处理的字符。或者有一个不正确的 JOIN 并且由于数据量 MySQL 现在认为它需要使用另一个 INDEX(具有许多相同值或字段中具有 NULL 值的 ORDER BY 的 SELECT 往往会切换 INDEX a我的经验很多)。您可能需要找出 SQL 命令实际上是什么并检查它或执行结果。
如果没有函数的实际内容和数据库示例,就没有太多可做的了。