使用 mysqldump 工具备份数据库

mysqldump 是一个用于备份 MySQL 数据库的工具,它能将 MySQL 数据库导出为一个 sql 文件。

作为一个数据库管理员或者运维人员,定期备份线上的 MySQL 数据库是一个很有必要的工作。它可能帮你在数据库遭到损坏的时候保留数据或者恢复备份

MySQL 提供了 mysqldump 工具用于从 MySQL 数据库服务器中导出数据库结构和数据。

mysqldump 介绍

mysqldump 工具一般会随着安装 MySQL 数据库时自动安装。它能将一个或者多个数据库,或者数据库中的一个或者多个表导出为一个 SQL 文件,包括 DDL 语句和 DML 语句。

通常,安装完 MySQL 服务器后, 您可以直接使用 mysqldump 工具。

如果找不到 mysqldump 工具,请将 MySQL 安装目录下的 bin 目录配置到环境变量 PATH 中。 或者导航到 MySQL 安装目录下的 bin 目录下再使用 mysqldump 工具。

mysqldump 用法

以下命令使用 mysqldump 从 MySQL 服务器备份单个数据库:

mysqldump --user=<username> --password=<password> --result-file=<path_to_backup_file> --databases <database_name>

这里:

  • <username> 是登录到 MySQL 服务器的用户帐户。
  • <password><username> 的密码。
  • <path_to_backup_file> 是备份文件的路径。
  • <database_name> 是你要备份的数据库的名称。如果要备份多个数据库,请用逗号分隔多个数据库的名字。

mysqldump 工具提供了许多选项以支持各种不同的导出需求。以下是 mysqldump 命令的常用选项:

--user

登录用户名。

--password

登录用户名的密码。

--host

MySQL 数据库服务器的 IP 地址或主机名。默认为 127.0.0.1localhost

--port

MySQL 数据库服务器的端口号。默认为 3306

--add-drop-table

为数据库中的每个表包括一条 DROP TABLE 语句。

--add-locks

在每个 INSERT 语句之前和之后分别包含 LOCK TABLESUNLOCK TABLES 语句。它提高了从转储文件恢复数据的速度。

--all-databases

创建 MySQL 服务器上所有数据库的转储。

--create-options

在每个表的 CREATE TABLE 语句中包含 ENGINECHARSET 选项。

--databases

定制要导出的一个或多个数据库。

--disable-keys

指示 MySQL 在 MyISAM 表的数据加载期间禁用索引更新。MySQL 将在 mysqldump 完成加载数据后创建索引。此选项可提高恢复速度。

--extended-insert

将插入单行的 INSERT 语句组合成一个插入多个表行的语句;此选项还有助于加快数据恢复速度。

--flush-logs

在转储数据之前刷新服务器日志。这在与增量备份结合使用时很有用。

--lock-tables

通过在转储期间锁定数据库中的所有表,确保转储是一致的快照。

--no-data

仅生成重新创建数据库结构所需的语句(仅 CREATE DATABASE , CREATE TABLE …),而不包含插入数据的语句(INSERT 语句)。

--opt

mysqldump 工具默认使用的选项。

--opt 选项启用了下列选项: --add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick,和 --set-charset

要禁用此选项,请使用 skip-opt . 如果要跳过每个单独的选项,请使用 skip-<option_name> . 例如,要跳过 disable-keys 选项,请使用 skip-disable-keys option。

--quick

指示 mysqldump 在写入文件之前不在内存中缓冲表。此选项可加快大表的转储速度。

--result-file

指定输出转储文件的路径。

--set-charset

指定数据库的字符集。

--tables

创建一个或多个表的转储。

--where

仅转储满足 WHERE 子句中条件的行。

mysqldump 实例

让我们举一些使用 mysqldump 工具备份数据库的例子。

  1. 使用 mysqldump 备份全部数据库
mysqldump --user=root --password=password --all_databases --result-file=/bak/all.sql

这里将全部数据库备份到 /bak/all.sql 文件中。

  1. 使用 mysqldump 备份单个数据库
mysqldump --user=root --password=password --databases sakila --result-file=/bak/sakila.sql

这里将 sakila 数据库备份到 /bak/sakila.sql 文件中。

  1. 使用 mysqldump 备份多个数据库
mysqldump --user=root --password=password --databases sakila sqlizdb --result-file=/bak/sakila_sqlizdb.sql

这里将 sakilasqlizdb 数据库备份到 /bak/sakila_sqlizdb.sql 文件中。

  1. 使用 mysqldump 备份数据库的结构
mysqldump --user=root --password=password --no-data --databases sakila --result-file=/bak/sakila.sql

这里将 sakila 数据库的结构备份到 /bak/sakila.sql 文件中。

同样,如果您只需要备份数据,请使用 --no-create-info 代替 --no-data 选项。

结论

mysqldump 是一个用于备份 MySQL 数据库的工具。它提供了很多选项以应对不同的备份需求。