如何备份和恢复 MySQL 数据库

生成数据库的频繁备份对于恢复数据并在出现任何问题时重新运行数据非常重要。 此类问题包括:

  • 系统崩溃。
  • 硬件故障
  • 数据库损坏。
  • 用户错误导致数据删除。

MySQL 提供了多种方法来生成备份和恢复数据库。 您可以选择最适合您的备份和灾难恢复要求的任何方法。 在我们升级 MySQL 安装之前,备份也是至关重要的预防措施。 备份还用于将 MySQL 安装转移到另一个系统或设置克隆服务器。

要求

  • 任何 Linux 发行版。
  • MySQL 服务器或 MariaDB。
  • mysqldump 实用程序。
  • 对您的 Linux 系统的 Root 特权访问或通过 sudo 命令。

如何备份和恢复 MySQL 数据库

您可以通过命令行或 PHPMyAdmin 使用 mysqldump 备份和恢复 MySQL 数据库。

通过命令行使用 mysqldump 备份 MySQL 数据库

mysqldump 实用程序是备份 MySQL 数据库并将 MySQL 数据库传输到另一台 MySQL 服务器的有效工具。 它是一组用于重新创建原始数据库的 SQL 语句。

mysqldump 实用程序可以将数据库的备份生成为单个 .sql 文件,其中包括用于重建数据库的 SQL 语句(如 DROP TABLE、CREATE TABLE 和 INSERT)。 该实用程序还有助于将多个数据库或其对象转储到单个文件中的 MySQL 表中。

使用 mysqldump 实用程序无法将 MySQL 数据库或数据备份到单独的 .sql 文件中。 它也不会转储 performance_schema、information_schema 或 NDB Cluster 信息数据库 (ndbinfo)。

注意:如果要包含 information_schema 表,则需要在 mysqldump 命令中显式指定数据库名称并包含 –skip-lock-tables 选项。

让我们看一下mysqldump命令的语法。

mysqldump -u [database_username] –p [database_password] [database_name] [tablename] > [database_backup_file.sql]

以下是此命令组件含义的细分:

  • -u [database_username]: 连接到 MySQL 服务器的用户名。
  • -p [database_password]: 数据库用户名的密码。
  • [database_name]: 要备份的数据库的名称。
  • [tablename]: 您要备份的表名的名称。 这是一个可选参数。
  • > : 生成备份。
  • [database_backup_file.sql]: 要保存转储文件的备份文件的路径和名称。

1. 备份单个 MySQL 数据库

要备份单个数据库,可以使用以下命令语法。 输入此命令时,它将提示您输入密码。

mysqldump -u database_username -p database_name > database_backup_file.sql

这是命令的输出。

$ mysqldump  -u a056c59a_f56757  -p a056c59a_f56757 > a056c59a_f56757.sql Enter password:  $ ll -rw-rw-r--   1 a056c59a a056c59a 53886 Mar 25 17:16 a056c59a_f56757.sql 

使用 –password 选项,您可以避免密码提示。 该命令的语法如下。 将 database_password 部分替换为您的数据库密码。

mysqldump -u database_username --password="database_password" database_name > database_backup_file.sql

这是输出。

$ mysqldump -u a056c59a_f56757 --password="DB_password" a056c59a_f56757 > a056c59a_f56757.sql  $ ll -rw-rw-r--  1 a056c59a a056c59a 53886 Mar 25 17:33 a056c59a_f56757.sql 

2.备份多个MySQL数据库

要备份多个数据库,可以使用以下命令语法。

mysqldump -u database_username -p --databases database_name1 database_name2 > database_backup_file.sql

这是运行此命令的输出。

$ mysqldump -u a056c59a_f56757 -p --databases a056c59a_f56757 a056c59a_g67868 > a056c59a_newdb.sql Enter password:  $ ll -rw-rw-r--   1 a056c59a a056c59a 54159 Mar 27 03:11 a056c59a_newdb.sql 

同样,您可以使用 –password 选项来避免密码提示。 将 database_password 部分替换为您的数据库密码。

mysqldump -u database_username --password="database_password" --databases database_name1 database_name2  > database_backup_file.sql

这是命令的输出。

$ mysqldump -u a056c59a_f56757 --password="DB_password" --databases a056c59a_f56757 a056c59a_g67868 > a056c59a_newdb2.sql  $ ll -rw-rw-r--  1 a056c59a a056c59a 54159 Mar 27 03:19 a056c59a_newdb2.sql 

3.备份每一个MySQL数据库

要一次备份每个 MySQL 或 MariaDB 数据库,请使用以下命令语法。

mysqldump -u database_username -p --all-databases > all_databases_backup_file.sql

这是输出。

$ mysqldump -u a056c59a_f56757 -p --all-databases > a056c59a_newdb3.sql Enter password:  $ ll -rw-rw-r--  1 a056c59a a056c59a 54144 Mar 27 03:38 a056c59a_newdb3.sql 

这里 –password 选项用于避免密码提示。 与往常一样,将 database_password 部分替换为您的数据库密码。

