我在我的网站上托管了一个SQLite数据库,并且工作正常。我需要添加一些新的查询,我想在上线之前在本地测试它们。
问题是,在我下载db文件以在本地使用它之后,当我尝试运行查询(同样在线工作)时,我得到“数据库磁盘映像格式错误”。
知道问题出在哪里?
我的网站详情
服务器:linux
SQLite 3.x的PDO驱动程序:已启用
SQLite Library:3.3.7
我的本地详情
服务器:带有XAMPP的Windows 7(1.7.2)
SQLite 3.x的PDO驱动程序:已启用
SQLite Library:3.6.16
答案 0 :(得分:0)
如何将SQLite3数据库文件下载到本地系统?
如果您在服务器联机时使用FTP或SCP之类的东西直接获取它,则很可能会检索到损坏的文件。想一想:通过Internet,传输这样的文件至少需要几秒钟 - 在几秒钟内,您的站点仍处于联机状态,并且在服务器DB文件上执行事务。所以该文件的第一个字节将反映例如事务1003,而最后的字节将反映事务1015.基本上,当您仍在下载时,DB文件会发生变化。
我们仍然没有进入数据库日记文件和部分交易。
您需要的是DB文件的原子副本。甚至服务器上的cp
可能还不够快。复制文件时,您需要一种锁定数据库的方法。
有三种方法可以做到这一点:
使用服务器上的sqlite3
shell utilty和数据库.dump
。然后,您可以压缩SQL转储,下载它并重建本地数据库。有点麻烦,但几乎可以保证工作。
使用SQLite3 backup API。 sqlite3 shell utility有一个.backup
命令,几乎完全相同。然后你可以下载新的DB文件。不幸的是,较旧的SQLite版本可能不支持此功能。
使用sqlite3 shell实用程序锁定数据库文件,使用cp
进行复制,解锁。旧的,有点危险的方式,这就是为什么我不会详细介绍。
停止服务器以便不执行任何事务,复制文件,重新启动。我不认为这是一个实际的解决方案,因此它不包含在最终计数中。
BTW,this page包含一些破坏SQLite3数据库的常用方法 - 您可能希望看一下......