如何备份sqlite数据库?

the*_*cat 82 database sqlite backup

这样做的正确方法是什么?我只是复制.sq3文件?

如果网站上有用户并且正在复制文件时正在编写文件怎么办?

Goo*_*gie 137

sqlite3命令行工具使用.backupdot命令.

您可以使用以下命令连接到数据库:

sqlite3 my_database.sq3
Run Code Online (Sandbox Code Playgroud)

并使用以下命令运行backup dot命令:

.backup backup_file.sq3
Run Code Online (Sandbox Code Playgroud)

您也可以进行备份,然后关闭连接,而不是与数据库的交互连接

sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,结果都是以backup_file.sq3数据库命名的副本my_database.sq3.

它与定期文件复制不同,因为它会处理当前正在处理数据库的任何用户.在数据库上设置了正确的锁,因此备份是专门完成的.

  • 你可以在一行中完成所有工作...`sqlite3 m_database.sq3".backup m_database.sq3.bak"` (63认同)
  • @mOna:这只是一种备份机制.复制意味着即时传播更改(分布式数据库的类型),这对您无效. (4认同)
  • 您还应该指定一个超时以最大程度地减少“数据库被锁定”错误...“sqlite3 source.db“.timeout 1000”“.backup backup.db”” (3认同)
  • @RonJohn它实际上制作了文件的副本,但它也确保了对数据库的写访问受到适当的锁的限制,因此这是一个原子操作,没有中间修改。 (2认同)

Lav*_*ham 13

.backup 是最好的方法。

sqlite3 my_database .backup my_database.back
Run Code Online (Sandbox Code Playgroud)

您也可以尝试 .dump 命令,它使您能够将整个数据库或表转储到文本文件中。如果指定了 TABLE,则仅转储与 LIKE 模式 TABLE 匹配的表。

sqlite3 my_database .dump > my_database.back
Run Code Online (Sandbox Code Playgroud)

使用转储和存储制作存档副本的好方法,稍后重建数据库。

sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Run Code Online (Sandbox Code Playgroud)

还要检查这个问题SQLite3 .backup 和 .dump 命令会锁定数据库吗?

  • 在 SQLite 3.8.2 上,`.backup` 不起作用,如上所示(“.backup 上缺少 FILENAME 参数”) (5认同)
  • 这是最好的答案。如果您在许多人使用的工作数据库上使用 .backup 它可能无法工作,因为在某些时候数据库被锁定。因此,如果您在 CRON 中使用它,它将无法工作,也不会告诉您有错误……更好地使用 .dump (始终有效)或 SQLite 提供的 API。 (4认同)

Tob*_*ist 5

对于 SQLite 的流式复制,请查看Litestream

与使用 sqlite3-backup 命令相比,这是自动的、增量的。

例如,如果您需要从备份恢复,则数据将比每小时定期备份的数据更新得多。