SQLite 数据库备份

SQLiteSQLiteBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将学习如何备份和恢复 SQLite 数据库。你将学习使用 .dump 命令将数据库导出到 SQL 文件,创建备份,然后从该备份恢复数据库。这对于保护你的数据至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sqlite(("SQLite")) -.-> sqlite/SQLiteGroup(["SQLite"]) sqlite/SQLiteGroup -.-> sqlite/init_db("Create SQLite Database") sqlite/SQLiteGroup -.-> sqlite/make_table("Create New Table") sqlite/SQLiteGroup -.-> sqlite/add_row("Insert Single Row") sqlite/SQLiteGroup -.-> sqlite/add_rows("Insert Multiple Rows") sqlite/SQLiteGroup -.-> sqlite/get_all("Select All Rows") sqlite/SQLiteGroup -.-> sqlite/query_where("Filter With WHERE") sqlite/SQLiteGroup -.-> sqlite/verify_table("Check Table Existence") subgraph Lab Skills sqlite/init_db -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/make_table -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/add_row -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/add_rows -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/get_all -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/query_where -.-> lab-552548{{"SQLite 数据库备份"}} sqlite/verify_table -.-> lab-552548{{"SQLite 数据库备份"}} end

创建一个示例数据库

在这一步中,你将创建一个示例 SQLite 数据库,并用一些数据填充它。这将为你提供一个可以练习备份和恢复的数据库。

首先,打开 SQLite shell(SQLite 命令行界面)。你将在这里与数据库进行交互。

sqlite3 mydatabase.db

这个命令启动 SQLite shell,并创建一个名为 mydatabase.db 的新数据库文件。如果该文件已经存在,它将打开该文件。

现在,创建一个名为 users 的表,其中包含 idnameemail 列:

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    email TEXT
);

这条 SQL 命令创建了一个名为 users 的表。id 列是一个整数,并且是主键(primary key),这意味着它唯一地标识表中的每一行。nameemail 列是文本字段。

接下来,将一些示例数据插入到 users 表中:

INSERT INTO users (name, email) VALUES ('Alice', '[email protected]');
INSERT INTO users (name, email) VALUES ('Bob', '[email protected]');

这些命令向 users 表添加了两行。第一行的名字是 'Alice',邮箱是 '[email protected]'。第二行的名字是 'Bob',邮箱是 '[email protected]'。

为了验证数据是否已正确插入,运行以下命令:

SELECT * FROM users;

你应该看到类似这样的输出:

1|Alice|[email protected]
2|Bob|[email protected]

此输出显示了 users 表的内容,确认数据已成功插入。

将数据库导出到 SQL 文件

在这一步中,你将把 mydatabase.db 数据库导出到一个名为 mydatabase.sql 的 SQL 文件。这个 SQL 文件将包含重新创建数据库及其数据所需的命令。

首先,退出 SQLite shell(SQLite 命令行界面):

.exit

这个命令关闭与数据库的连接,并返回到 Linux 终端。

现在,使用 .dump 命令将数据库导出到 SQL 文件:

sqlite3 mydatabase.db .dump > mydatabase.sql

这个命令使用 sqlite3 命令行工具连接到 mydatabase.db 数据库。.dump 命令告诉 SQLite 将整个数据库输出为一系列 SQL 命令。> 符号将 .dump 命令的输出重定向到一个名为 mydatabase.sql 的文件。

为了验证导出是否成功,你可以使用 cat 命令查看 mydatabase.sql 文件的内容:

cat mydatabase.sql

你应该看到类似这样的输出:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    email TEXT
);
INSERT INTO users VALUES(1,'Alice','[email protected]');
INSERT INTO users VALUES(2,'Bob','[email protected]');
COMMIT;

此输出显示了创建 users 表并插入数据的 SQL 命令。这确认数据库已成功导出到 SQL 文件。

创建数据库的备份

在这一步中,你将使用相同的 .dump 命令创建数据库的备份。这本质上与导出到 SQL 文件的过程相同,但我们将把备份保存到不同的文件。

sqlite3 mydatabase.db .dump > mydatabase_backup.sql

这个命令创建 mydatabase.db 数据库的备份,并将其保存到名为 mydatabase_backup.sql 的文件中。

为了验证备份是否成功创建,你可以使用 cat 命令查看 mydatabase_backup.sql 文件的内容:

cat mydatabase_backup.sql

你应该看到与上一步相同的输出,确认备份文件包含重新创建数据库所需的 SQL 命令。

从备份恢复数据库

在这一步中,你将从 mydatabase_backup.sql 文件恢复数据库。这将从备份中重新创建数据库及其数据。

首先,让我们模拟一个原始数据库丢失的场景。删除 mydatabase.db 文件:

rm mydatabase.db

这个命令从文件系统中移除 mydatabase.db 文件。

现在,从 mydatabase_backup.sql 文件恢复数据库:

sqlite3 mydatabase.db < mydatabase_backup.sql

这个命令使用 sqlite3 命令行工具创建一个名为 mydatabase.db 的新数据库文件。< 符号将 mydatabase_backup.sql 文件的内容重定向到 sqlite3 命令,该命令执行文件中的 SQL 命令。这将重新创建数据库及其数据。

为了验证恢复是否成功,在 SQLite shell(SQLite 命令行界面)中打开数据库:

sqlite3 mydatabase.db

并查询 users 表:

SELECT * FROM users;

你应该看到已备份的数据:

1|Alice|[email protected]
2|Bob|[email protected]

这确认数据库已成功从备份文件恢复。

退出 SQLite shell(SQLite 命令行界面):

.exit

总结

在这个实验(Lab)中,你已经学习了如何备份和恢复 SQLite 数据库。你使用了 .dump 命令将数据库导出到 SQL 文件,然后你从该文件恢复了数据库。这些技能对于保护你的数据以及确保你可以从数据丢失中恢复至关重要。