介绍
在本实验中,你将学习如何使用 mysqldump 命令行工具备份和恢复 MySQL 数据库。mysqldump 是创建逻辑备份的关键实用程序,这对于数据保护、灾难恢复和迁移至关重要。
你将练习备份整个数据库、备份单个表,然后从备份文件中恢复它们。本实验将指导你模拟数据丢失场景,并使用你的备份来恢复数据,确保你理解完整的备份和恢复生命周期。
在本实验中,你将学习如何使用 mysqldump 命令行工具备份和恢复 MySQL 数据库。mysqldump 是创建逻辑备份的关键实用程序,这对于数据保护、灾难恢复和迁移至关重要。
你将练习备份整个数据库、备份单个表,然后从备份文件中恢复它们。本实验将指导你模拟数据丢失场景,并使用你的备份来恢复数据,确保你理解完整的备份和恢复生命周期。
数据保护的第一步是创建完整备份。在此步骤中,你将使用 mysqldump 创建 mydatabase 数据库的完整备份,该数据库已为你预先配置。
首先,打开终端。让我们检查数据库以查看其内容。使用 root 用户连接到 MySQL 服务器。
sudo mysql -u root
看到 mysql> 提示符后,切换到 mydatabase 数据库并查看其表。
USE mydatabase;
SHOW TABLES;
你应该会看到两个表:products 和 users。
+--------------------+
| Tables_in_mydatabase |
+--------------------+
| products |
| users |
+--------------------+
2 rows in set (0.00 sec)
现在,退出 MySQL shell 以返回到终端。
exit
是时候备份整个数据库了。mysqldump 命令读取数据库并输出重新创建它所需的 SQL 语句。我们将把这个输出重定向到一个 .sql 文件。
运行以下命令备份 mydatabase 并将其保存到 /home/labex/backup 目录下的 mydatabase_backup.sql 文件中。
sudo mysqldump -u root mydatabase > /home/labex/backup/mydatabase_backup.sql
要确认备份文件已创建,请列出 /home/labex/backup 目录的内容。
ls /home/labex/backup
你应该会看到你的备份文件已列出。
mydatabase_backup.sql
你已成功创建了数据库的完整备份。
有时,你只需要备份特定的表而不是整个数据库。这对于较小的、有针对性的操作很有用。在此步骤中,你将只备份 products 表。
语法与完整数据库备份类似,但你需要在数据库名称后指定表名称。
在终端中,运行以下命令从 mydatabase 备份 products 表。备份将保存为 products_backup.sql。
sudo mysqldump -u root mydatabase products > /home/labex/backup/products_backup.sql
让我们验证新备份文件是否已创建。再次列出备份目录的内容。
ls /home/labex/backup
现在你应该会看到完整的数据库备份和单个表备份。
mydatabase_backup.sql products_backup.sql
你可以检查单个表备份文件的内容,以查看它是否只包含 products 表的信息。
cat /home/labex/backup/products_backup.sql
输出将显示创建和填充 products 表的 SQL 语句。这证实你已成功创建了有针对性的备份。
既然你已经有了备份,让我们来练习恢复它们。在此步骤中,你将通过删除整个 mydatabase 来模拟一次灾难,然后从你的完整备份文件中恢复它。
首先,让我们删除数据库。-e 标志允许你直接从终端执行单个 SQL 命令。
sudo mysql -u root -e "DROP DATABASE mydatabase;"
验证数据库是否已删除。
sudo mysql -u root -e "SHOW DATABASES;"
你将看到 mydatabase 已不再列表中。
在恢复数据之前,你必须创建一个同名的空数据库。
sudo mysql -u root -e "CREATE DATABASE mydatabase;"
现在,通过将 mydatabase_backup.sql 文件作为输入重定向到 mysql 客户端来恢复数据库。
sudo mysql -u root mydatabase < /home/labex/backup/mydatabase_backup.sql
该命令将执行备份文件中的所有 SQL 语句,重新创建表并插入数据。
要验证恢复,请连接到 MySQL 并检查表及其内容。
sudo mysql -u root
在 mysql> 提示符下,运行以下命令:
USE mydatabase;
SHOW TABLES;
SELECT * FROM users;
你应该会再次看到 products 和 users 表,并且 users 表应该包含其原始数据。
+--------------------+
| Tables_in_mydatabase |
+--------------------+
| products |
| users |
+--------------------+
2 rows in set (0.00 sec)
+----+------------+--------------------------+
| id | name | email |
+----+------------+--------------------------+
| 1 | John Doe | john.doe@example.com |
| 2 | Jane Smith | jane.smith@example.com |
+----+------------+--------------------------+
2 rows in set (0.00 sec)
退出 MySQL shell。
exit
你已成功从灾难性故障中恢复了整个数据库。
在本实验中,你学习了使用 mysqldump 工具备份和恢复 MySQL 数据库的基本技能。你练习了创建数据库的完整备份和单个表的有针对性的备份。
你还通过模拟完整数据库丢失和单个表意外删除的情况,获得了恢复操作的实践经验。通过在两种场景下成功恢复数据,你展示了对完整数据保护生命周期的基本理解,这是任何数据库管理员或开发者的关键技能。