使用EF迁移历史记录表中的二进制数据恢复mysqldump

时间:2015-08-24 09:54:24

标签: mysql sql mysqldump ef-migrations

我正在尝试从使用mysqldump生成的转储中恢复数据库。但它包含二进制数据。

我创建了一个具有实体框架迁移历史表的数据库的mysqldump

  

mysqldump.exe --opt --user = root foo> dump.sql

此表有一个包含二进制数据的列(longblob),这会在尝试恢复时导致问题。

我首先尝试通过WorkBench进行恢复,但失败了。然后我复制了workbench使用的命令并手动运行它。它显然有相同的结果。

  

mysql.exe --protocol = tcp --host = localhost --user = root --port = 3306 --default-character-set = utf8 --comments --database = foo< dump.sql

     

错误:ASCII'\ 0'出现在语句中,但除非启用了选项--binary-mode且mysql以非交互模式运行,否则不允许这样做。如果预期ASCII'\ 0',则将--binary-mode设置为1。查询:'■ - '。

它告诉我添加--binary-mode=1,所以我做了。

  

mysql.exe --binary-mode = 1 --protocol = tcp --host = localhost --user = root --port = 3306 --default-character-set = utf8 --comments --database = foo < dump.sql

     

第1行的错误1064(42000):您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的'?? - '附近使用正确的语法

但它仍然无效。然后我试图在转储文件中找到??-但是却没有。我在某处读到我不应该改变字符集。所以我尝试从命令中删除--default-character-set=utf8

  

mysql.exe --binary-mode = 1 --protocol = tcp --host = localhost --user = root --port = 3306 --comments --database = foo< dump.sql

     

第1行的错误1064(42000):您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“■ - ”附近使用正确的语法

现在我可以在转储文件中找到■-,但它对我没有帮助:/

dump.sql

的内容
-- MySQL dump 10.13  Distrib 5.7.7-rc, for Win64 (x86_64)
--
-- Host: localhost    Database: foo
-- ------------------------------------------------------
-- Server version   5.7.7-rc-log

/*!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 */;

--
-- Table structure for table `__migrationhistory`
--

DROP TABLE IF EXISTS `__migrationhistory`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `__migrationhistory` (
  `MigrationId` varchar(100) NOT NULL,
  `ContextKey` varchar(200) NOT NULL,
  `Model` longblob NOT NULL,
  `ProductVersion` varchar(32) NOT NULL,
  PRIMARY KEY (`MigrationId`,`ContextKey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `__migrationhistory`
--

LOCK TABLES `__migrationhistory` WRITE;
/*!40000 ALTER TABLE `__migrationhistory` DISABLE KEYS */;
INSERT INTO `__migrationhistory` VALUES ('123456789012345_InitialCreate',

1 个答案:

答案 0 :(得分:0)

不要使用 IO重定向,而是使用mysqldump选项。

  

-r, - result-file = name                       直接输出到给定文件。应该使用此选项                       在使用回车的系统(例如,DOS,Windows)中                       换行对(\ r \ n)分隔文本行。这个选项                       确保只使用一个换行符。

OS IO重定向将更改结果文件的编码。