MySQL 备份与恢复

MySQLMySQLBeginner
立即练习

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

简介

在本次实验中,你将学习如何使用 mysqldump 命令行工具备份和恢复 MySQL 数据库。本实验涵盖了创建逻辑备份并进行恢复的关键技术,以确保数据的完整性和可用性。

本实验将引导你完成数据库的导出操作,包括创建示例数据库和表,然后使用 mysqldump 对其进行备份。你还将学习如何备份单个表、从转储文件恢复数据库,最后检查恢复数据的准确性,以验证恢复过程是否成功。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/SystemManagementToolsGroup(["System Management Tools"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/drop_database("Database Deletion") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/SystemManagementToolsGroup -.-> mysql/mysqldump("Data Export Utility") subgraph Lab Skills mysql/use_database -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/create_database -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/drop_database -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/create_table -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/select -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/insert -.-> lab-550902{{"MySQL 备份与恢复"}} mysql/mysqldump -.-> lab-550902{{"MySQL 备份与恢复"}} end

使用 mysqldump 导出数据库

在这一步中,你将学习如何使用 mysqldump 命令行工具导出数据库。mysqldump 是一个实用工具,可用于创建 MySQL 数据库的逻辑备份。这个备份可用于将数据库恢复到原始状态,或将其迁移到不同的服务器。

在开始之前,让我们创建一个示例数据库和表来进行操作。打开终端并执行以下命令,以 root 用户身份连接到 MySQL 服务器。你可能会被要求输入 root 密码,在开发环境中,该密码默认通常为空。

mysql -u root -p

现在,创建一个名为 mydatabase 的数据库:

CREATE DATABASE mydatabase;

接下来,切换到 mydatabase 数据库:

USE mydatabase;

创建一个名为 users 的简单表:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE
);

users 表中插入一些示例数据:

INSERT INTO users (name, email) VALUES
('John Doe', '[email protected]'),
('Jane Smith', '[email protected]');

退出 MySQL 命令行界面:

exit

现在我们有了一个包含一些数据的数据库,让我们使用 mysqldump 导出它。导出数据库的基本语法如下:

mysqldump -u [username] -p[password] [database_name] > [output_file.sql]

[username] 替换为你的 MySQL 用户名(通常是 root),[password] 替换为你的 MySQL 密码(如果有的话),[database_name] 替换为你要导出的数据库名称(mydatabase),[output_file.sql] 替换为你要保存备份的文件名(例如 mydatabase_backup.sql)。

在我们的示例中,命令如下:

mysqldump -u root -p mydatabase > ~/project/mydatabase_backup.sql

你将被要求输入 MySQL root 密码。输入密码(如果有的话)。

此命令将在你的 ~/project 目录中创建一个名为 mydatabase_backup.sql 的文件,其中包含重新创建 mydatabase 数据库及其内容所需的 SQL 语句。

你可以通过列出 ~/project 目录的内容来验证文件是否已创建:

ls ~/project

你应该在输出中看到 mydatabase_backup.sql

你还可以使用 nano 查看备份文件的内容:

nano ~/project/mydatabase_backup.sql

这将显示 mysqldump 生成的 SQL 语句。按 Ctrl+X 退出 nano

备份单个表

在这一步中,你将学习如何使用 mysqldump 命令从 MySQL 数据库中备份单个表。当你只需要备份特定表而不是整个数据库时,这非常有用。

我们将继续使用上一步中创建的 mydatabase 数据库和 users 表。

要备份单个表,你可以使用相同的 mysqldump 命令,但需要在数据库名称之后指定表名:

mysqldump -u [username] -p[password] [database_name] [table_name] > [output_file.sql]

[username] 替换为你的 MySQL 用户名(通常是 root),[password] 替换为你的 MySQL 密码(如果有的话),[database_name] 替换为数据库名称(mydatabase),[table_name] 替换为你要导出的表名(users),[output_file.sql] 替换为你要保存备份的文件名(例如 users_backup.sql)。

在我们的示例中,命令如下:

mysqldump -u root -p mydatabase users > ~/project/users_backup.sql

你将被要求输入 MySQL root 密码。输入密码(如果有的话)。

此命令将在你的 ~/project 目录中创建一个名为 users_backup.sql 的文件,其中包含重新创建 users 表及其内容所需的 SQL 语句。

你可以通过列出 ~/project 目录的内容来验证文件是否已创建:

ls ~/project

你应该在输出中看到 mydatabase_backup.sql(上一步创建的)和 users_backup.sql

你还可以使用 nano 查看备份文件的内容:

nano ~/project/users_backup.sql

这将显示 mysqldump 专门为 users 表生成的 SQL 语句。按 Ctrl+X 退出 nano

现在,让我们向数据库中添加另一个表,以进一步说明单个表备份的过程。连接到 MySQL 服务器:

mysql -u root -p

切换到 mydatabase 数据库:

USE mydatabase;

创建一个名为 products 的新表:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10, 2)
);

