如何将远程计算机上运行的 MS SQL 数据库迁移到我在 linux 上运行的本地 MySQL 数据库,保留编码
Posted
技术标签:
【中文标题】如何将远程计算机上运行的 MS SQL 数据库迁移到我在 linux 上运行的本地 MySQL 数据库,保留编码【英文标题】:How to migrate MS SQL database running on remote machine to my local MySQL database running on linux, preserving encoding 【发布时间】:2016-12-20 21:52:50 【问题描述】:我有一台运行 SQL Server(v12,Express 版)的远程 Windows 10 机器,我需要将一个数据库转移到我的机器上,该机器正在运行 mysql 数据库 (MariaDB)。
MS SQL 数据库包含特殊字符(捷克语变音符号),如果我尝试在远程计算机上使用 MySQL Workbench 将数据库迁移到在同一远程计算机上运行的 MySQL,则会出现混乱。
如何正确传输数据库?
【问题讨论】:
【参考方案1】:使用 MySQL Workbench,我尝试了这些组合,但都没有奏效:
远程 MS SQL > 远程 MySQL 本机 ODBC 驱动程序
远程 MS SQL > 远程 MySQL ODBC 数据源驱动程序
远程 MS SQL > 远程 MySQL freeTDS ODBC 驱动程序(带或不带 UTF-8)
虚拟 MS SQL > 虚拟 MySQL 本机 ODBC 驱动程序
虚拟 MS SQL > 虚拟 MySQL ODBC 数据源驱动程序
虚拟 MS SQL > 虚拟 MySQL freeTDS ODBC 驱动程序(带或不带 UTF-8)
在任何一种情况下,迁移过程都会卡住(工作台无响应)或字符未正确传输。
试错的总时间约为 12 小时。
在这里,我将与您分享一种方法,如何成功地将整个 MS SQL 数据库迁移到在我的开发机器上运行的本地 MySQL 服务器。
当我从我的 VirtualBox 机器通过远程桌面连接 (RDC) 连接到远程 W10 机器时,起初我想删除这个额外的步骤以使事情变得更容易。
如果您还没有,请下载并安装free Virtual Box machine that Microsoft offers 并启动它
从此虚拟机启动 RDC,在连接之前,在虚拟机上添加本地磁盘以在远程计算机上可用
在远程机器上启动 SQL Server 管理工作室并创建数据库的备份(右键单击所需的数据库,任务 > 备份...,将备份文件保存到磁盘)
通过导航到网络并将文件上传到虚拟机上的 C: 驱动器,将此备份文件复制到虚拟机上的驱动器
在您的虚拟机上安装 MS SQL 服务器,免费的 Express 版,以及 SQL Server Management Studio(我已下载 2014 版)
创建新数据库并选择任务...>还原>数据库...,选择您上传到虚拟机的文件,选择覆盖现有数据库..
为您的 MS SQL 服务器创建新登录名(右键单击登录名),选择所需的登录名和密码,分配 sysadmin 角色,只是为了让事情变得更容易,因为这是一次性迁移过程
在您的本地主机 Linux 机器上安装最新的 MySQL Workbench,我假设 MySQL 数据库已经在本地运行,如果没有,请安装它
因为您使用的是 Linux,所以您需要额外的步骤来将 FreeTDS ODBC 驱动程序安装到您的系统,如果此 link, how to install FreeTDS driver on Linux 死机,请在 MySQL Workbench 手册中搜索 Database Migration Wizard / Microsoft SQL Server migration
将虚拟机设置为可从您的主机 linux 系统访问,我已通过选择附加到:桥接适配器并在虚拟机设置中选择 wlan0 来完成此操作
启动虚拟机并从适配器使用的同一网络中选择 IP 范围
在您的虚拟机上为 MS SQL 服务器添加防火墙规则或暂时关闭防火墙
从现在开始,一切都在您的本地 Linux 机器上完成并运行虚拟机
启动 MySQL Workbench 的数据库迁移,选择 MS SQL 作为源机器,输入您之前在虚拟机中设置的正确 IP 地址
作为目标数据库,使用本地 MySQL 数据库设置和凭据
在 Target Creation Options 步骤中仅选择 Create a SQL script file 并选择 Keep schemas if they already exit。
执行后续步骤,直到您到达数据传输设置。那里选择表格的在线副本...但不要按下一步
编辑步骤15中保存的脚本:
删除:
CREATE SCHEMA IF NOT EXISTS `Test` ;
添加:
CREATE DATABASE `Test` DEFAULT CHARACTER SET utf16 COLLATE utf16_czech_ci;
通过向表定义添加所需的字符集和排序规则来更改所有创建表定义:
CREATE TABLE IF NOT EXISTS `TestTable` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf16_czech_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf16 COLLATE=utf16_czech_ci;
在您的 MySQL 数据库中运行此更新后的脚本
进入 MySQL Workbench 中的下一步,数据应正确导入
可能有一些步骤没有明确说明,如果您需要一些说明,请在 cmets 中告诉我
【讨论】:
以上是关于如何将远程计算机上运行的 MS SQL 数据库迁移到我在 linux 上运行的本地 MySQL 数据库,保留编码的主要内容,如果未能解决你的问题,请参考以下文章
多个 MS Access 前端连接到单个远程 SQL Server 后端
如何在 Friends 计算机上运行带有 ms 访问数据库的 java 应用程序?它在我的电脑上运行良好
如何将数据从 Ms 访问迁移到 Derby 数据库或如何将数据从 My sql 迁移到 Derby 数据库
远程连接到 MS SQL - 使用 pyodbc 时出错 vs 使用 SQL Server Management Studio 成功