温馨提示×

SQL Server在Debian上的数据库迁移步骤是什么

小樊
38
2025-11-28 22:17:41
栏目: 云计算

SQL Server数据库迁移到Debian的可行路径与步骤

一、迁移路径概览

  • 路径A:在Debian上安装Microsoft SQL Server for Linux,通过备份/还原或bcp批量导入导出完成迁移。
  • 路径B:在Debian上运行SQL Server 2022 Docker容器,使用sp_attach_db直接挂载并附加现有的**.MDF/.LDF**数据文件。
  • 路径C:若源库并非SQL Server,而是MySQL等,先导出为SQL脚本或CSV,再在Debian上的SQL Server中导入与转换。上述路径均已在Debian 12场景有成熟实践与示例。

二、路径A 在Debian安装SQL Server并迁移

  • 安装与配置
    • 更新系统并安装依赖:sudo apt update && sudo apt upgrade;sudo apt install -y curl gnupg apt-transport-https
    • 导入GPG密钥并添加仓库(以Debian 12为例):
      • curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-archive-keyring.gpg
      • echo “deb [signed-by=/usr/share/keyrings/microsoft-archive-keyring.gpg] https://packages.microsoft.com/debian/12/prod/ stable main” | sudo tee /etc/apt/sources.list.d/mssql-server.list
    • 安装与初始化:sudo apt install -y mssql-server;sudo /opt/mssql/bin/mssql-conf setup(设置SA密码)
    • 安装命令行工具:sudo apt install -y mssql-tools(便于sqlcmd/bcp)
    • 验证服务:sudo systemctl status mssql-server;远程访问需开放1433/tcp并放通防火墙
  • 迁移方式
    • 备份/还原(推荐)
      • 源库:执行完整备份(SSMS或T-SQL BACKUP DATABASE),将**.bak**复制到Debian
      • 目标库:在Debian上用sqlcmd执行还原(RESTORE DATABASE),注意文件路径与WITH MOVE重定位数据/日志文件
    • bcp批量导出/导入(适合大数据量或跨网络)
      • 导出:bcp 表名 out 文件 -S 源服务器 -U 用户 -P 密码 -c -t"," -r"\n" -b 50000
      • 导入:bcp 表名 in 文件 -S 目标服务器 -U SA -P 密码 -c -t"," -r"\n" -b 50000 -E(保留标识列用-E)
      • 建议先生成格式文件(-f)复用结构,提升一致性与性能
  • 验证与收尾
    • 校验行数、主键/唯一性、约束、触发器、视图/存储过程、登录与权限
    • 更新连接字符串、应用配置与作业/维护计划,进行性能回归测试与基线对比

三、路径B 使用Docker在Debian附加现有MDF/LDF

  • 启动容器并挂载数据目录(宿主机目录需对容器可读写)
    • docker run -d
      -v /home/ying/Downloads/StuXk:/var/opt/mssql/data
      -e “SA_PASSWORD=YourStrong@Passw0rd”
      -p 1433:1433
      –name sql1
      mcr.microsoft.com/mssql/server:2022-latest
    • 如挂载权限不足,可执行:sudo chmod -R a+rwX /home/ying/Downloads/StuXk
  • 进入容器并附加数据库
    • docker exec -it sql1 /bin/bash
    • /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P “YourStrong@Passw0rd” -C
      -Q “EXEC sp_attach_db @dbname=N’YourDB’, @filename1=N’/var/opt/mssql/data/YourDB.mdf’, @filename2=N’/var/opt/mssql/data/YourDB_log.ldf’”
  • 适用场景与注意
    • 适合从Windows环境迁移已有**.MDF/.LDF**文件,快速上线
    • 需确保文件与SQL Server版本兼容,且挂载路径与权限正确;生产环境建议配合备份策略

四、路径C 源库为MySQL时的迁移要点

  • 导出源库
    • 逻辑备份:mysqldump -u 用户 -p 数据库名 > mysql_data.sql
    • 或导出为CSV(便于bcp/SSIS导入)
  • 在Debian的SQL Server中导入
    • 方案1:执行SQL脚本(可能需要适配数据类型/语法)
    • 方案2:CSV+bcp导入(按表逐批导入,配合格式文件)
    • 方案3:使用SSMS/SSIS进行字段映射与转换
  • 兼容性与转换
    • 重点检查:自增列、默认值、字符集/排序规则、时间精度、布尔/数值类型差异
    • 必要时使用转换工具或脚本预处理,再导入

五、常见问题与最佳实践

  • 版本与平台
    • 确认目标为受支持的Debian版本SQL Server版本;跨版本迁移需评估功能差异与兼容级别
  • 字符与排序规则
    • 统一源/目标的排序规则(COLLATION)代码页,避免比较/拼接差异
  • 大对象与性能
    • BLOB/TEXT与超大表,采用分批提交(bcp -b)、合理索引与约束检查策略,必要时暂时禁用非关键约束后校验
  • 安全与网络
    • 使用强SA密码与最小权限账户;仅开放必要端口(如1433/tcp),启用TLS/加密传输
  • 高可用与回退
    • 迁移窗口内保留源库只读或维护模式;准备回退方案与完整回滚计划,确保业务连续性

0