数据同步时可以访问数据吗?
我会认为这是危险的。
SQLite数据库也有需要保留的日志文件。
如果你
你很可能会遭受腐败。
改用SQLite的在线备份API 。
假设你想通过shell命令来做到这一点,你可以做一些事情:
ssh user@host 'sqlite3 "/path/to/db.sqlite" ".backup /path/to/dbbackup.sqlite"' rsync user@host:"/path/to/dbbackup.sqlite" "db.sqlite"
首先,安全地创build现有数据库的备份,然后将其复制到您自己的机器上的“db.sqlite”。
挪亚指出,这是危险的。 你的数据库将被损坏。
您可以改用litereplica库。
它完成了所有关于正常SQLite事务的幕后工作。 并增量(只有更改的页面被传送)。
或者rqlite库。
最后一个需要安装Go语言。
不,sqlite数据库默认情况下并不总是一致的。 但是,search“sqlite复制文件”已经find了一个与SQLite进行在线备份的页面,我怀疑这个页面会涵盖所有您可能遇到的问题。
以前的答案是正确的。
但是,如果你100%确定你的数据库只有读取活动,你可以安全地采取任何一种数据库文件的副本。 我已经在一个没有问题的生产应用程序(cp,tar,rsync,scp,sftp)中完成了这个工作。 数据库文件只能在操作系统级(chmod aw)设置为只读,而数据库写入尝试会给出错误
Error: attempt to write a readonly database
而所有select正常工作。
那么当然,这种方法对于你的申请可能也可能不可行。 可以使用相同的方法来防止未经授权的写入,如Web应用程序上的SQL注入。
当没有事务打开时,数据库的rsync将会正常。
在事务处于打开状态时,数据库的rsync将导致损坏。 原因:您将在稍微不同的时间点获取数据库及其随附的日志文件,打破SQLite将日志与数据库进行协调的一致性。 如果SQLite无法协调日志与数据库,那么数据库将处于不一致的状态,无法告诉部分应用事务的部分内容。
为了能够同步SQLite数据库,您将需要:
使用SQLite自己的CLI命令来创build数据库文件的备份副本。 这将等待获得写入locking,并复制文件,然后释放写入locking,从而确保没有事务部分应用。 然后,rsync复制。
.backup ?DB? file
或者,在进行rsync的同时,使用SQLite数据库closures所有进程。