我目前正在与公司内的 DBA 和 IT 安全人员进行讨论,并被告知将我们的主数据库(防火墙后面的 MSSQL)安全地链接到我们的 Web 应用程序的唯一方法是制作备份文件,将文件通过 FTP 传输到 Web 服务器,然后运行脚本将导入的备份文件还原到防火墙外部托管的数据库(然后将数据导入 MYSQL)。我很难相信这是最好的解决方案。理想情况下,我希望在主 MSSQL 服务器和为 Web 应用程序提供服务的 MySQL 数据库之间建立双向直接链接,并使这些数据库同步。有人能告诉我这样的解决方案吗,或者我们真的需要依靠 FTP 来穿越防火墙吗?
谢谢!
答案1
这听起来就像一场噩梦。
为什么要尝试保持两个数据库同步?让面向互联网的 Web 应用程序直接访问数据库服务器并没有什么问题。我不是网络专家,但我认为典型的设置是这样的:
- 部署在 DMZ 中面向互联网的服务器上的 Web 应用程序
- 托管在内部网络服务器上的 SQL Server
- 数据库请求由防火墙从 Web 服务器 (DMZ) 转发到数据库服务器的特定 IP 和端口 (内部)
当然还有其他配置,但这是我比较熟悉的配置。
只需确保采取常规预防措施即可:
答案2
如您所知,将制表符分隔文件导入 MySQL 很容易。将 MSSQL 数据导出为与 MySQL 兼容的格式则完全是另一回事。一旦您拥有正确的制表符分隔文件,您就可以像这样导入它们:
TRUNCATE TABLE App;
LOAD DATA LOCAL INFILE 'App.tab' INTO TABLE App LINES TERMINATED BY '\r\n';
要从 MSSQL 中获取数据,您需要:
- 将 MSSQL 数据模式导出到 .sql 文件
- 将 .sql 模式文件修改为适用于 MySQL 的格式
- 将每个表导出到其自己的 .tab 分隔文件,该文件以表的名称命名并与步骤 2 中的数据相匹配。
- 所有这些文件推送到 DEV-PRODUCTION 服务器。
- 使用 MySQL LOAD DATA 函数导入所有内容。
所有这些都可以使用批处理文件和在 -remote 模式下使用 mysql.exe 编写脚本。远程模式的示例如下(但此示例是导出,而不是您需要的导入):
mysqldump --databases myDB -v -h zzzzzzs9c49.us-east-1.rds.amazonaws.com -u
user -P 3306 -p > rdsexport.sql
另外,也许看看这个以防万一它能起作用: 对称数据同步