sqlite格式错误的数据库仅在本地
我有一个SQLite数据库托管在我的网站上,在那里它工作得很好。我需要添加一些新的查询,我喜欢在上线之前在本地测试它们 问题是,在我下载db文件以在本地使用它之后,当我尝试运行一个查询(与在线查询相同)时,我会得到一个“数据库磁盘映像格式不正确” 知道问题出在哪里吗 我的网站详细信息 服务器:linux SQLite 3.x的PDO驱动程序:已启用 SQLite库:3.3.7 我的本地详细信息 服务器:带XAMPP的Windows 7(1.7.2) SQLite 3.x的PDO驱动程序:已启用 SQLite库:3.6.16sqlite格式错误的数据库仅在本地,sqlite,malformed,Sqlite,Malformed,我有一个SQLite数据库托管在我的网站上,在那里它工作得很好。我需要添加一些新的查询,我喜欢在上线之前在本地测试它们 问题是,在我下载db文件以在本地使用它之后,当我尝试运行一个查询(与在线查询相同)时,我会得到一个“数据库磁盘映像格式不正确” 知道问题出在哪里吗 我的网站详细信息 服务器:linux SQLite 3.x的PDO驱动程序:已启用 SQLite库:3.3.7 我的本地详细信息 服务器:带XAMPP的Windows 7(1.7.2) SQLite 3.x的PDO驱动程序:已启用
如何将SQLITE3DB文件下载到本地系统 如果在服务器联机时使用FTP或SCP之类的工具直接获取该文件,则很可能检索到损坏的文件。想想看:在互联网上传输这样一个文件至少需要几秒钟——在这几秒钟内,您的站点仍然在线,并且在服务器DB文件上执行事务。因此,文件的第一个字节将反映事务1003,而最后一个字节将反映事务1015。实际上,DB文件在您下载时会发生更改 我们还没有进入数据库日志文件和部分事务 您需要的是DB文件的原子副本。甚至服务器上的
cp
也可能不够快。您需要一种在复制文件时锁定数据库的方法
有三种方法可以做到这一点:
- 使用服务器上的
shell实用程序和数据库的sqlite3
。然后可以压缩SQL转储,下载它并重建本地数据库。有点麻烦,但几乎可以保证工作.dump
- 使用。有一个
命令,其作用与此基本相同。然后就可以下载新的DB文件了。不幸的是,较旧的SQLite版本可能不支持这一点.backup
- 使用sqlite3外壳实用程序锁定DB文件,使用
复制它,解锁。这是一种古老的,有点危险的方式,这就是为什么我不想深入讨论更多细节的原因cp
- 停止服务器以便不执行任何事务,复制文件,然后重新启动。我不认为这是一个实际的解决方案,因此它不包括在最后的计数中。
顺便说一句,包含一些破坏SQLite3数据库的常见方法-您可能想通过FTP查看一下…是的,但该文件非常小,如64KB,而且使用量不多,我怀疑该文件可能仍然挂起且未关闭。@BrainCrash:很可能存在您未下载的活动日志文件。一般来说,在任何DBMS中,而不仅仅是SQLite中,可靠复制DB文件的唯一方法是通过DBMS本身。我的问题是我有一个便宜的主机,所以不能在服务器上运行shell命令。谢谢。下载.db shm和.db wal文件修复了我的问题。