如何使用 Mysqldump 备份和恢复 MySQL 数据库

2023-11-20

本教程介绍如何使用 mysqldump 实用程序从命令行备份和恢复 MySQL 或 MariaDB 数据库。

mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句。 mysqldump 命令还可以生成 CSV 和 XML 格式的文件。

您还可以使用 mysqldump 实用程序将 MySQL 数据库传输到另一台 MySQL 服务器。

如果不备份数据库,软件错误或硬盘故障可能会造成灾难性的后果。为了帮助您节省大量时间并减少麻烦,强烈建议您采取预防措施定期备份 MySQL 数据库。

Mysqldump 命令语法#

在介绍如何使用 mysqldump 命令之前,我们首先回顾一下基本语法。

mysqldump 实用程序表达式采用以下形式:

mysqldump [options] > file.sql
  • options - The mysqldump 选项
  • file.sql- 转储(备份)文件

要使用 mysqldump 命令,MySQL 服务器必须可访问且正在运行。

备份单个 MySQL 数据库#

mysqldump 工具最常见的用例是备份单个数据库。

例如,创建名为的数据库的备份database_name使用用户root并将其保存到名为database_name.sql您将运行以下命令:

mysqldump -u root -p database_name > database_name.sql

系统将提示您输入 root 密码。身份验证成功后,转储过程将开始。根据数据库大小,该过程可能需要一些时间。

如果您以用于执行导出的同一用户身份登录,并且该用户不需要密码,则可以省略-u and -p选项:

mysqldump database_name > database_name.sql

备份多个 MySQL 数据库#

要使用一个命令备份多个 MySQL 数据库,您需要使用--database选项后跟要备份的数据库列表。每个数据库名称必须用空格分隔。

mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql

上面的命令将创建一个包含两个数据库的转储文件。

备份所有 MySQL 数据库#

Use the --all-databases备份所有 MySQL 数据库的选项:

mysqldump -u root -p --all-databases > all_databases.sql

与前面的示例相同,上​​面的命令将创建一个包含所有数据库的转储文件。

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

The mysqldump该实用程序不提供将所有数据库备份到单独文件的选项,但我们可以通过简单的操作轻松实现这一点bash FOR 循环 :

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

上面的命令将为每个数据库创建一个单独的转储文件,使用数据库名称作为文件名。

创建压缩的 MySQL 数据库备份#

如果数据库大小非常大,那么压缩输出是个好主意。为此,只需将输出通过管道传输到gzip实用程序,并将其重定向到文件,如下所示:

mysqldump database_name | gzip > database_name.sql.gz

创建带有时间戳的备份#

如果您想在同一位置保留多个备份,则可以添加当前的备份date备份文件名:

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

上面的命令将创建一个具有以下格式的文件database_name-20180617.sql

恢复 MySQL 转储#

您可以使用以下命令恢复 MySQL 转储mysql工具。命令一般语法如下:

mysql  database_name < file.sql

大多数情况下你需要创建数据库导入到.如果数据库已经存在,首先需要将其删除。

在以下示例中,第一个命令将创建一个名为的数据库database_name然后它将导入转储database_name.sql进去:

mysql -u root -p -e "create database database_name";mysql -u root -p database_name < database_name.sql

从完整 MySQL 转储恢复单个 MySQL 数据库#

如果您使用以下方式备份了所有数据库-all-databases选项,并且您想要从包含多个数据库的备份文件恢复单个数据库,请使用--one-database选项如下图:

mysql --one-database database_name < all_databases.sql

通过一个命令导出和导入 MySQL 数据库#

您可以使用以下一行代码,而不是从一个数据库创建转储文件,然后将备份导入到另一个 MySQL 数据库中:

mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

上面的命令会将输出通过管道传输到远程主机上的 mysql 客户端,并将其导入到名为的数据库中remote_database_name。运行该命令之前,请确保远程服务器上已存在数据库。

使用 Cron 自动备份#

自动化备份数据库的过程就像创建一个cron job什么将在指定时间运行 mysqldump 命令。

要使用 cronjob 设置 MySQL 数据库的自动备份,请按照以下步骤操作:

  1. 创建一个名为.my.cnf在您的用户主目录中:

    sudo nano ~/.my.cnf

    将以下文本复制并粘贴到 .my.cnf 文件中。

    [client]
    user = dbuser
    password = dbpasswd

    不要忘记更换dbuser and dbpasswd以及数据库用户和用户密码。

  2. 限制权限凭证文件,以便只有您的用户才能访问它:

    chmod 600 ~/.my.cnf
  3. 创建目录存储备份:

    mkdir ~/db_backups
  4. 打开您的用户 crontab 文件:

    crontab -e

    添加以下 cron 作业,该作业将创建数据库名称的备份mydb每天凌晨 3 点:

    0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +\%Y\%m\%d).sql

    不要忘记更换username与您的实际用户名。我们还转义了百分号(%),因为它们在 crontab 中有特殊含义。

