如何在Linux系统下导出和导入SQL Server 2017数据库?
我来帮你梳理下在Linux Mint 18.3上操作SQL Server 2017数据库导出导入的几种靠谱方法,尤其是你关注的脚本化实现方式:
一、使用
sqlcmd通过备份/还原实现(脚本化首选) 这是SQL Server跨平台最标准的导出导入方案,完全支持脚本自动化,适合批量或定时操作。
1. 导出(备份)数据库
直接通过sqlcmd连接实例执行备份命令,记得替换占位符内容:
sqlcmd -S localhost -U SA -P "你的SA密码" -Q "BACKUP DATABASE [你的数据库名] TO DISK = '/var/opt/mssql/data/你的数据库名.bak' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10;"
各参数说明:
FORMAT:创建全新备份集,覆盖同名旧文件INIT:初始化备份介质,清空原有内容后写入新备份STATS = 10:每完成10%进度输出一次状态,方便监控
注意:备份路径要选SQL Server的运行用户mssql有权限访问的目录,默认/var/opt/mssql/data/是安全选择。
2. 导入(还原)数据库
如果要还原到同一或另一台Linux服务器的SQL Server实例,先把备份文件放到目标服务器的可访问路径,再执行还原命令:
sqlcmd -S localhost -U SA -P "你的SA密码" -Q "RESTORE DATABASE [目标数据库名] FROM DISK = '/var/opt/mssql/data/你的数据库名.bak' WITH REPLACE, MOVE '你的数据库名' TO '/var/opt/mssql/data/目标数据库名.mdf', MOVE '你的数据库名_log' TO '/var/opt/mssql/data/目标数据库名_log.ldf', STATS = 10;"
关键参数说明:
REPLACE:若目标数据库已存在,直接覆盖(谨慎使用)MOVE子句:由于备份文件中记录的是原服务器的物理文件路径,需要重新指定目标服务器的mdf/ldf存储路径
如果不清楚备份文件里的逻辑文件名,可以先执行这条命令查询:
sqlcmd -S localhost -U SA -P "你的SA密码" -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/data/你的数据库名.bak';"
二、使用JetBrains DataGrip(可视化+脚本导出)
DataGrip是跨平台的数据库工具,既支持可视化操作,也能生成可复用的脚本,适合兼顾效率和灵活性的场景。
1. 导出数据库
- 连接到你的SQL Server实例,找到要导出的数据库
- 右键点击数据库 → 选择Export Data
- 在导出向导中选择
SQL格式(适合脚本化),配置导出选项:可选择导出结构+数据、仅结构,还能设置是否包含建库语句、索引、触发器等 - 最后可以直接生成脚本文件,或保存导出配置以便重复使用
2. 导入数据库
- 右键点击目标服务器的
Databases节点 → 选择Restore,可直接选择备份文件还原(和sqlcmd的备份文件通用) - 若要导入SQL脚本:右键点击目标数据库 → 选择Run SQL Script,选中之前导出的脚本文件执行即可
三、用
mssql-scripter生成T-SQL脚本(轻量脚本化工具) 这是微软官方的跨平台工具,专门用来生成SQL Server数据库的结构/数据脚本,适合纯文本脚本的导出导入场景。
1. 安装mssql-scripter
需要先有Python环境,然后用pip安装:
pip install mssql-scripter
2. 导出数据库脚本
导出完整数据库(结构+数据):
mssql-scripter -S localhost -U SA -P "你的SA密码" -d "你的数据库名" --schema-and-data > 你的数据库名.sql
仅导出结构:
mssql-scripter -S localhost -U SA -P "你的SA密码" -d "你的数据库名" --schema-only > 你的数据库名_schema.sql
3. 导入脚本
用sqlcmd执行生成的脚本即可:
sqlcmd -S localhost -U SA -P "你的SA密码" -d "目标数据库名" -i 你的数据库名.sql
提示:如果脚本包含建库语句,目标数据库无需提前创建;否则需要先手动创建空数据库。
四、批量操作单表数据:
bcp命令 如果只需要导出导入特定表的大数据量数据,bcp是高效的选择,支持文本格式的批量读写。
1. 导出表数据到CSV
bcp 你的数据库名.dbo.你的表名 out /path/to/你的表名.csv -S localhost -U SA -P "你的SA密码" -c -t, -r\n
参数说明:
-c:以字符格式导出-t,:指定列分隔符为逗号-r\n:指定行分隔符为换行
2. 导入CSV到表
bcp 你的数据库名.dbo.你的表名 in /path/to/你的表名.csv -S localhost -U SA -P "你的SA密码" -c -t, -r\n
注意:目标表需要提前创建好与源表一致的结构。
内容的提问来源于stack exchange,提问作者Andrey Bushman
相关产品推荐
相关产品推荐

