sql - 如何将 SQL Server RDS 备份导入 SQL Server Linux Docker 实例?

标签 sql sql-server amazon-web-services docker amazon-rds

我已按照 AWS documentation 的指示进行操作关于使用 RDS 的存储过程导入/导出数据库。

该命令类似于:

exec msdb.dbo.rds_backup_database 
              @source_db_name='MyDatabase', 
              @s3_arn_to_backup_to='my-bucket/myBackup.bak'

这部分工作得很好,我过去已经做过很多次了。

但是我现在想要实现的目标;正在将此数据库恢复到本地 SQL Server 实例;然而我现在正在挣扎。我假设这不是一个“正常”的 SQL Server 转储 - 但我不确定其中的区别是什么。

我已经启动了一个新的 SQL Server for Linux Docker实例;看起来一切都准备好了。我做了一些更改,以便 sqlcmd工具已安装;所以从技术上讲,我正在运行的镜像是由这个 Dockerfile 组成的;差别不大。

FROM microsoft/mssql-server-linux:2017-latest

RUN apt-get update && \
    apt-get install -y curl && \
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
    apt-get update && \
    apt-get install -y mssql-tools unixodbc-dev

这张图片效果很好;我正在通过 docker build -t sql . 构建它并通过 docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=myPassword1!' -p 1433:1433 -v $(pwd):/backups sql 运行它

在我的本地文件夹中,我从 RDS 下载了备份,因此该文件现在位于 /backups/myBackup.bak

我现在尝试运行 sqlcmd使用以下命令导入数据;我遇到了一个问题,这让我认为这不是传统的 SQL 转储。不确定传统的 SQL 转储是什么样子,但文件的大部分看起来都是乱码 ^@^@^@^@当然还有其他事情。

/opt/mssql-tools/bin/sqlcmd -S localhost -i /backups/myBackup.bak -U sa -P myPassword1! -x

最后;我收到此错误:

Sqlcmd: Error: Syntax error at line 56048 near command 'GO' in file '/backups/myBackup.bak'.

最终答案

我的最终解决方案主要来自使用 -Q并运行 RESTORE查询而不是随文件导入,但我还需要包含一些 MOVE选项,因为它们指向 Windows 文件路径。

/opt/mssql-tools/bin/sqlcmd -U SA -P myPassword -Q "RESTORE DATABASE MyDatabase FROM DISK = N'/path/to/my/file.bak' WITH MOVE 'mydatabase' TO '/var/opt/mssql/mydatabase.mdf', MOVE 'mydatabase_log' TO '/var/opt/mssql/mydatabase.ldf', REPLACE"

最佳答案

您应该使用RESTORE DATABASE命令与备份文件交互,而不是将其指定为数据库命令的输入文件:

/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P myPassword1! -Q "RESTORE DATABASE MyDatabase FROM DISK='/backups/myBackup.bak'"

According to the sqlcmd Docs ,您使用的 -i 标志指定:

The file that contains a batch of SQL statements or stored procedures.

如果将数据库备份文件作为参数,该标志可能无法正常工作。

关于sql - 如何将 SQL Server RDS 备份导入 SQL Server Linux Docker 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51161613/

相关文章:

php - Mysql按最近24小时的日期排序,按id排在前1位

c# - 减去日期并在数据库的不同列中保存值

sql - INNER JOIN Where子句

sql-server - SQL Server 数据工具 : One or more issues caused a failure

sql - 如何使用 OR 条件优化日期范围

amazon-web-services - 亚马逊网络服务 (AWS) 或 Rackspace 云服务器之间的比较?

sql - PL/SQL 对具有相同 ID 的行进行编号

amazon-web-services - 使用前缀和分隔符列出 S3 存储桶的性能

amazon-web-services - aws 批处理作业陷入可运行状态,作业定义的内存要求很高

mysql - 找到多列索引的最佳顺序