如何将 SQLite3 DB 文件下载到本地系统?
如果您在服务器在线时使用 FTP 或 SCP 之类的东西直接获取它,那么您很可能会检索到损坏的文件。想一想:通过 Internet,传输这样的文件至少需要几秒钟 - 在几秒钟内您的站点仍然在线并且在服务器 DB 文件上执行事务。所以文件的第一个字节将反映例如事务 1003,而最后一个字节将反映事务 1015。本质上,当您仍在下载 DB 文件时,它会发生变化。
而且我们还没有进入数据库日志文件和部分事务。
您需要的是数据库文件的原子副本。即使cp
在服务器上也可能不够快。您需要一种在复制文件时锁定数据库的方法。
有三种方法可以做到这一点:
在服务器和数据库上使用sqlite3
shell 实用程序.dump
。然后,您可以压缩 SQL 转储,下载它并重建本地数据库。有点麻烦,但几乎可以保证工作。
使用SQLite3 备份 API。sqlite3 shell 实用程序有一个.backup
几乎相同的命令。然后你可以下载新的数据库文件。不幸的是,旧的 SQLite 版本可能不支持这一点。
使用 sqlite3 shell 实用程序锁定数据库文件,用于cp
复制它,解锁。旧的,有点危险的方式,这就是为什么我不会详细介绍的原因。
停止服务器以便不执行任何事务,复制文件,重新启动。我不认为这是一个实际的解决方案,因此它不包括在最终计数中。
顺便说一句,这个页面包含一些破坏 SQLite3 DB 的常见方法 - 你可能想看看......