‘壹’ 怎么快速迁移数据从 MSSQL 到 MySQL
一、迁移Database Schema。
首先使用Sybase Powerdesigner的逆向工程功能,逆向出SQL Server数据库的物理模型。具体操作是在Powerdesigner中选择“File”,“Reverse Engine”再选择Database,将DBMS选择为SQL Server
然后选择数据源,也就是要具体连接到的SQL Server数据库服务器,然后选择要逆向的数据库名,比如选中“WSS_Content_80”
单击确定即可生成物理模型图,然后单击“Database”菜单下的Change Current DBMS修改当前的DBMS,改为MySQL 5.0,单击确定后即可生成MySQL的物理模型 然后单击“Database”菜单下的“Generate Database”生成数据库脚本文件。
接下来手工修改下生成的脚本的内容。将其中的dbo.全部替换成空,将create user这样的语句删除掉。
如果有些字符在MySQL中是关键字,那么必须使用“`”(键盘上数字1左边那个符合)符合框起来。
加上MySQL所需要的存储引擎比如每个建表语句后跟上:
ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;将生成的脚本在MySQL中去运行一次即可创建数据库。
二、迁移数据内容
数据内容只能通过生成INSERT语句的方式来做。
首先使用SSMS的“生成脚本”功能(在数据库上右键,选择“任务”“生成脚本”选项),可以为SQL Server数据库中的数据生成插入脚本。
首先选择要迁移数据的表,这里我们全选所有的表
然后单击下一步,选择将脚本保存到新的查询窗口
单击“高级”选项,在高级选项窗口中选择“要编写脚本的数据的类型”为仅限数据
然后“确定”再下一步下一步即可生成INSERT脚本文件。
修改生成的脚本文件,主要有以下几项修改:
使用批量替换的方式去掉[ ]这是SQL Server的符合,在MySQL中不用这个。
使用批量替换的方式去掉dbo.
有些单词在MySQL中是关键字的,那么需要使用“`”引起来。
关于Datetime类型的数据,需要手工修改下,SQL Server默认生成的是这样的语句,在MySQL中是没办法解析的:
CAST(0x00009EEF00000000 AS DateTime)
为每一行添加一个;表示一个插入语句结束。这个分号在SQL Server中可以不需要,但是在MySQL中是必须的。简单的方法是使用高级的文本编辑器(比如Notepad++),将\r\n替换为;\r\n即可。
‘贰’ 如何通过使用“生成脚本向导”迁移数据库
当您在 Microsoft Windows Azure SQL Database中部署应用程序时,可能需要将内部部署的 SQL Server 实例上的数据库迁移到 SQL Database 中。本主题演示如何通过使用 Transact-SQL 脚本将一个简单的数据库迁移到 SQL Database。
Windows Azure SQL Database支持一部分 Transact-SQL 语言。在将数据库部署到 SQL Database 之前,您必须修改生成的脚本,使其仅包括支持的 Transact-SQL 语句。
创建 School 示例数据库
在 SQL Server Management Studio 中的“文件”菜单上,指向“新建”,然后单击“数据库引擎查询”。
在“连接到数据库引擎”对话框中,输入您本地 SQL Server 实例的信息,然后单击“连接”。
在查询窗口中粘贴本主题末尾处的 Transact-SQL 脚本,然后单击“执行”。
创建 Transact-SQL 脚本
在“对象资源管理器”中,右键单击“School”数据库,指向“任务”,然后选择“生成脚本”。
在“生成和发布脚本向导”对话框中,单击“下一步”进入“选择对象”步骤。选择“编写整个数据库及所有数据库对象的脚本”,然后单击“下一步”。
在“设置脚本编写选项”中,设置以下选项:
将“输出类型”设置为“将脚本保存到特定位置”。选择“保存到文件”。单击“单个文件”。在“文件名”中键入文件名和位置。单击“高级”。
在“高级脚本编写选项”中,将“数据库引擎类型的脚本”选项设置为“SQL Database”,将“将 UDDT 转换为基类型”选项设置为“True”,并将“要编写脚本的数据的类型”选项设置为“架构和数据”。单击“确定”。
单击“下一步”,再单击“下一步”,然后单击“完成”。
在 SQL Database 上运行脚本
通过 Windows Azure 平台管理门户或通过执行以下 Transact-SQL 命令在 SQL Database 服务器上创建 School 数据库:
CREATE DATABASE School
在 SQL Server Management Studio 中打开“查询”菜单,指向“连接”,然后选择“更改连接”。
输入 SQL Database 服务器名称和您的凭据,然后单击“选项 >>”。
在“连接属性”选项卡上的“连接到数据库”下拉菜单中,键入 School,然后单击“连接”。
右键单击 SQL Database 中的“School”数据库,然后选择“新建查询”。
在 SQL Server Management Studio 中的“文件”菜单上,指向“打开”,然后单击“文件”。在“打开文件”窗口中,从您之前在“生成和发布脚本向导”中指定的位置打开 school 脚本文件。
按 F5 执行该脚本。
School 数据库 Transact-SQL 定义
运行此脚本,在 SQL Server 的本地实例中创建 School 数据库。
Transact-SQL
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
USE [master];
GO
IF EXISTS (SELECT * FROM sys.databases WHERE name = 'School')
DROP DATABASE School;
GO
-- Create the School database.
CREATE DATABASE School;
GO
-- Specify a simple recovery model
-- to keep the log growth to a minimum.
ALTER DATABASE School
SET RECOVERY SIMPLE;
GO
USE School;
GO
-- Create the Department table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Department]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Department](
[DepartmentID] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Budget] [money] NOT NULL,
[StartDate] [datetime] NOT NULL,
[Administrator] [int] NULL,
CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED
(
[DepartmentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the Person table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Person]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Person](
[PersonID] [int] IDENTITY(1,1) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[HireDate] [datetime] NULL,
[EnrollmentDate] [datetime] NULL,
CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED
(
[PersonID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the OnsiteCourse table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OnsiteCourse](
[CourseID] [int] NOT NULL,
[Location] [nvarchar](50) NOT NULL,
[Days] [nvarchar](50) NOT NULL,
[Time] [smalldatetime] NOT NULL,
CONSTRAINT [PK_OnsiteCourse] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the OnlineCourse table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OnlineCourse]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OnlineCourse](
[CourseID] [int] NOT NULL,
[URL] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_OnlineCourse] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
--Create the StudentGrade table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[StudentGrade]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[StudentGrade](
[EnrollmentID] [int] IDENTITY(1,1) NOT NULL,
[CourseID] [int] NOT NULL,
[StudentID] [int] NOT NULL,
[Grade] [decimal](3, 2) NULL,
CONSTRAINT [PK_StudentGrade] PRIMARY KEY CLUSTERED
(
[EnrollmentID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the CourseInstructor table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstructor]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[CourseInstructor](
[CourseID] [int] NOT NULL,
[PersonID] [int] NOT NULL,
CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED
(
[CourseID] ASC,
[PersonID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the Course table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[Course]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Course](
[CourseID] [int] NOT NULL,
[Title] [nvarchar](100) NOT NULL,
[Credits] [int] NOT NULL,
[DepartmentID] [int] NOT NULL,
CONSTRAINT [PK_School.Course] PRIMARY KEY CLUSTERED
(
[CourseID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Create the OfficeAssignment table.
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[OfficeAssignment]')
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[OfficeAssignment](
[InstructorID] [int] NOT NULL,
[Location] [nvarchar](50) NOT NULL,
[Timestamp] [timestamp] NOT NULL,
CONSTRAINT [PK_OfficeAssignment] PRIMARY KEY CLUSTERED
(
[InstructorID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
-- Define the relationship between OnsiteCourse and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnsiteCourse_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[OnsiteCourse]'))
ALTER TABLE [dbo].[OnsiteCourse] WITH CHECK ADD
CONSTRAINT [FK_OnsiteCourse_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[OnsiteCourse] CHECK
CONSTRAINT [FK_OnsiteCourse_Course]
GO
-- Define the relationship between OnlineCourse and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_OnlineCourse_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[OnlineCourse]'))
ALTER TABLE [dbo].[OnlineCourse] WITH CHECK ADD
CONSTRAINT [FK_OnlineCourse_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[OnlineCourse] CHECK
CONSTRAINT [FK_OnlineCourse_Course]
GO
-- Define the relationship between StudentGrade and Course.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Course]')
AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]'))
ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD
CONSTRAINT [FK_StudentGrade_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[StudentGrade] CHECK
CONSTRAINT [FK_StudentGrade_Course]
GO
--Define the relationship between StudentGrade and Student.
IF NOT EXISTS (SELECT * FROM sys.foreign_keys
WHERE object_id = OBJECT_ID(N'[dbo].[FK_StudentGrade_Student]')
AND parent_object_id = OBJECT_ID(N'[dbo].[StudentGrade]'))
ALTER TABLE [dbo].[StudentGrade] WITH CHECK ADD
CONSTRAINT [FK_StudentGrade_Student] FOREIGN KEY([StudentID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[StudentGrade] CHECK
‘叁’ 如何把sqlserver数据迁移到mysql数据库及需要注意事项
二、将SQL
Server数据迁移到MySQL需要注意的一些问题
1、唯一索引的不同,sql
server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个null值。
2、存储过程的语法存在很大的不同,存储过程的迁移是最麻烦的,需要仔细修改。
3、程序中部分写的SQL语句由于语法的不同也要相应的修改。
三、将SQL
Server数据迁移到MySQL的常见方法
1、使用 SQLyog 迁移
优点
该迁移方法很简单,灵活,迁移时,可以进行字段的修改,比如在sql
server中原来是datetime,然后迁移到mysql时你可以配置成timestamp;成功率很高;
缺点
迁移很慢!这是该方法最大的缺点,如果表的数据量达到几十万行,甚至几百万行,你会发现迁移起来真的很慢。明显比其他迁移方法慢很多。
2、使用 powerdesigner 和 sql server 的脚本导出功能 来迁移
(1)、该方法首先使用 powerdesigner,对sql
server数据库,进行逆向工程,得到E-R图,然后生成MySQL的建表语句。完成数据库结构的迁移;当然表结构的迁移,不使用powerdesigner一样也是可以的。比如我将表结构导出成语句,然后手动进行修改,然后在MySQL中运行,也是一样的;
(2)、然后使用 sql server的工具 SSMS,将sql
server数据库中的表的数据,导出成insert语句,每个表对应导出一个文件,然后对文件进行一些处理,然后导入到MySQL数据库中。
3、使用Oracle MySQL Server 官方的 workbeach 工具进行迁移
(1)、在workbench 连接sql server时,用户需要有 view any database 的权限。不然workbench无法访问sql
server的表结构的元数据,从而无法进行迁移。
(2)、还有使用 Navicat 来进行迁移的方法,方法和 SQLyog 是类似的。
‘肆’ 如何把sqlserver数据迁移到mysql数据库及需要注意事项
在项目开发中,有时由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据迁移到MySQL。下面是小编日常整理的一种sqlserver数据库迁移的方法。
一、SQL Server中常用数据类型与MySQL不同的地方
二、将SQL Server数据迁移到MySQL需要注意的一些问题
1、唯一索引的不同,sql server的唯一索引的字段只能允许存在一个null值,而mysql,一直oracle中唯一索引对应的字段都允许存在多个null值。
2、存储过程的语法存在很大的不同,存储过程的迁移是最麻烦的,需要仔细修改。
3、程序中部分写的SQL语句由于语法的不同也要相应的修改。
三、将SQL Server数据迁移到MySQL的常见方法
1、使用 SQLyog 迁移
优点
该迁移方法很简单,灵活,迁移时,可以进行字段的修改,比如在sql server中原来是datetime,然后迁移到mysql时你可以配置成timestamp;成功率很高;
缺点
迁移很慢!这是该方法最大的缺点,如果表的数据量达到几十万行,甚至几百万行,你会发现迁移起来真的很慢。明显比其他迁移方法慢很多。
2、使用 powerdesigner 和 sql server 的脚本导出功能 来迁移
(1)、该方法首先使用 powerdesigner,对sql
server数据库,进行逆向工程,得到E-R图,然后生成MySQL的建表语句。完成数据库结构的迁移;当然表结构的迁移,不使用
powerdesigner一样也是可以的。比如我将表结构导出成语句,然后手动进行修改,然后在MySQL中运行,也是一样的;
(2)、然后使用 sql server的工具 SSMS,将sql server数据库中的表的数据,导出成insert语句,每个表对应导出一个文件,然后对文件进行一些处理,然后导入到MySQL数据库中。
3、使用Oracle MySQL Server 官方的 workbeach 工具进行迁移
(1)、在workbench 连接sql server时,用户需要有 view any database 的权限。不然workbench无法访问sql server的表结构的元数据,从而无法进行迁移。
(2)、还有使用 Navicat 来进行迁移的方法,方法和 SQLyog 是类似的。
‘伍’ 如何将A数据库的数据迁移到B数据库中
工具/原料
电脑 数据库
方法/步骤
1、首先,打开并连接Sql Server,在源数据库Source_db上右击,依次点击“编写表脚本为”→“CREATE到”→“新查询编辑器窗口”。
‘陆’ SQL2008 R2数据库迁移到SQL2008上 网上看到说在SQL2008R2上弄一个脚本 然后再SQL2008上运行脚本就可以
MS SQL数据库从2008 R2转移到2008的方法
SQL Server 2008 R2导出的过程
1.打开Management Studio,登录到服务器,在数据库中选择要转移的数据库,
右键--“任务(T)”--“生成脚本(E)...”。
2.在“生成和发布脚本”窗口中,点击“下一步”,
3.“选择要编写脚本的数据库对象”,可以不做设置,点击“下一步”,
4.点击[保存到文件]右边的“高级”按钮,在对话框中,设置“为服务器版本编写脚本”为“SQL Server 2008”,
设置“要编写脚本的数据的类型”为“架构和数据”。选择保存脚本的位置。
5.下一步,再下一步。导出完成。
SQL Server 2008导入的过程
1.打开Management Studio,登录到服务器,
2.选择菜单“文件”——“打开”——“文件”,选择.sql脚本文件,点击工具栏中的“执行”按钮。
3.在左侧的“对象资源管理器”中右键“数据库”——“刷新”。完毕。
‘柒’ 如何把sqlserver数据迁移到mysql数据库及需要注意事项
以下有几款迁移工具的对比,可以参考,比较推荐DB2DB.
软件易用性主要是指软件在导入前的配置是否容易。由于很多软件设计是面向程序员而非一般的数据库管理人员、甚至是普通的应用程序实施人员,而这一类人员很多时候并没有数据源配置经验。因为一些使用 ODBC 或者 ADO 进行配置的程序往往会让这类用户造成困扰(主要是不知道应该选择什么类型的数据库驱动程序)。下面让我们看看四个工具的设计界面:
>>>>
1、SQLyog
SQLyog使用的是古老的 ODBC 连接,但对于新一代的程序来说,这种方式的非常的不熟悉并且不容易使用,并且必须要求本机安装好相应的数据库的 ODBC 驱动程序(SQL Server 一般自带好)。
>>>>
2、NavicatPremium
NavicatPremium是四个应用工具中设计最不人性化的一个:从上图怎么也想象不到要点按那个小按钮来添加一个新的连接,并且这个连接设置不会保存,每次导入时都必须重新设置。NavicatPremium使用的是比 ODBC 稍先进的 ADO 设置方式(199X年代的产物),但使用上依然是针对老一代的程序员。
>>>>
3、Mss2sql
Mss2sql是最容易在网络上搜索出来的工具,原因之一是它出现的时间较早。
DB2DB同样迁移 300万数据时,仅仅使用了 2 分 44 秒,这个速度相当惊人。不过最后的结果出现一个 BUG,就是提示了转换成功,但后面的进度条却没有走完(在后面的数据完整性评测中,我们验证了数据其实是已经全部处理完毕了)。
‘捌’ 如何实现数据迁移 sybase
mp和load方法,本质上是备份和恢复迁移的简单过程如下:
1, 数据库数据备份(老库),使用备份脚本备份生产库导出数据库(云平台old数据库)。单用户状态,也可以使用压缩备份方式(可选)
2,压缩备份介质 已确认安装压缩软件,使用图形操作;
备份文件传输 备份文件ftp放到新服务器(bin模式),放于E盘(存储盘)
ftp IP_ADDR
bin
cd e:\
put *.zip
已确认ftp可以正常使用
3,解压缩 使用图形界面操作
4,备份文件导入 恢复方式load数据
use master
load database TEADB from "E:\backup\*.dat"
5,数据库检查 联机数据库
online database TEADB
检查数据一致性
dbcc checkdb("TEADB");
‘玖’ mysql数据库迁移,有什么工具或许办法
可以用Mysql-front,先导出member的Excel文件,然后把user表也导出Excel,把第一个表的列拷贝到第二个Excel里,然后再把Excel文件导入到user表里。
自己写脚本迁移过去,where条件是member和user的对应关系(这里假定member和user对应关系使用name对应的)
update user,member set user.price=member.money,user.truename=member.nickname where user.name=member.name
‘拾’ 简单分析Flask 数据库迁移详情
1、使用 Flask-Migrate 实现数据库迁移
db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现了数据库迁移的概念。
在开发过程中,随着需求的变化,有可能需要添加或修改表的一些字段,但是原表中的数据不能删除,此时就需要创建新表,并将旧表中的数据迁移至新表中,Flask-Migrate这个扩展就可以在不破坏数据的情况下更新数据库表的结构,并完成数据从旧表到新表的迁移。
2、Flask-Migrate的使用
可以使用pip install flask-migrate进行安装。在程序中,我们实例化 Flask_Migrate 提供的 Migrate 类,进行初始化操作。
实例化 Migrate 类,需要传入 Flask 实例 app 和 SQLAlchemy创建的实例 db。
2.1 数据库的迁移过程
先定义 User 模型类。
创建迁移环境
在开始迁移数据之前,需要先使用下面的命令创建一个迁移环境:
迁移环境只需创建一次,创建后会在项目根目录下生成一个 migrations 目录,其中包含了自动生成的配置文件和迁移版本目录。
生成迁移脚本
使用如下命令自动生成迁移脚本:
-m 选项添加备注信息,执行后迁移版本目录生成了迁移脚本。
迁移脚本内有两个函数:
upgrade():把迁移中的改动应用到数据库中
downgrade():将改动撤销
自动生成的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容,不一定完全正确,有必要再进行检查一下。
更新数据库
生成了迁移脚本后,使用flask db upgrade命令可完成对数据库的更新。执行后即可生成数据库及表。
如果之后我们需要改动 user 表中的字段,比如添加一个mobile字段,我们只需在 User 模型类中添加该属性,之后执行flask db migrate -m '注释'和flask db upgrade命令即可。
如果想要回滚迁移的话,可以执行flask db downgrade命令。
3、总结
这里只是介绍如何在 Flask 中进行数据库迁移,关于在生产环境下,是否需要使用迁移工具或者使用何种工具进行迁移,这里不做讨论,至于我的话,在生产环境中,我没有使用过Flask-Migrate,而是选择编写 SQL 脚本来处理数据库及表的更新或改动,我觉得这样更不容易出错,其实各有各的好处,看自己选择。