products 表中插入一些示例数据:

INSERT INTO products (name, price) VALUES
('Laptop', 1200.00),
('Mouse', 25.00);

退出 MySQL 命令行界面:

exit

现在,如果你只想备份 products 表,可以使用以下命令:

mysqldump -u root -p mydatabase products > ~/project/products_backup.sql

这将在你的 ~/project 目录中创建一个名为 products_backup.sql 的文件,其中仅包含 products 表的数据。

从转储文件恢复数据库

在这一步中,你将学习如何从 mysqldump 创建的转储文件中恢复数据库。这是一个根据备份文件中存储的 SQL 语句重新创建数据库及其内容的过程。

首先,让我们删除 mydatabase 数据库,以模拟需要恢复数据库的场景。连接到 MySQL 服务器:

mysql -u root -p

删除 mydatabase 数据库:

DROP DATABASE mydatabase;

退出 MySQL 命令行界面:

exit

现在,我们将从第一步创建的 mydatabase_backup.sql 文件中恢复 mydatabase 数据库。恢复数据库的基本语法如下:

mysql -u [username] -p[password] [database_name] < [input_file.sql]

[username] 替换为你的 MySQL 用户名(通常是 root),[password] 替换为你的 MySQL 密码(如果有的话),[database_name] 替换为你要恢复到的数据库名称(mydatabase),[input_file.sql] 替换为备份文件的名称(mydatabase_backup.sql)。

在恢复之前,我们需要再次创建 mydatabase 数据库,因为我们刚刚删除了它。连接到 MySQL 服务器:

mysql -u root -p

创建 mydatabase 数据库:

CREATE DATABASE mydatabase;

退出 MySQL 命令行界面:

exit

现在,恢复数据库:

mysql -u root -p mydatabase < ~/project/mydatabase_backup.sql

你将被要求输入 MySQL root 密码。输入密码(如果有的话)。

此命令将执行 mydatabase_backup.sql 中的 SQL 语句,并重新创建 mydatabase 数据库及其表和数据。

为了验证数据库是否已恢复,连接到 MySQL 服务器:

mysql -u root -p

切换到 mydatabase 数据库:

USE mydatabase;

显示数据库中的表:

SHOW TABLES;

你应该看到 usersproducts 表。

users 表中选择所有数据:

SELECT * FROM users;

你应该看到我们在第一步中插入的数据。

products 表中选择所有数据:

SELECT * FROM products;

你应该看到我们在第二步中插入的数据。

退出 MySQL 命令行界面:

exit

你现在已成功从 mydatabase_backup.sql 文件中恢复了 mydatabase 数据库。

检查恢复数据的准确性

在这一步中,你将通过将恢复的数据与原始数据进行比较,来验证恢复数据的准确性。这可以确保备份和恢复过程成功,且没有数据丢失或损坏。

我们将连接到已恢复的 mydatabase 数据库,并查询 usersproducts 表,以检查数据是否与我们最初插入的数据匹配。

连接到 MySQL 服务器:

mysql -u root -p

切换到 mydatabase 数据库:

USE mydatabase;

users 表中选择所有数据:

SELECT * FROM users;

你应该看到以下输出:

+----+----------+-----------------------+
| id | name     | email                 |
+----+----------+-----------------------+
|  1 | John Doe | [email protected]  |
|  2 | Jane Smith | [email protected] |
+----+----------+-----------------------+
2 rows in set (0.00 sec)

这证实了 users 表中的数据已成功恢复。

现在,从 products 表中选择所有数据:

SELECT * FROM products;

你应该看到以下输出:

+----+---------+---------+
| id | name    | price   |
+----+---------+---------+
|  1 | Laptop  | 1200.00 |
|  2 | Mouse   |   25.00 |
+----+---------+---------+
2 rows in set (0.00 sec)

这证实了 products 表中的数据也已成功恢复。

如果输出与你最初插入的数据匹配,则恢复过程成功。如果输出不同或遇到任何错误,则备份或恢复过程可能存在问题。

为了进一步确保数据完整性,你可以执行更复杂的查询,以检查特定的数据值或表之间的关系。不过,在这个实验中,我们通过检查 usersproducts 表的内容,验证了基本的数据准确性。

退出 MySQL 命令行界面:

exit

你现在已成功验证了恢复数据的准确性。至此,关于导出、备份和恢复 MySQL 数据库的实验就完成了。

总结

在这个实验中,你学习了如何使用 mysqldump 命令行工具为 MySQL 数据库创建逻辑备份。这包括创建一个名为 mydatabase 的示例数据库,其中包含一个 users 表,并插入示例数据。然后,你使用 mysqldump 将整个数据库导出到一个 SQL 文件 mydatabase_backup.sql 中。

该过程展示了 mysqldump 命令的基本语法,包括指定用户名、密码、数据库名称和输出文件。这个备份文件可用于将数据库恢复到其原始状态,或将其迁移到另一台服务器。