mysqldump客户端实用程序对数据库执行逻辑备份,产生一组能够被执行以再现原始数据库对象定义和表数据的SQL语句。它可以转储一个或多个MySQL数据库进行备份或传输到另一个mysql服务器。mysqldump 命令也可以生成CSV输出,其他分隔符的文本或XML格式。
使用语法为(通常有以下三种):
mysqldump [options] db_name [tbl_name ...] // 指定数据库的指定表
mysqldump [options] --databases db_name ... // 指定数据库
mysqldump [options] --all-databases // 所有数据库
选项语法(其中很多和mysqlimport是一样的):
格式 | 描述 | 介绍 |
--add-drop-database | 在每个CREATE DATABASE语句之前添加DROP DATABASE语句 | |
--add-drop-table | 在每个CREATE TABLE语句之前添加DROP TABLE语句 | |
--add-drop-trigger | 在每个CREATE TRIGGER语句之前添加DROP TRIGGER语句 | |
--add-locks | 用LOCK TABLES和UNLOCK TABLES语句围绕每个表转储 | 当转储文件重新加载时,这将导致更快的插入速度 |
--all-databases | 转储所有数据库中的所有表 | |
--allow-keywords | 允许创建作为关键字的列名称 | |
--apply-slave-statements | 在CHANGE MASTER语句之前包含STOP SLAVE,在输出结束时包含START SLAVE | |
--bind-address | 使用指定的网络接口连接到MySQL服务器 | 在具有多个网络接口的计算机上, 使用此选项可选择用于连接到MySQL服务器的接口。 MySQL 5.6.1开始支持此选项。 |
--character-sets-dir | 字符集安装目录 | |
--comments | 将注释添加到转储文件 用法: | 在转储文件中编写其他信息,如程序版本,服务器版本和主机。 默认情况下启用此选项。要抑制此附加信息, 请使用--skip-comments。 |
--compact | 产生更简洁的输出 | |
--compatible | 产生与其他数据库系统或旧版MySQL服务器更兼容的输出 用法:--compatible= | 产生与其他数据库系统或旧版MySQL服务器更兼容的输出。
这些值与设置服务器SQL模式的相应选项具有相同的含义。 |
--complete-insert | 使用包含列名称的完整INSERT语句 | |
--compress | 压缩客户端和服务器之间发送的所有信息 | |
--create-options | 在CREATE TABLE语句中包含所有MySQL特定的表选项 | |
--databases | 将所有名称参数解释为数据库名称 | 其后跟的名称参数都将当作数据库名称处理 |
--debug | 写调试日志 | |
--debug-check | 程序退出时打印调试信息 | |
--debug-info | 程序退出时打印调试信息,内存和CPU统计信息 | |
--default-auth | 使用验证插件 | |
--default-character-set | 指定默认字符集 | |
--defaults-extra-file | 除常规选项文件外,还可以读取命名选项文件 | |
--defaults-file | 只读命名选项文件 | |
--defaults-group-suffix | 选项组后缀值 | |
--delayed-insert | 编写INSERT DELAYED语句,而不是INSERT语句 | 从MySQL 5.6.6起, 因此此选项将在以后的版本中被删除。 |
--delete-master-logs | 在主复制服务器上,执行转储操作后,删除二进制日志 | |
--disable-keys | 对于每个表,用禁用和启用键语句环绕INSERT语句 | |
--dump-date | 如果给出--comments,将转储日期包括为“转储完成”注释 | |
--dump-slave | 包含CHANGE MASTER语句,其中列出了从属主的二进制日志坐标 | |
--enable-cleartext-plugin | 启用明文验证插件 | |
--events | 从转储的数据库转储事件 | |
--extended-insert | 使用多行INSERT语法 用法: | INSERT使用包含多个 这将导致一个较小的转储文件,并加速文件重新加载插入。 |
--fields-enclosed-by | 指定字段隔离符号 例如:--fields-enclosed-by=\" 就是用引号(")引住字段值,以防值中有特殊字符引起报错 | 该选项与--tab选项一起使用 |
--fields-escaped-by | 指定字段转义符号 例如:--fields-escaped-by=\ 如果字段中有特殊符号,用 \ 进行转义,防止导入数据时引起报错。 | 该选项与--tab选项一起使用 |
--fields-optionally-enclosed-by | 任选字段隔离符号,猜测此选项的值应该是一个可供选择的列表 | 该选项与--tab选项一起使用 |
--fields-terminated-by | 指定字段结束符号,就是字段以什么符号分隔 | 该选项与--tab选项一起使用 |
--flush-logs | 在开始转储前刷新MySQL服务器日志文件 | |
--flush-privileges | 在转储mysql数据库后发出FLUSH PRIVILEGES语句 | |
--force | 即使在表转储期间发生SQL错误也会继续 | |
--help | 显示帮助信息并退出 | |
--hex-blob | 使用十六进制符号转储二进制列 | |
--host | 指定主机名或ip地址 | |
--ignore-table | 忽略给定的表 | 不要转储给定的表,这些表必须使用数据库和表名来指定。 要忽略多个表,请多次使用此选项。此选项也可用于忽略视图。 |
--include-master-host-port | 在--dump-slave生成的CHANGE MASTER语句中包含MASTER_HOST / MASTER_PORT选项 | |
--insert-ignore | 写入INSERT IGNORE而不是INSERT语句 | |
--lines-terminated-by | 指定行分隔符 | 该选项与--tab选项一起使用 |
--lock-all-tables | 锁定所有数据库中的所有表 | |
--lock-tables | 锁定要转储的所有表 | |
--log-error | 在命名文件中附加警告和错误 用法:--log-error= | |
--login-path | 从.mylogin.cnf读取登录路径选项 | |
--master-data | 将二进制日志文件名称和位置写入输出 | |
--max_allowed_packet | 从服务器发送或接收的最大包长度 | |
--net_buffer_length | TCP / IP和套接字通信的缓冲区大小 | |
--no-autocommit | 禁用自动提交 | |
--no-create-db | 不要写CREATE DATABASE语句 | |
--no-create-info | 不要写入重新创建每个转储表的CREATE TABLE语句 | |
--no-data | 不要转储表内容,也就是只备份表结构 | |
--no-defaults | 不读取任何选项文件 | |
--no-set-names | 与--skip-set-charset相同 | |
--no-tablespaces | CREATE TABLESPACE语句 | |
--opt | 选项组,其默认是 -add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset的组合形式 | |
--order-by-primary | 转储按其主键或其第一个唯一索引排序的每个表的行 | |
--password | 连接到服务器时使用的密码 | |
--pipe | 在Windows上,使用命名管道连接到服务器 | |
--plugin-dir | 安装插件的目录 | |
--port | 用于连接的TCP / IP端口号 | |
--print-defaults | 打印默认选项 | |
--protocol | 连接使用的协议 | |
--quick | 一次从服务器检索表的一行 | |
--quote-names | 在反引号字符中引用标识符 | |
--replace | 编写REPLACE语句而不是INSERT语句 | |
--result-file | 直接输出到给定的文件 | |
--routines | 转储存储过程和函数 | |
--secure-auth | 不要以旧(4.1之前)格式向服务器发送密码 | |
--set-charset | 添加SET NAMES default_character_set进行输出 | |
--set-gtid-purged | 是否添加SET @@ GLOBAL.GTID_PURGED进行输出 | |
--shared-memory-base-name | 用于共享内存连接的共享内存的名称 | |
--single-transaction | 单次事务,在从服务器转储数据之前发出BEGIN SQL语句 | |
--skip-add-drop-table | 不要在每个CREATE TABLE语句之前添加DROP TABLE语句 | |
--skip-add-locks | 不要加锁 | |
--skip-comments | 不要在转储文件中添加注释 | |
--skip-compact | 不要产生更紧凑的(简洁的)输出 | |
--skip-disable-keys | 不要禁用索引 | |
--skip-extended-insert | 关闭扩展插入 | |
--skip-opt | 关闭由--opt设置的选项 | |
--skip-quick | 不要一次从服务器检索表的一行 | |
--skip-quote-names | 不要用引号引标识符 | |
--skip-set-charset | 不要写SET NAMES语句 | |
--skip-triggers | 不要转储触发器 | |
--skip-tz-utc | 关闭tz-utc | |
--socket | 要连接到本地主机,要使用的Unix套接字文件 | |
--ssl* | 此系列请参考mysqlimport同参数 | |
--tab | 生成选项卡分隔的数据文件 用法: | |
--tables | 覆盖 --databases or -B 选项 | |
--triggers | 转储触发器 | |
--tz-utc | 将SET TIME_ZONE ='+ 00:00'添加到转储文件 | |
--user | 连接到服务器时要使用的MySQL用户名 | |
--verbose | 详细模式 | |
--version | 显示版本信息并退出 | |
--where | 仅转储由给定的WHERE条件选择的行 | |
--xml | 生成XML输出 |
使用示例(我的测试数据库没有密码):
导出sql语句:mysqldump -u root --host localhost test_db user -r D:/testdbBackup/user.sql
或者
mysqldump -u用户名 -p密码 -h 主机地址 数据库名 表名 --where="查询条件" >user.sql
导出csv:mysqldump -u root --host localhost --tab=D:/testdbBackup --fields-terminated-by=, --lines-terminated-by=\r\n test_db user
导出csv: mysqldump -u root -p**** --tab=D:/dataExport/ --fields-escaped-by=\ --fields-terminated-by=, --fields-enclosed-by=\" db_name tableName
如只想导出部分数据,加上 --where 参数,但是where中的条件如果是汉字,导不出数据,不知如何解决
--where="a=1 limit 100"
--where="true limit 100"
参考文档:https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html