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

将注释添加到转储文件

用法:--comments-i

在转储文件中编写其他信息,如程序版本,服务器版本和主机。

默认情况下启用此选项。要抑制此附加信息,

请使用--skip-comments

--compact

产生更简洁的输出

--compatible

产生与其他数据库系统或旧版MySQL服务器更兼容的输出

用法:--compatible=name

产生与其他数据库系统或旧版MySQL服务器更兼容的输出。 

name的值可以是 ansimysql323, mysql40postgresql

 oraclemssql, db2maxdbno_key_options

 no_table_options,或 no_field_options。要使用多个值,请用逗号分隔。

这些值与设置服务器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起,DELAYED插入已被弃用,

因此此选项将在以后的版本中被删除。

--delete-master-logs

在主复制服务器上,执行转储操作后,删除二进制日志

--disable-keys

对于每个表,用禁用和启用键语句环绕INSERT语句

--dump-date

如果给出--comments,将转储日期包括为“转储完成”注释

--dump-slave

包含CHANGE MASTER语句,其中列出了从属主的二进制日志坐标

--enable-cleartext-plugin

启用明文验证插件

--events

从转储的数据库转储事件

--extended-insert

使用多行INSERT语法

用法:--extended-insert, -e

INSERT使用包含多个VALUES列表的多行语法 编写语句 。

这将导致一个较小的转储文件,并加速文件重新加载插入。

--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=file_name

--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

生成选项卡分隔的数据文件

用法:--tab=dir_name, -T dir_name

--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