3

我在我的网站上托管了一个 SQLite 数据库,它工作正常。我需要添加一些新查询,并且我喜欢在上线之前在本地测试它们。

问题是,在我下载 db 文件以在本地使用它后,当我尝试运行查询(与在线工作相同)时,我得到一个“数据库磁盘映像格式错误”。

知道问题出在哪里吗?

我的网站详情

服务器:linux

SQLite 3.x 的 PDO 驱动程序:已启用

SQLite 库:3.3.7

我的本地详情

服务器:Windows 7 和 XAMPP (1.7.2)

SQLite 3.x 的 PDO 驱动程序:已启用

SQLite 库:3.6.16

4

1 回答 1

0

如何将 SQLite3 DB 文件下载到本地系统?

如果您在服务器在线时使用 FTP 或 SCP 之类的东西直接获取它,那么您很可能会检索到损坏的文件。想一想:通过 Internet,传输这样的文件至少需要几秒钟 - 在几秒钟内您的站点仍然在线并且在服务器 DB 文件上执行事务。所以文件的第一个字节将反映例如事务 1003,而最后一个字节将反映事务 1015。本质上,当您仍在下载 DB 文件时,它会发生变化。

而且我们还没有进入数据库日志文件和部分事务。

您需要的是数据库文件的原子副本。即使cp在服务器上也可能不够快。您需要一种在复制文件时锁定数据库的方法。

有三种方法可以做到这一点:

  • 在服务器和数据库上使用sqlite3shell 实用程序.dump。然后,您可以压缩 SQL 转储,下载它并重建本地数据库。有点麻烦,但几乎可以保证工作。

  • 使用SQLite3 备份 APIsqlite3 shell 实用程序有一个.backup几乎相同的命令。然后你可以下载新的数据库文件。不幸的是,旧的 SQLite 版本可能不支持这一点。

  • 使用 sqlite3 shell 实用程序锁定数据库文件,用于cp复制它,解锁。旧的,有点危险的方式,这就是为什么我不会详细介绍的原因。

  • 停止服务器以便不执行任何事务,复制文件,重新启动。我不认为这是一个实际的解决方案,因此它不包括在最终计数中。

顺便说一句,这个页面包含一些破坏 SQLite3 DB 的常见方法 - 你可能想看看......

于 2011-07-13T12:04:24.507 回答