mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)转储包含创建表和/或装载表的SQL语句
如果你在服务器上进行备份并且表均为MyISAM表应考虑使用mysqlhotcopy因为可以更快地进行备份和恢复参见节mysqlhotcopy:数据库备份程序
有种方式来调用mysqldump:
C代码
shell> mysqldump [options] db_name [tables]
shell> mysqldump [options] database DB [DB DB…]
shell> mysqldump [options] alldatabase
如果没有指定任何表或使用了database或alldatabase选项则转储整个数据库
要想获得你的版本的mysqldump支持的选项执行mysqldump help
如果运行mysqldump没有quick或opt选项mysqldump在转储结果前将整个结果集装入内存如果转储大数据库可能会出现问题该选项默认启用但可以用skipopt禁用
如果使用最新版本的mysqldump程序生成一个转储重装到很旧版本的MySQL服务器中不应使用opt或e选项
mysqldump支持下面的选项
help?
显示帮助消息并退出
adddropdatabase
在每个CREATE DATABASE语句前添加DROP DATABASE语句
adddroptables
在每个CREATE TABLE语句前添加DROP TABLE语句
addlocking
用LOCK TABLES和UNLOCK TABLES语句引用每个表转储重载转储文件时插入得更快参见节INSERT语句的速度
alldatabaseA
转储所有数据库中的所有表与使用database选项相同在命令行中命名所有数据库
allowkeywords
允许创建关键字列名应在每个列名前面加上表名前缀
comments[={|}]
如果设置为 禁止转储文件中的其它信息例如程序版本服务器版本和主机skipcomments与comments=的结果相同 默认值为即包括额外信息
compact
产生少量输出该选项禁用注释并启用skipadddroptablesnosetnamesskipdisablekeys和skipaddlocking选项
compatible=name
产生与其它数据库系统或旧的MySQL服务器更兼容的输出值可以为ansimysqlmysqlpostgresqloraclemssqldbmaxdbno_key_optionsno_tables_options或者no_field_options要使用几个值用逗号将它们隔开这些值与设置服务器SQL模式的相应选项有相同的含义参见节SQL服务器模式
该选项不能保证同其它服务器之间的兼容性它只启用那些目前能够使转储输出更兼容的SQL模式值例如compatible=oracle 不映射Oracle类型或使用Oracle注释语法的数据类型
completeinsertc
使用包括列名的完整的INSERT语句
compressC
压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)
createoption
在CREATE TABLE语句中包括所有MySQL表选项
databaseB
转储几个数据库通常情况mysqldump将命令行中的第个名字参量看作数据库名后面的名看作表名使用该选项它将所有名字参量看作数据库名CREATE DATABASE IF NOT EXISTS db_name和USE db_name语句包含在每个新数据库前的输出中
debug[=debug_options]# [debug_options]
写调试日志debug_options字符串通常为d:t:ofile_name
defaultcharacterset=charset
使用charsetas默认字符集参见节数据和排序用字符集如果没有指定mysqldump使用utf
delayedinsert
使用INSERT DELAYED语句插入行
deletemasterlogs
在主复制服务器上完成转储操作后删除二进制日志该选项自动启用masterdata
disablekeysK
对于每个表用/*! ALTER TABLE tbl_name DISABLE KEYS */;和/*! ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句这样可以更快地装载转储文件因为在插入所有行后创建索引该选项只适合MyISAM表
extendedinserte
使用包括几个VALUES列表的多行INSERT语法这样使转储文件更小重载文件时可以加速插入
fieldsterminatedby=…fieldsenclosedby=…fieldsoptionallyenclosedby=…fieldsescapedby=…行terminatedby=…
这些选项结合T选项使用与LOAD DATA INFILE的相应子句有相同的含义参见节LOAD DATA INFILE语法
firstslavex
不赞成使用现在重新命名为lockalltables
flushlogsF
开始转储前刷新MySQL服务器日志文件该选项要求RELOAD权限请注意如果结合alldatabase(或A)选项使用该选项根据每个转储的数据库刷新日志例外情况是当使用lockalltables或masterdata的时候在这种情况下日志只刷新一次在所有 表被锁定后刷新如果你想要同时转储和刷新日志应使用flushlogs连同lockalltables或masterdata
forcef
在表转储过程中即使出现SQL错误也继续
host=host_nameh host_name
从给定主机的MySQL服务器转储数据默认主机是localhost
hexblob
使用十六进制符号转储二进制字符串列(例如abc 变为x)影响到的列有BINARYVARBINARYBLOB
lockalltablesx
所有数据库中的所有表加锁在整体转储过程中通过全局读锁定来实现该选项自动关闭singletransaction和locktables
locktablesl
开始转储前锁定所有表用READ LOCAL锁定表以允许并行插入MyISAM表对于事务表例如InnoDB和BDBsingletransaction是一个更好的选项因为它不根本需要锁定表
请注意当转储多个数据库时locktables分别为每个数据库锁定表因此该选项不能保证转储文件中的表在数据库之间的逻辑一致性不同数据库表的转储状态可以完全不同
masterdata[=value]
该选项将二进制日志的位置和文件名写入到输出中该选项要求有RELOAD权限并且必须启用二进制日志如果该选项值等于位置和文件名被写入CHANGE MASTER语句形式的转储输出如果你使用该SQL转储主服务器以设置从服务器从服务器从主服务器二进制日志的正确位置开始如果选项值等于CHANGE MASTER语句被写成SQL注释如果value被省略这是默认动作
masterdata
选项启用lockalltables除非还指定singletransaction(在这种情况下只在刚开始转储时短时间获得全局读锁定又见singletransaction在任何一种情况下日志相关动作发生在转储时该选项自动关闭locktables
nocreatedbn
该选项禁用CREATE DATABASE /*! IF NOT EXISTS*/ db_name语句如果给出database或alldatabase选项则包含到输出中
nocreateinfot
不写重新创建每个转储表的CREATE TABLE语句
nodatad
不写表的任何行信息如果你只想转储表的结构这很有用
opt
该选项是速记等同于指定 adddroptablesaddlocking createoption disablekeysextendedinsert locktables quick setcharset它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件该选项默认开启但可以用skipopt禁用要想只禁用确信用opt启用的选项使用skip形式例如skipadddroptables或skipquick
password[=password]p[password]
连接服务器时使用的密码如果你使用短选项形式(p)不能在选项和密码之间有一个空格如果在命令行中忽略了password或p选项后面的 密码值将提示你输入一个
port=port_numP port_num
用于连接的TCP/IP端口号
protocol={TCP | SOCKET | PIPE | MEMORY}
使用的连接协议
quickq
该选项用于转储大的表它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中
quotenamesQ
用`字符引用数据库表和列名如果服务器SQL模式包括ANSI_QUOTES选项用字符引用名默认启用该选项可以用skipquotenames禁用但该选项应跟在其它选项后面例如可以启用quotenames的compatible
resultfile=filer file
将输出转向给定的文件该选项应用在Windows中因为它禁止将新行\n字符转换为\r\n回车返回/新行序列
routinesR
在转储的数据库中转储存储程序(函数和程序)使用routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序但是这些语句不包括属性例如子程序定义者或创建和修改时间戳这说明当重载子程序时对它们进行创建时定义者应设置为重载用户时间戳等于重载时间
如果你需要创建的子程序使用原来的定义者和时间戳属性不使用routines相反使用一个具有mysql数据库相应权限的MySQL账户直接转储和重载mysqlproc表的内容
该选项在MySQL 中添加进来在此之前存储程序不转储
setcharset
将SET NAMES default_character_set加到输出中该选项默认启用要想禁用SET NAMES语句使用skipsetcharset
singletransaction
该选项从服务器转储数据之前发出一个BEGIN SQL语句它只适用于事务表例如InnoDB和BDB因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态
当使用该选项时应记住只有InnoDB表能以一致的状态被转储例如使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态
singletransaction选项和locktables选项是互斥的因为LOCK TABLES会使任何挂起的事务隐含提交
要想转储大的表应结合quick使用该选项
socket=pathS path
当连接localhost(为默认主机)时使用的套接字文件
skipcomments
参见comments选项的描述
tab=pathT path
产生tab分割的数据文件对于每个转储的表mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_namesql文件和一个包含其数据的tbl_nametxt文件选项值为写入文件的目录
默认情况txt数据文件的格式是在列值和每行后面的新行之间使用tab字符可以使用fieldsxxx和行xxx选项明显指定格式
注释该选项只适用于mysqldump与mysqld服务器在同一台机器上运行时你必须具有FILE权限并且服务器必须有在你指定的目录中有写文件的许可
tables
覆盖database或B选项选项后面的所有参量被看作表名
triggers
为每个转储的表转储触发器该选项默认启用用skiptriggers禁用它
tzutc
在转储文件中加入SET TIME_ZONE=+:以便TIMESTAMP列可以在具有不同时区的服务器之间转储和重载(不使用该选项TIMESTAMP列在具有本地时区的源服务器和目的服务器之间转储和重载)tzutc也可以保护由于夏令时带来的更改tzutc默认启用要想禁用它使用skiptzutc该选项在MySQL 中加入
user=user_nameu user_name
连接服务器时使用的MySQL用户名
verbosev
冗长模式打印出程序操作的详细信息
versionV
显示版本信息并退出
where=wherecondition w wherecondition
只转储给定的WHERE条件选择的记录请注意如果条件包含命令解释符专用空格或字符一定要将条件引用起来
例如
where=user=jimf
wuserid>
wuserid<
xmlX
将转储输出写成XML
还可以使用var_name=value选项设置下面的变量
max_allowed_packet
客户端/服务器之间通信的缓存区的最大大小最大为GB
net_buffer_length
客户端/服务器之间通信的缓存区的初始大小当创建多行插入语句时(如同使用选项extendedinsert或opt)mysqldump创建长度达net_buffer_length的行如果增加该变量还应确保在MySQL服务器中的net_buffer_length变量至少这么大
还可以使用setvariable=var_name=value或O var_name=value语法设置变量然而现在不赞成使用该语法
例
a导出整个数据库 mysqldump u 用户名 p 数据库名 > 导出的文件名
C代码
[root@linux mysql]# mysqldump u dbadmin p myblog > /home/zhangy/blog/database_bak/myblogsql
b导出一个表 mysqldump u 用户名 p 数据库名 表名> 导出的文件名
C代码
[root@linux mysql]# mysqldump u dbadmin p myblog wp_users> /home/zhangy/blog/database_bak/blog_userssql
c导出一个数据库结构 d 没有数据 adddroptable 在每个create语句之前增加一个drop table
C代码
[root@linux mysql]# mysqldump u dbadmin p d adddroptable myblog > /home/zhangy/blog/database_bak/blog_strucsql
d导出数据库一个表结构
C代码
[root@linux mysql]# mysqldump u dbadmin p d adddroptable myblog wp_users> /home/zhangy/blog/database_bak/blog_users_strucsql
例
mysqldump导出数据库并压缩
C代码
$ mysqldump u user ppassword database | xz > databasesqlxz #使用xz压缩如果换成gzip可以改成gz压缩bzip同样注意最后的扩展名
$ unxz c databasesqlxz | mysql u user ppassword database #不需要释放出已压缩的sql脚本直接进行导入操作如果是其他格式的压缩需要相应的解压命令使用解压到stdout的参数
$ pv databasesqlxz | unxz c | mysql u user ppassword database #想看到导入的进度?没问题使用pv命令就可以需要自己安装pv命令ubuntu系统直接aptget install pvRHEL/centos需要添加rpmfusion源之后yum install pv