mysql备份 只包含表格的某些行

使用 -where=... 选项指定 WHERE 子句以应用于备份中包含的表。
请注意,相同的 WHERE 子句将应用于同一备份中包含的所有表。

例如,如果我们正在备份世界示例数据库的 City 表,并且我们只想包含 CountryCode = 'USA' 的那些,我们可以这样做:

mysqldump --defaults-file=etc/my.cnf --tables --where="CountryCode = 'USA'" world City > City_USA.sql

选择要包含在备份中的数据库和表

通常,备份中包含以下内容:

  • 备份中包含的每个表的 CREATE TABLE 语句
  • 数据的 INSERT 语句
  • 包含的表上的触发器
  • 如果备份了多个数据库,则包含 CREATE DATABASE 和 USE;但不适用于单个数据库备份!

以下示例假定 ~/.my.cnf 包含连接到 MySQL 所需的选项以及将与 mysqldump 一起使用的其他选项(另请参见下文)。

更多: zhilu jiaocheng

mysql备份 同一个数据库中的多个表

使用 -tables 选项。
使用此选项,第一个参数是数据库的名称,其余参数是要备份的表的名称。
如果没有另外的选项,CREATE DATABASE 和 USE 语句将不会包含在备份中。

mysqldump ... --tables

例如备份 sakila 示例数据库中的 actor 和 film 表:

mysqldump --defaults-file=~/.my.cnf --tables sakila actor film > backup_sakila_actor_and_film.sql

其他选项

使用 mysqldump 创建部分备份时,一些有用的添加选项是:

  1. -add-drop-database , -add-drop-table , -add-drop-trigger

  2. -hex-blob :使用十六进制表示法转储二进制列(例如,'abc' 变为 0x616263)。
    如果我们有二进制数据,请务必包含此选项。

  3. -master-data :这将包括一个 CHANGE MASTER TO 语句,其中包含二进制日志文件和创建备份的位置。
    使用 -master-data=2 时,CHANGE MASTER TO 语句将在注释中,因此在恢复备份时不会自动执行。

  4. -no-create-db :不包括 CREATE DATABASE 语句(在备份多个数据库的情况下)。

  5. -no-create-info :不包括 CREATE TABLE 语句。

  6. -no-data :不包含任何数据。
    这对于导出模式很有用。

  7. -routines:包括来自备份数据库的存储过程和存储函数。

  8. -tab=... :生成制表符分隔的数据文件。
    请注意,每个表将有一个以该表命名的文件。
    这类似于 SELECT ... INTO OUTFILE ... 并且可以使用 LOAD DATA [LOCAL] INFILE 加载生成的数据转储。
    请注意,无论表存在于哪个数据库中,所有文件都将在同一目录中创建,因此当仅备份单个数据库中的表时,此选项最有用。

还有几个选项可以指定数据文件的格式。

-triggers :包括备份中包含的表的触发器。
这是默认完成的。
如果我们不想包含触发器,请使用 -skip-triggers。

mysql备份时 忽略表

使用 -ignore-table 选项忽略表。
多次指定该选项以从备份中排除多个表。

例如,排除 sakila 示例数据库中的 actor 和 film 表,否则包括所有数据库和表(-all-databases 选项):

mysqldump --defaults-file=~/.my.cnf --ignore-table=sakila.actor --ignore-table=sakila.film --all-databases > backup_excluding_sakila_actor_and_film.sql

mysql备份设置锁定

创建部分备份时,我们还需要考虑我们需要的锁定级别。
选项与完整备份相同:

默认情况下,mysqldump read 一次锁定一个数据库。
但是还有其他选择:

  1. -single-transaction 如果我们正在备份 InnoDB 表,这是首选的锁定选项。
    mysqldump 将使用一致的快照启动事务并在此事务中创建备份。

这意味着:

  • 所有数据是一致的,例如:它对应于相同的时间点。
  • 不需要锁(除非我们还使用 -master-data 来获取二进制日志文件和备份的位置,在这种情况下,在获取主状态时,在开始时会短暂地需要一个读锁)。
  • 但是,如果备份中包含非 InnoDB 表并对这些表进行更改,则备份将不一致。
  • 特别是如果备份需要很长时间,备份创建的读取视图可能会导致开销。
  1. -lock-tables 这个相当于默认的。
    例如:对于每个转储的数据库,在转储之前锁定所有要转储的表。

  2. -lock-all-tables 该读在整个备份期间锁定整个实例中的所有表(无论该表是否包含在备份中)。

mysqldump 进行部分备份示例

根据我们是想要单个数据库中的数据库子集还是表的子集,有多种创建备份的选项。

mysql备份单一数据库

这是 mysqldump 的默认设置。
如果没有另外的选项,CREATE DATABASE IF NOT EXISTS 和 USE 语句将不会包含在备份中。

mysqldump ... > backup.sql

例如备份世界示例数据库:

mysqldump --defaults-file=~/.my.cnf world > backup_world.sql

mysql备份多个数据库

这可以使用 -databases 选项存档。
CREATE DATABASE 和 USE 语句包含在每个新数据库之前的输出中。

mysqldump ... --databases

例如备份 world 和 sakila 示例数据库:

mysqldump --defaults-file=~/.my.cnf --databases world sakila > backup_world_and_sakila.sql

mysql备份数据库中的单个表

这与单个数据库的工作方式相同,但只需要一个带有表名的添加参数:

mysqldump ... > backup.sql

例如从世界示例数据库备份 City 表:

mysqldump --defaults-file=~/.my.cnf world City > backup_world_City.sql
日期:2020-09-17 00:11:26 来源:oir作者:oir