mysqldump --all-databases -u database_username --password="database_password" > all_databases_backup_file.sql

这是此命令的输出。

$ mysqldump --all-databases -u a056c59a_f56757 --password="DB_password" > a056c59a_newdb4.sql $ ll -rw-rw-r--  1 a056c59a a056c59a 54144 Mar 27 03:41 a056c59a_newdb4.sql 

4. 将所有 MySQL 数据库备份到单独的文件中

mysqldump 实用程序不提供将所有数据库备份到单独文件的选项。 但是,您可以轻松地为每个数据库使用数据库名称作为文件名,使用简单的备份文件 bash 循环的命令行。

for database in $(mysql -e 'show databases' -s --skip-column-names); do 	mysqldump $database > "$database.sql"; done 

5.创建带有时间戳的备份

要将多个数据库备份保留在同一位置,您可以将当前日期添加到数据库备份文件名中。 这是命令的语法。

mysqldump database_name -u  database_username -p > database_name-$(date +%Y%m%d).sql

这是输出。

$ mysqldump a056c59a_f56757 -u a056c59a_f56757 -p > a056c59a_f56757-$(date +%Y%m%d).sql $ll -rw-rw-r--   1 a056c59a a056c59a 53834 Mar 28 15:09 a056c59a_f56757-20220328.sql 

6. 创建一个压缩的 MySQL 数据库备份

如果您的数据库很大,您可以压缩输出以节省磁盘空间。 您只需将输出通过管道传输到 gzip 实用程序并将其重定向到文件。 这是语法。

mysqldump database_name -u  database_username -p | gzip > database_name.sql.gz

输出将如下所示。

$ mysqldump a056c59a_f56757 -u a056c59a_f56757 -p | gzip > a056c59a_f56757.sql.gz Enter password:  $ ll -rw-rw-r--  1 a056c59a a056c59a 11843 Mar 29 04:08 a056c59a_f56757.sql.gz  

使用 mysqldump 恢复 MySQL 数据库

1. 恢复 MySQL 数据库

要使用 MySQL 备份恢复 MySQL 数据库,可以使用 mysql 工具。 命令语法如下。

mysql -u  database_username  database_name -p < database_backup_file.sql

输出将如下所示。

$ mysql -u a056c59a_f56757 a056c59a_f56757 -p < a056c59a_f56757-20220329.sql Enter password:  $ 

2. 从完整的 MySQL 转储文件恢复单个 MySQL 数据库。

如果要从包含多个 MySQL 数据库的数据库备份文件中恢复单个 MySQL 数据库,可以在命令中使用 –one-database 选项。

mysql -u database_username --one-database database_name1 -p < all_databases_backup_file.sql

这是输出。

$ mysql -u a056c59a_f56757 --one-database a056c59a_f56757 -p < a056c59a_full_db.sql Enter password:  $ 

3. 一个命令导出和导入 MySQL 数据库

您可以使用以下单行命令从一个 MySQL 数据库创建转储文件并将其导入另一个 MySQL 数据库。 此示例将输出通过管道传输到远程主机上的 MySQL 客户端,并将其导入数据库。 将 remote_database_name 替换为您选择的远程主机数据库名称。

mysqldump -u database_username database_name -p | mysql -h remote_host -u remote_database_username remote_database_name -p

注意:该命令将导入数据库,无论它是否存在于远程主机服务器上。 最佳实践是在运行命令之前确保远程服务器上不存在数据库。

使用 phpMyAdmin 备份 MySQL 数据库

要使用 phpMyAdmin 备份 MySQL 数据库,请按照以下步骤操作。

第1步:

登录到 phpMyAdmin。

第2步:

从左侧导航树中选择要备份的数据库。

第 3 步:

点击 出口 标签。

第4步:

选择导出方法。 对于本教程,选择 快的 单选按钮,除非您的要求不同。

第 5 步:

完成所有选择后,单击 按钮。

使用 phpMyAdmin 恢复 MySQL 数据库

要使用 phpMyAdmin 从备份恢复 MySQL 数据库,请遵循以下步骤。

第1步:

登录到 phpMyAdmin。

第2步:

从左侧导航树中选择要恢复的数据库。

第 3 步:

点击 选择所有 底部的复选框以选择所有表。

第4步:

点击 已选中 下拉菜单并选择 降低.

第 5 步:

点击 是的 确认。

第 6 步:

点击 进口 标签。

第 7 步:

点击 选择文件 按钮浏览 MySQL 备份。

第 8 步:

点击 按钮。

完成后,您将收到一条确认消息。

包起来

如果您正在寻求备份或恢复数据库的帮助,本指南可以提供帮助。 遵循本教程和其他满足您备份和恢复需求的最佳实践将有助于确保数据的安全性。

我们提供专用服务器和 VPS 托管选项,用于托管标准或 高可用性数据库. 此外,我们熟练的团队提供 24/7/365 全天候支持和监控服务,让您可以专注于您的网站。 立即联系我们的团队以了解更多信息。