1:MSSQLServer数据库导入到MySql数据库
创新互联公司服务项目包括鸡泽网站建设、鸡泽网站制作、鸡泽网页制作以及鸡泽网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,鸡泽网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到鸡泽省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
步骤:
1.安装mysql数据库的ODBC驱动,mysql-connector-odbc-3.51.23-win32.msi,下载并安装。
2.在Mysql中创建数据库实例。
3.打开控制面板 -- 管理工具 -- 数据源ODBC,在用户DSN中添加一个MySQL ODBC 3.51数据源。
4.在登录login选项卡中输入数据源名称Data Source Name,此处输入MysqlDNS(也可以自己随便命名,只要在后面导入数据的时候选择正确的数据源名字就行);然后输入服务器Server,用户User,密码Password,输入正确后选择要导入的数据库,Database选择你需要导入的数据库。在连接选项connect options中根据需要设置MySql使用的端口port和字符集Character Set。
注:字符集一定要和Mysql服务器相对应,如果Mysql使用了gbk字符集,则一定要设置字符集为gbk,否则导入到Sql Server可能会出现问号乱码。
5.打开sql server企业管理器,选择该数据库,单击右键选择所有任务 -- 导出数据。
6.‘选择数据源’为默认,‘选择目的’为刚刚安装的mySQL数据源,用户/系统DSN为MysqlDNS。在‘指定表复制或查询’中选择‘从源数据库复制表和视图’,在‘选择源表和视图’里,选择需要导入的表,即可将数据从MSSQLServer数据库导入到MySql数据库中。
2:MySql数据库导入到MSSQL数据库中
1.安装mysql数据库的ODBC驱动,mysql-connector-odbc-3.51.19-win32.msi
2.打开控制面板\管理工具\数据源ODBC,在用户DSN中添加一个MySQL ODBC 3.51数据源。
3.在登录login选项卡中输入数据源名称Data Source Name,此处输入MysqlDNS;然后输入服务器,用户User,密码Password,输入正确后选择要导入的数据库。在连接选项connect options中根据需要设置MySql使用的端口port和字符集Character Set。
注:字符集一定要和Mysql服务器相对应,如果Mysql使用了gbk字符集,则一定要设置字符集为gbk,否则导入到Sql 可能会出现问号乱码。
4.打开sql server企业管理器,新建一数据库MySql。选择该数据库,单击右键选择所有任务\导入数据。
5.选择数据源为其它(ODBC数据源),用户/系统DSN为MysqlDNS。其余根据向导进行,即可将数据从MySql数据库导入到MSSQL数据库中
在控制台根目录下打开sqlserver企业管理器,新建sqlserver组,根据自己的情况进行选择;然后新建sqlserver 注册,进行对sqlserver的连接。准备妥当后,下面就开始了:
首先打开数据转换服务,新建包,打开DTS界面,在连接中选择数据源进行配置。再选择将要转换到的目的文件,这里我选的 Textfile(destination),选择好文件的存放位置之后,我们来新建一个任务。这里我们只选择转换数据任务,将带有“选择源连接”“选择目的连接”的鼠标分别选中数据源和目的之后,我们对新生成的连接进行定义,在其属性中将源,目的,转换依次定义。
执行任务,提示成功。保存任务。然后在新建的任务上导出数据,有向导提示,其中一项选择“从源数据库复制表和视图”。
这一步已经把数据导出到目的文件中。
下一步在mysql中新建表,与将要导入的结构保持一致时,直接选取“从文本文件中提取数据,插入到数据表:”,将选项添好后,“发送”就可以了,浏览一下,数据已导入了。若要导入的表已经存在,且属性名也不同,这时就先建一个与要导入的数据相同结构的表并导入数据(按刚才的进行就可以了),然后在mysql中导出“数据和结构”,得到sql语句,将其在文本文件中编辑,利用文本编辑器的替换功能,将表名修改,列名加入,最后将其粘贴在要导入表的执行sql语句的地方,执行一下,数据便导入了。
项目上 MySQL 还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常见场景:1. 还原 RDS 时经常出现,因为 RDS 不提供 SUPER 权限;2. 由开发库还原到项目现场,账号权限等有所不同。
处理方式:
1. 在原库中批量修改对象所有者为导入账号或修改 SQL SECURITY 为 Invoker;2. 使用 mysqldump 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号。
二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会存在一个 DEFINER 和一个 SQL SECURITY 的属性,如下所示:
--视图定义CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW v_test
--函数定义CREATE DEFINER=`root`@`%` FUNCTION `f_test()` RETURNS varchar(100) SQL SECURITY DEFINER
--存储过程定义CREATE DEFINER=`root`@`%` PROCEDURE `p_test`() SQL SECURITY DEFINER
--触发器定义CREATE DEFINER=`root`@`%` trigger t_test
--事件定义CREATE DEFINER=`root`@`%` EVENT `e_test`
DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户;
SQL SECURITY:指明以谁的权限来执行该对象,有两个选项,一个为 DEFINER,一个为 INVOKER,默认情况下系统指定为 DEFINER;DEFINER:表示按定义者的权限来执行; INVOKER:表示按调用者的权限来执行。
如果导入账号具有 SUPER 权限,即使对象的所有者账号不存在,也可以导入成功,但是在查询对象时,如果对象的 SQL SECURITY 为 DEFINER,则会报账号不存在的报错。ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
改写好处:1. 可以避免还原时遇到 DEFINER 报错相关问题;2. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。
通过replication (master-slaves)实现了这两张表的复制功能,mysql的版本是5.1.54,基于记录的复制(Row-Based Replication)。
但是在备库调用存储过程时出了问题,这个存储过程中使用了UUID_short()函数,在存储过程这个函数不能产生新值!
1、打开navicat软件,打开要复制表的数据库,如下图所示:
2、点击上方的“工具-数据传输”,如下图所示:
3、进去之后,左边选择的是要复制的表的数据库,右边选择的将表复制到目标数据库,如下图所示:
4、打开左边数据库对象中的“表”,选择要复制哪几张表,点击开始。
5、点击开始,会弹出一个框,点击是,等待一下,出现如下界面,复制成功,点击“关闭”。
6、可以看到表已经复制到另外一个数据库上了,如下图所示: