20

我知道 SQL 转储是一系列插入 SQL 语句,它们反映了数据库中的所有记录。但它是用来做什么的?为什么要转储数据库记录?每个数据库都支持转储功能吗?

4

2 回答 2

31

有点奇怪,这实际上是备份数据库的常用方法。由于各种复杂的原因,复制实际保存数据的文件本身并不是通常的备份方法。

所有的关系数据库都以这种方式工作,或者至少我从未听说过没有这样的工作方式:它们都具有导出一堆 SQL 代码的功能,这些代码在执行时将重新创建处于相同状态的数据库当转储开始时。

然而,由于不同数据库系统使用的各种 SQL 方言之间的细微差异,这些不同的格式通常是不兼容的。有些实用程序可以在其中一些之间进行转换,但我不知道有任何“Rosetta Stone”可以处理所有可能的情况。

除了作为备份数据库的主要方法外,这种技术在不同服务器之间暂存数据库应用程序的数据时也很有用,即从开发到测试再到生产。

于 2010-03-25T01:59:05.953 回答
7

mysqldump为一个或多个表或数据库生成数据的 SQL 表示。由于格式是 SQL,它将在任何其他 MySQL 服务器上运行,无论架构或主要/次要版本如何(显然,视图在 4.x 等上不起作用,但它主要是向前兼容的)。

还有另一个工具mysqlhotcopy,但由于此工具生成二进制文件,它们与生成它们的机器相关联,不能在其他地方使用。SQL 的优点是可以在任何 MySQL 服务器上运行,并且独立于数据库的底层文件存储机制。

转储 SQL 的两个主要用例是:

  • 备份数据库数据。可以将 SQL 读入(“回放”)到空的数据库服务器,它将重新创建表并用行填充它们。
  • 将数据迁移到另一台服务器。假设您正在从 MySQL 5.0 升级到 5.1。你有两台机器。您使用 mysqldump 在 5.0 机器上生成 SQL 转储,并将其提供给 5.1。

还有一些不太常见的用途。例如,可以获取应用程序数据库的 SQL 快照,以针对已知状态进行单元测试。也可以将 SQL 代码转换为另一种方言,例如 PostgeSQL 或 SQLite,以将您的数据移植到另一个数据库。

您询问其他数据库是否提供 SQL 转储功能。几乎在所有情况下,答案都是肯定的。PostgreSQL 提供pg_dump,SQLite 有.dump命令等。

于 2010-03-25T01:58:26.703 回答