簡體   English   中英

使用EF遷移歷史記錄表中的二進制數據還原mysqldump

[英]Restore mysqldump with binary data from EF migration history table

我正在嘗試從mysqldump生成的轉儲中還原數據庫。 但是,它包含二進制數據。

我做了一個數據庫的mysqldump ,其中有一個實體框架遷移歷史表。

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

該表的一列包含二進制數據(longblob),在嘗試還原時導致我出現問題。

我首先嘗試通過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 <轉儲。 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',

發現了問題!

我正在通過Powershell腳本運行mysqldump ,這導致dump.sql文件被錯誤地編碼。

改用蝙蝠腳本,現在可以使用了

不要使用 IO重定向,而是使用mysqldump選項。

-r,--result-file = name直接輸出到給定文件。 此選項應在使用回車換行符(\\ r \\ n)分隔文本行的系統(例如DOS,Windows)中使用。 此選項可確保僅使用一個換行符。

OS IO重定向將更改結果文件的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM