我使用 mysqldump 创建一个用于备份的平面文件。我已使用此文件在备用服务器上重新创建数据库。我在命令行上通过 ssh 运行导入过程,但收到多个Packet too Large
错误。
我用更大的 max_allowed_packet(即 1000M)重新启动了 mysql,但仍然收到错误消息。我什至尝试在导入文件中设置 max_allowed_packet,仍然收到错误。
有没有办法确保设置 max_allowed_packet 和/或使用 mysqldump 来创建不会导致此问题的文件?
以供参考:
未压缩的 mysqldump 文件约为 2GB
数据库类型是 INNODB
我正在使用 MySQL 数据库来存储文件。
我使用的表结构如下:
+--------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| AttachmentID | int(11) | NO | PRI | NULL | |
| Data | longblob | NO | | NULL | |
+--------------+----------+------+-----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
INSERT
我使用的命令尽可能简单:
INSERT INTO table (AttachmentID, Data) VALUES (attachmentID, attachmentData);
Run Code Online (Sandbox Code Playgroud)
很明显, whereattachmentID
是一个int,并且attachmentData
是一个大字节数组。
阅读了关于如何在数据库中存储文件的几个指南后,我max_allowed_packet
将配置文件中的设置增加到“512M”,对于我实际插入的文件来说已经足够了。
这适用于 30MB - 40MB 的几个文件。但是,现在我要插入 90MB+ 范围内的较大文件,我收到“内存不足”异常,需要的字节数等于我尝试插入的文件的大小。
该服务器是一个虚拟服务器,分配了 4GB 的空间,并且没有其他可能干扰的运行。
为什么我会收到较大文件的内存不足错误,而不是较小的文件? 这个文件大小限制来自哪里?
我在下面包含了我的配置文件:
[client]
port = 3306
socket …
Run Code Online (Sandbox Code Playgroud) 在探索 InnoDB 的聚集 B 树索引系统时,我认为许多 NULL(或小)列的存在对 InnoDB 性能没有显着影响。
多余列的存在是否会降低 mysql 的性能?
PS我尝试了实际测试,但没有显着效果。不过我觉得应该是在重载的情况下比较的。这就是我很想了解关于这件事的技术推理的原因。
我在数据库管理方面很新。我现在公司的数据库架构是主从复制。我们使用的是 MySQL 5.0.86 版。
几周前,我们升级了公司的主应用程序。此升级为其数据库的所有表添加了一列。升级前,我们的 ibdata 大小约为 3.1GiB。升级后是~5.2GiB。
今天,我已经用 mysqldump 完成了一个完整的备份恢复测试。恢复后,ibdata 大小约为 3.6 GiB。标准选择在恢复中显示与原始数据库中相同的数据。
我已经通过 select to information_schema 检查了数据大小(CUSTODIA 是我们主应用程序的名称):
select SUM(DATA_LENGTH+INDEX_LENGTH) from TABLES where TABLE_SCHEMA='CUSTODIA';
Run Code Online (Sandbox Code Playgroud)
这是主数据库中的结果:
+-------------------------------+
| SUM(DATA_LENGTH+INDEX_LENGTH) |
+-------------------------------+
| 5683345068 |
+-------------------------------+
Run Code Online (Sandbox Code Playgroud)
这是恢复数据库的结果:
+-------------------------------+
| SUM(DATA_LENGTH+INDEX_LENGTH) |
+-------------------------------+
| 3735748608 |
+-------------------------------+
Run Code Online (Sandbox Code Playgroud)
我的问题:
对此的任何想法将不胜感激。谢谢你。
我有一个基于 mysql 5.0.75-0Ubuntu10.2 的数据库,在 Ubuntu 9.04 下运行。我在该数据库中有一个带有中等 blob 列的表。我一直在使用 automysqlbackup 对数据库进行夜间备份/转储,然后定期将它们恢复到我们拥有的临时服务器或我的 MacBookPro。
我们最近在恢复与数据包大小相关的错误时遇到了一些麻烦。上周晚些时候,我将 automysqlbackup 中的 max_packet_size 设置更改为 1MB(未指定)。更改后,数据库备份将在带有 blob 列的表处停止。实际上,它在该表中的第一条记录处停止。我是否必须将 max_packet_size 设置设置为至少与该列中存储的最大 blob 一样大?
在MySQL/InnoDB中,聚集索引与主键同义,因此选择一个差的主键会影响数据库性能,即使用UUID作为PK是数据库写入的性能杀手。
现在,在 PostgreSQL 中,不存在像 MySQL 中那样的集群限制。如果我选择UUID作为PK有什么影响?PostgreSQL 中是否也像 MySQL 一样存在数据库写入性能杀手?
longblob是Mysql最大的数据类型。如果我想保存大于 4gb(longblob)的东西,我该怎么做?。
我说的是 Mysql v-5.+
mysql ×7
backup ×3
mysqldump ×3
innodb ×2
mysql-5 ×2
performance ×2
datatypes ×1
memory ×1
null ×1
postgresql ×1
primary-key ×1
size ×1