您还可以创建另一个 cronjob 来删除任何超过 30 天的备份:

find /path/to/backups -type f -name "*.sql" -mtime +30 -delete

当然,您需要根据您的备份位置和文件名来调整命令。要了解有关 find 命令的更多信息,请查看我们的如何使用命令行在 Linux 中查找文件 guide.

结论#

本教程仅涵盖基础知识,但对于任何想要学习如何使用 mysqldump 实用程序从命令行创建和恢复 MySQL 数据库的人来说,它应该是一个良好的起点。

如果您想了解有关从命令行使用 MySQL 的更多信息,请查看我们的如何管理MySQL用户帐户和数据库 guide.

您还可以查看有关的教程如何重置 MySQL root 密码以防你忘记了。

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Mysqldump 备份和恢复 MySQL 数据库 的相关文章

  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • MySQL:计算日期/时间之间的差异 - 仅在周一至周五“工作周”期间

    我需要计算开始日期 时间和结束日期 时间之间的差异 但是 我只想在 5 天的工作周内执行此操作 不包括周六 周日 做这个的最好方式是什么 我的想法是 从日期开始 我必须获取星期几 如果是工作日 那么我将添加到累加器中 如果不是 那么我不会添
  • MySQL - 从临时表插入

    这看起来非常简单 但我坚持使用简单的插入语句 见下文 begin work CREATE TEMPORARY TABLE IF NOT EXISTS insert table AS select r resource id fr file
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 如果没有找到值,如何让 MySQL 中的 SUM 函数返回“0”?

    假设我在 MySQL 中有一个简单的函数 SELECT SUM Column 1 FROM Table WHERE Column 2 Test 如果没有条目Column 2 包含文本 Test 然后该函数返回NULL 而我希望它返回 0 我
  • 备份并上传到FTP服务器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能指导我一个脚本解决方案来备份目录并将其上传到 ftp 服务器 我最初正在寻找批处理脚本 但任何解决
  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • PHP MySql 百分比

    我的问题是关于百分比 我不是专家 所以我会尽力以更好的方式进行解释 我的 mysql 服务器中有一个表 假设有 700 条记录 如下所示 Name country language Birth Lucy UK EN 1980 Mari Ca
  • 如何在MYSQL中将整个字符串小写并保持第一个大写[重复]

    这个问题在这里已经有答案了 我的表栏目 我预期的输出会在列中发生变化 Smith Allen Doyle Dennis Baker Waker 这是我尝试过的 但不起作用 UPDATE TABLE employee SET last nam
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。添加了 11 条消息列表。使用emitter.setMaxListeners()来增加限制

    我知道这可能会标记为重复的解决方案 但堆栈溢出的解决方案对我不起作用 Problem node 5716 MaxListenersExceededWarning Possible EventEmitter memory leak detec
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • XAMPP为MariaDB设置root用户密码

    如何在 Ubuntu Kubuntu 16 04 上的 XAMPP 中设置 MariaDB 的 root 用户密码 默认情况下 root 用户没有设置密码 我正在使用 XAMPP 7 1 11 我在 Windows 和 Linux 上都成功

