我将一个大型数据库转储到一个SQL文件中,该文件包含一个表的大型BLOB附件。在进行转储时,我打开了hex-blobs,之前我已经多次完成了这个转储,没有任何问题。
转储是使用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,如果我无法解决这个问题,我将不得不从生产服务器转储。这将花费很多时间下载,所以我想看看我是否可以在这里工作。
答案 0 :(得分: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