选项说明

选项 说明
服务器登录选项
-h 要连接的主机(IP 地址或主机名)。默认 localhost (127.0.0.1)。示例:-h localhost
-u MySQL 用户名
-p MySQL 密码。重要:-p 和密码之间不能有空格。示例:-pMyPassword
备份选项
--add-drop-database 在每个 CREATE DATABASE 语句之前添加 DROP DATABASE 语句。用于替换数据库时有用。
--add-drop-table 在每个 CREATE TABLE 语句之前添加 DROP TABLE 语句。用于替换表时有用。
--no-create-db 在备份中抑制 CREATE DATABASE 语句。当你确定要加载备份的服务器上数据库已存在时使用。
--no-create-info 抑制所有 CREATE TABLE 语句。用于仅备份表数据,并将其加载到另一个数据库/服务器中的相同表结构。
--no-data 不写入表信息。仅备份 CREATE TABLE 语句。用于创建“模板”数据库。
--routines 在备份中包含存储过程/函数。
--disable-keys 在插入数据前禁用表的键,插入后重新启用。仅对非唯一索引的 MyISAM 表加速插入。

第 50.1 节:指定用户名和密码

> mysqldump -u username -p [other options]
Enter password:

如果需要在命令行上指定密码(例如在脚本中),可以在 -p 选项后直接添加密码,不加空格:

> mysqldump -u username -pMyPassword [other options]

如果你的密码包含空格或特殊字符,请根据你的 shell/系统使用适当的转义。

也可以使用扩展形式:

> mysqldump --user=username --password=MyPassword [other options]

(出于安全考虑,不建议在命令行上显式指定密码。)

第 50.2 节:创建数据库或表的备份

创建整个数据库的快照:

mysqldump [options] db_name > filename.sql

创建多个数据库的快照:

mysqldump [options] --databases db_name1 db_name2 ... > filename.sql

创建一个或多个表的快照:

mysqldump [options] db_name table_name... > filename.sql

创建排除一个或多个表的快照:

mysqldump [options] db_name --ignore-table=tbl1 --ignore-table=tbl2 ... > filename.sql

文件扩展名 .sql 完全随意,任何扩展名都可以。

第 50.3 节:恢复数据库或表的备份

mysql [options] db_name < filename.sql

注意:

  • db_name 必须是已存在的数据库;
  • 你的认证用户有足够的权限执行 filename.sql 中的所有命令;
  • 文件扩展名 .sql 完全随意;
  • 你不能像指定表转储那样指定要加载的表名,这必须在 filename.sql 内部完成。

或者在 MySQL 命令行工具中,可以使用 source 命令恢复(或运行任何其他脚本):

source filename.sql;

或

\. filename.sql

第 50.4 节:将数据从一个 MySQL 服务器传输到另一个服务器

如果需要将数据库从一个服务器拷贝到另一个服务器,有两种选择:

选项 1:

  1. 在源服务器上存储转储文件
  2. 将转储文件复制到目标服务器
  3. 将转储文件加载到目标服务器

在源服务器上:

mysqldump [options] > dump.sql

在目标服务器上,复制转储文件并执行:

mysql [options] < dump.sql

选项 2:

如果目标服务器可以连接到源服务器,可以使用管道将数据库从一个服务器拷贝到另一个服务器:

在目标服务器上:

mysqldump [options to connect to source server] | mysql [options]

同样,该脚本也可以在源服务器上运行,推送到目标服务器。这种方式通常比选项 1 快得多。

第 50.5 节:从远程服务器进行带压缩的 mysqldump

为了在传输过程中使用压缩以加快传输速度,向 mysqldump 传递 --compress 选项。示例:

mysqldump -h db.example.com -u username -p --compress dbname > dbname.sql

重要: 如果你不想锁定源数据库,还应该添加 --lock-tables=false。但这样可能无法获得内部一致的数据库镜像。

要同时保存压缩文件,可以管道到 gzip:

mysqldump -h db.example.com -u username -p --compress dbname | gzip --stdout > dbname.sql.gz

第 50.6 节:恢复 gzip 压缩的 mysqldump 文件而不解压

gunzip -c dbname.sql.gz | mysql dbname -u username -p

注意:-c 表示将输出写到 stdout。

第 50.7 节:备份包含存储过程和函数的数据库

默认情况下,mysqldump 不会生成存储过程和函数,你需要添加 --routines 参数(或 -R):

mysqldump -u username -p -R db_name > dump.sql

使用 --routines 时,创建和修改时间戳不会保留,你需要转储并重新加载 mysql.proc 的内容。

第 50.8 节:直接备份到 Amazon S3 并压缩

如果你希望完整备份大型 MySQL 安装,且本地存储空间不足,可以将输出直接压缩并上传到 Amazon S3 存储桶。也建议不要将数据库密码作为命令的一部分:

mysqldump -u root -p --host=localhost --opt --skip-lock-tables --single-transaction \
  --verbose --hex-blob --routines --triggers --all-databases | gzip -9 | s3cmd put - s3://s3-bucket/db-server-name.sql.gz

系统会提示输入密码,之后备份开始。