随机推荐

  • Linux中的fallocate命令(为文件分配空间)

    The fallocate Linux 中的命令是用于为文件预分配空间的工具 它是创建文件并用零填充的传统方法的更快替代方法 该命令允许您快速为文件分配空间 而无需实际向文件系统写入任何数据 在这篇文章中 我们将解释什么 fallocate
  • 如何在 Python 中获取当前日期和时间

    获取当前日期和时间是 Python 编程中的一项常见任务 有多种方法可以做到这一点 具体取决于您的需求和可用的库 在本文中 我们将探讨开发人员在 Python 中获取当前日期和时间的一些最常用方法 包括使用内置的 datetime 模块 要
  • 如何启用 CSF 防火墙 Web UI

    ConfigServer 安全和防火墙 CSS 是适用于 Linux 系统的基于 iptables 的防火墙 在我们之前的教程中阅读了CSF在Linux系统上的安装教程 CSF 还提供内置 Web UI 用于从 Web 界面管理防火墙 在本
  • 如何更改Tomcat端口

    如果您在生产环境中使用独立的 Tomcat 实例 并且遇到与端口相关的连接问题 则可能需要更改 Tomcat 的默认端口 Tomcat 的默认端口是它侦听传入请求的标准端口 这些端口是非标准的 通常由管理员锁定 但是 如果您已将 Tomca
  • 检查文件大小的Python程序

    Python是一种高级 解释性 交互式 面向对象的脚本语言 广泛应用于数据分析 人工智能 Web开发等各个领域 Python 的优点在于它的简单性和它提供的广泛的库支持 使开发人员能够用更少的代码行创建功能丰富的应用程序 在本文中 我们将探
  • Linux 关机命令

    在本教程中 我们将向您展示如何使用shutdown通过实际示例和最常见命令的详细解释来进行命令shutdown选项 The shutdown命令以安全的方式关闭系统 当 的时候shutdown启动后 所有已登录的用户和进程都会收到系统即将关
  • 如何在 Debian 10 上安装 Pip

    Pip 是一个包管理系统 允许您安装 Python 包 使用 pip 您可以从以下位置安装软件包Python 包索引 PyPI 和其他存储库 在本指南中 我们将解释如何为 Python 2 安装 pippip和Python 3pip3在 D
  • 如何在 Linux 中设置或更改时区

    时区是具有相同标准时间的地理区域 通常 时区是在操作系统安装期间设置的 但以后可以轻松更改 使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 时区也用于日志时间戳 本教程介绍
  • 如何在 Ubuntu 18.04 上安装 Apache

    Apache HTTP 服务器是世界上最流行的 Web 服务器 它是一个免费 开源和跨平台的 HTTP 服务器 提供强大的功能 可以通过各种模块进行扩展 本教程介绍如何在 Ubuntu 18 04 上安装和管理 Apache Web 服务器
  • 如何在 Ubuntu 20.04 上安装 Apache Cassandra

    Apache Cassandra 是一个免费的开源 NoSQL 数据库 不存在单点故障 它提供线性可扩展性和高可用性 而不会影响性能 许多拥有大型活跃数据集的公司都在使用 Apache Cassandra 包括 Reddit NetFlix
  • Linux 中的历史命令(Bash 历史记录)

    如果您在命令行上花费大量时间 那么查看以前运行的命令的历史记录可能是一个有用的功能 它可以使您的日常工作更加轻松并提高您的工作效率 在这篇文章中 我们将讨论history命令 它允许您查看以前执行的命令的列表 搜索列表以及操作历史文件 使用
  • 如何检查Java版本

    Java 是世界上最流行的编程语言之一 用于构建不同类型的跨平台应用程序 本文介绍如何使用命令行检查 Linux 系统上安装的 Java 版本 这在安装需要特定 Java 版本的应用程序时非常有用 Java 版本控制 Java用途语义版本控
  • 如何在 Ubuntu 18.04 上安装 Android Studio

    安卓工作室是一款功能齐全的跨平台 IDE 可帮助您在各种类型的 Android 设备上构建应用程序 它是基于JetBrains 的 IntelliJ IDEA并包含 Android 开发所需的一切 Android Studio 构建系统由G
  • 如何在 Debian 10 上安装 Python 3.9

    Python 是世界上最流行的编程语言之一 它是一种多功能语言 用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 3 9 是 Python 语
  • 如何删除本地和远程 Git 分支

    分支是日常开发过程的一部分 也是 Git 中最强大的功能之一 一个分支一旦合并 除了历史研究之外就没有任何作用了 成功合并后删除分支是常见且推荐的做法 本指南介绍如何删除本地和远程 Git 分支 删除本地 Git 分支 The git br
  • Python 枚举函数

    enumerate 是 Python 中的一个内置函数 允许您在循环迭代时拥有一个自动计数器 Python enumerate 功能 The enumerate 函数采用以下形式 enumerate iterable start 0 该函数
  • 如何在 Ubuntu 18.04 上部署 Mattermost

    Mattermost 是一个企业级即时消息平台 是一个开源自托管 Slack 替代品 它是用 Golang 和 React 编写的 可以使用 MySQL 或 PostgreSQL 作为数据库后端 Mattermost 将您的所有团队沟通集中
  • 如何在 Ubuntu 18.04 上安装 OpenCart

    OpenCart是一个免费开源的 PHP 电子商务平台 将强大的功能与灵活性和用户友好的界面相结合 OpenCart 具有用户管理 多商店 附属机构 折扣 产品评论 多语言和多个支付网关等功能 是许多在线商家的首选平台 在本教程中 我们将向
  • 如何在 CentOS 7 上停止和禁用 Firewalld

    防火墙D是一个完整的防火墙解决方案 可动态管理网络连接和接口的信任级别 它使您可以完全控制允许或禁止进出系统的流量 从 CentOS 7 开始 FirewallD 取代 iptables 成为默认的防火墙管理工具 强烈建议保持 Firewa
  • 如何使用 Mysqldump 备份和恢复 MySQL 数据库

    本教程介绍如何使用 mysqldump 实用程序从命令行备份和恢复 MySQL 或 MariaDB 数据库 mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句 mysqldump 命令还可以生成