这里写自定义目录标题

  • 简介
  • 实现方式
  • 遇到的坑
  • sqlserver数据库在远程centos服务器中


简介

项目前期有个需求是把.mdf文件导入到sqlserver数据库中。因为本人一直习惯使用的是navicat,而且navicat premium版本支持连接mysql、sqlserver、mongodb等多种数据库,所以本文主要介绍使用navicat把.mdf文件导入到mysql数据库。

实现方式

百度了很久,大体的实现方式都相同,可参考 这篇文章进行操作。我这里把第一种方式叫做sql语句导入法,第二种实现方式叫做导入向导法
sql语句导入法,本人实践可行。导入向导法实现过程中遇到错误,未能实现。下面只介绍sql语句导入法实现过程中遇到的问题和解决办法。如果有小伙伴通过导入向导法实现成功了,可以再下方留言,共同学习一下。

遇到的坑

sqlserver数据库在远程centos服务器中

执行sql语句的时候,会提示.mdf和.ldf文件不是一个文件夹。

mdf格式导入mysql mdf文件导入navicat_mdf格式导入mysql


开始以为是路径中包含中文导致的,修改路径后,还是继续报错。网上很多文章说要修改.mdf和.ldf的权限(具体修改方式也可以参考上文中的文章,建议大家修改一下,以防万一),我这里修改之后还是会报同样的错误。然后才意识到,我这里是远程连接的sqlserver数据库,通过navicat进行导入操作的时候,肯定是利用了sqlserver服务,那么是不是可以认为,配置的.mdf和.ldf文件路径也必须是sqlserver数据库所在的服务器上的路径。想到这里,我就立即把这两个文件上传到sqlserver数据库所在的服务器上,然后替换sql语句中的文件路径为服务器上的文件路径。这里需要留意的是,你的sqlserver服务启动用户要有能够访问.mdf文件和.ldf文件的权限,如果你是用yum方式安装的sqlserver服务,默认的启动用户是mssql。执行下面两个命令后,再次执行sql语句,发现执行成功。刷新数据库后,发现已经自动创建了数据库和表,且数据全部导入成功,所以不需要预先创建数据库和表。

chown -R mssql xx.mdf
chown -R mssql xx.ldf

如果你是导入本地服务,应该不会有这个问题。