使用 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.1
或localhost
。 --port
-
MySQL 数据库服务器的端口号。默认为
3306
。 --add-drop-table
-
为数据库中的每个表包括一条
DROP TABLE
语句。 --add-locks
-
在每个
INSERT
语句之前和之后分别包含LOCK TABLES
和UNLOCK TABLES
语句。它提高了从转储文件恢复数据的速度。 --all-databases
-
创建 MySQL 服务器上所有数据库的转储。
--create-options
-
在每个表的
CREATE TABLE
语句中包含ENGINE
和CHARSET
选项。 --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
工具备份数据库的例子。
- 使用
mysqldump
备份全部数据库
mysqldump --user=root --password=password --all_databases --result-file=/bak/all.sql
这里将全部数据库备份到 /bak/all.sql
文件中。
- 使用
mysqldump
备份单个数据库
mysqldump --user=root --password=password --databases sakila --result-file=/bak/sakila.sql
这里将 sakila
数据库备份到 /bak/sakila.sql
文件中。
- 使用
mysqldump
备份多个数据库
mysqldump --user=root --password=password --databases sakila sqlizdb --result-file=/bak/sakila_sqlizdb.sql
这里将 sakila
和 sqlizdb
数据库备份到 /bak/sakila_sqlizdb.sql
文件中。
- 使用
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 数据库的工具。它提供了很多选项以应对不同的备份需求。