1

我将一个大型数据库转储到一个 SQL 文件中,该文件包含一个表的大型 BLOB 附件。在进行转储时,我打开了 hex-blob,并且我之前已经多次完成此转储,没有任何问题。

转储是使用 MySQL 5.1 数据库完成的。

我现在有一个全新安装的 MySQL 5.6 并且不能导入这个 SQL 文件。该文件本身约为 13GB,并且每次都在同一行失败。

mysql --user=root --password=xxxx --database=budgets_3 < budgets_3.sql
Warning: Using a password on the command line interface can be insecure.
ERROR 2006 (HY000) at line 3251: MySQL server has gone away

MySQL没有重新启动或崩溃。我已经使用大文件的文本查看了 SQL 文件,但看不到任何错误。除了insert声明非常大。我已经在 CLI 和 MySQL Workbench 上运行了导入,但都失败了。我已经设置了max_allowed_packet=128M但仍然无法正常工作(应该绰绰有余)。

这是 SQL 文件顶部的粘贴。

-- MySQL dump 10.13  Distrib 5.1.72, for Win64 (unknown)
--
-- Host: localhost    Database: nosweatbudgets_3
-- ------------------------------------------------------
-- Server version   5.1.72-community

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

这是来自我的工作站,我正在尝试更新到 MySQL 5.6,如果我无法解决这个问题,我将不得不从生产服务器上进行转储。这需要几个小时才能下载,所以我想看看我是否可以在这里工作。

4

1 回答 1

1

我运行此查询以查看max_allowed_packet运行导入时的实际值。

SHOW VARIABLES LIKE 'max%';

我发现 MySQL Workbench 6.x 在更改配置文件后没有重新启动 MySQL。结果,我解决问题的尝试没有奏效。

重新启动 MySQL 后,导入操作成功。

另外,我读到这max_allowed_packet是服务器和客户端都使用的设置。如果您遇到此问题,请确保在服务器配置和客户端上进行设置。mysql --max_allowed_packet=64M在命令行中像这样在客户端上设置。

问题是如果数据包太大,服务器会断开连接,如果数据包太大,MySQL客户端也会断开连接。

这在手册中进行了讨论。

http://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html

于 2013-10-07T02:59:45.693 回答