选项说明
| 选项 | 说明 |
|---|---|
| 服务器登录选项 | |
-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:
- 在源服务器上存储转储文件
- 将转储文件复制到目标服务器
- 将转储文件加载到目标服务器
在源服务器上:
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
系统会提示输入密码,之后备份开始。