mysqldump是一个数据库备份程序mysql
用法:mysqldump [options] [db_name [tbl_name ...]]算法
描述:mysqldump是一个客户端逻辑备份的工做,备份的SQL文件能够在其余MySQL服务器上进行还原。sql
如需备份,则至少须要对该表的select权限,须要备份视图则须要改帐户具备SHOW VIEW权限,触发器须要TRIGGER。如需锁表,则不可以使用--single-transaction选项。其余权限暂未列出。shell
如需还原,则须要对应的执行权限,如create表,则须要对该库的create权限。数据库
mysqldump导出能够包括ALTER DATABASE与相关更改,其中包括导出元数据、更改字符编码,在导入对应文件时,相应的权限更改也会发生影响。安全
若是在服务器上备份的表均为MyISAM,也可使用mysqlhotcopy来完成任务。服务器
注意:若是在Windows环境下使用默认shell,则重定向输出的文件为UTF-16编码。 shell> mysqldump [options ] > dump.sql架构
然而,UTF-16是一个不容许被链接的字符集(参见10.1.5单元,‘Connection Character Sets and Collations’),因此导出文件不能被正常加载使用。为了解决这个问题,使用--result-file选项,建立ASCII格式文件: shell> mysqldump [options] --result-file=dump.sqloracle
从性能和伸缩性考虑,mysqldump的优点包括:在输出以前能够很方便的查看或编辑文件,你还能够克隆数据库与DBA的工做,或者将生产环境下的数据进行微小测试。这不是做为快速备份或可伸缩性很强的方案。即针对不一样大小的数据须要安排合理时间,在须要还原时速度并不快,由于须要从新进行I/O、建立索引等。app
对于大量数据来讲,物理备份可能更为合适,由于他能够快速还原。
·若是你的表以Innodb引擎为主,能够考虑使用MySQL的mysqlbackup命令。由于他提供了最好的Innodb备份:它也能够备份其余如MyIsAM与其余存储引擎;提供了更多的备份参数进行选择。详情见手册 25.2 “MySQL Enterprise Backup Overview”
·若是你的表以MyISAM引擎为主,能够考虑使用mysqlhotcopy来替代,它可能比mysqldump表现更为好,详情见mysqlhotcopy手册。
mysqldump能够行级导出数据,或者也能够将整个表载入内存一次性导出,若是将全部数据导入内存可能会面临内存缓冲区不够的问题。若是要行级导出数据,使用--quick选项(或者--opt,它支持--quick)。--opt选项是默认选项,因此为了保证内存缓冲区,使用--skip-quick。
若是你使用高版本的mysqldump来备份一个低版本的MySQL服务器中的数据,使用--skip-opt代替--opt或者-- extended-insert选项。
关于mysqldump的更多信息,要参照手册7.4单元“Useing mysqldump for Backups” 这里列出几个经常使用选项:备份一个或多个表,备份一个完整的数据库,备份一台MySQL服务器上全部数据库
>shell mysqldump [options] db_name [tbl_tables ...]
>shell mysqldump [options] --databases db_name ...
>shell mysqldump [options] --all-databases
备份整个数据库时,不要使用name与tables,直接指定db_name 或使用 --databases 或 --all-databases
mysqldump默认不会备份INFORMATION_SCHEMA与performance_schema数据库。若是要备份这些内容,须要在指定使用--skip-lock-tables选项。你也能够指定使用--databases时指定数据库名称。在MySQL5.5以前,及时你指定了,mysqldump也不会备份上述内容。
mysqldump不会备份performance_schema数据库。
在MySQL5.5.25版本以前,mysqldump不会备份mysql库的general_log 或 slow_query_log表。在5.5.25,备份文件包括重建指令。表中log内容不会备份。
mysqldump也不会备份MySQL集群nbinfo数据库信息。
可使用mysqldump --help命令查看选项列表。
一下有一些选项组的缩写:
·使用--opt指令至关于--add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, a和 --set-charset,以上这些选项是默认的,由于--opt是默认使用的选项。
·使用--compact至关于同事使用--skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys, 和 --skip-set-charset。
为了避免影响选项组其余选项,使用该组的 --skip-xxx from(--skip-opt或--skip-compack)他也能够选择选项组内的一些选项,例如一下:
·若是须要选择--opt选项组不生效的选项,使用--skip加选项。为了不写入内存,使用--opt --skip-extend-insert --skip-quick(通常 --skip-extend-insert --skip-quick默认禁用,由于--opt默认启用)
· 逆转——选择除了索引禁用全部功能和表锁定,使用--skip-opt --disable-keys --lock-tables
当须要启用或禁止选项组中某些特定的选项,指定就显得十分重要了,由于这些选项会在进程运行时始终生效。好比说,--disable-keys --lock-tables --skip-opt将不会做用。这就像--skip-opt做用于他自身。
接下来讲一下mysqldump的选项:
· --help:显示帮助信息并退出程序
· --add-drop-databases:在CREATE DATABASE以前写入drop databases。这个选项一般是配合--all-databases或--database使用,由于CREATE DATABASE语句执行时至少选定一个选项。
· --add-drop-table:在每一条CREATE TABLE以前写入DROP TABLE命令
· --add-drop-tigger:在每一条CREATE TIGGER以前写入DROP TIGGER。注意:这个选项只有mysqldump做为MySQL集群时提供。
· --add-locks:在备份时进行锁表,备份完释放表锁。这样能够避免快速写入数据形成脏读。
· --all-databases, -A :备份全部库中的全部表,效果等同于--database 后跟随全部库名。
· --all-tablespaces, -Y:使用NDBCLUSTER表来为全部的表备份语句添加表空间。这些信息是不包含在,mysqldump的输出。这个选项只有MySQL集群目前相关表。
· --allow-keywords:容许使用关键词做为列名,可是会在列名以前加上表名做为前缀。
· --apply-slave-statements:在MySQL5.5.3以后添加的选项,在从服务器上使用--dump-slave,在备份时中止从主服务器上备份数据。
· -- bind-address=ip_address:在一台主机上有多个网卡设备时,选择其中一块指定网卡链接MySQL服务器。这个选项仅支持mysqldump版本支持的MySQL集群,在5.5稳定版中还不支持。
· --character-sets-dir=dir_name:文件夹将使用安装数据库的字符集。
· --comments,-i:默认会将MySQL版本,服务器版本,主机信息等添加到备份文件中。若是不须要这些信息,可使用--skip-comments。
· --compact:输出更多的相关信息,这个选项支持使用--skip-drop-tables --skip-add-locks --skip-comments --skip-disable-keys --skip-set-charset选项。
· --compatible=name:生成兼容其余版本数据库的备份文件。name能够为ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, or no_field_options.若是须要填写多个时,使用‘,’分隔,备份文件会针对不一样版本进行制定的SQL模式。
这个选项并不能保证与其余服务器的兼容性。它只容许那些当前可用的SQL模式值进行转储输出更多的兼容。例如,-compatible=ORACLE不兼容数据类型映射到oracle类型或使用Oracle语法置评。
此选项要求MySQL版本4.1.0以上
· --complete-insert,-c:在INSERT语句时包含列名。
· --compress,-C:在客户端与服务器都支持的压缩算法中,选择压缩数据进行通讯。
· --create-options:在CREATE TABLE语句包含全部表选项。
· --database,-B:备份制定数据库。通常来讲,mysqld对待name参数时,第一个参数做为数据库名,紧随其后的做为表名。可是在使用这个选项时,会将全部name参数做为数据库名进行备份。在每个数据库备份前都会添加CREATE DATABASE 与 USE指令。
· --debug=[debug_options],-# [debug_options] :写入debug日志,经常使用debug_options使用字符串 d:t:o,filen_ame,默认值为d:t:o,/tmp/mysqldump.trace
· --debug-check:在程序退出时打印debug信息。
· --debug_info:在程序退出时打印内存、CPU使用状态至debug信息中。
· --default-auth=plugin:对客户端身份验证插件的使用提示。此特性5.5.9开始加入。
· --default- character-set=charset_name:使用charset_name做为字符集。
· -- defaults-extra-file=file_name:读取选项文件做为全局选项(Unix环境),并在用户选项以前生效。若是文件不存在或因为权限导致没法访问,则会产生错误。在MySQL5.5.8以前必须使用绝对路径。5.5.8以后可使用相对路径。
· --defaults-file=file_name:仅使用默认选项文件。若是文件不存在或因为权限导致没法访问,则会产生错误。在MySQL5.5.8以前必须使用绝对路径。5.5.8以后可使用相对路径。
· --defaults-group-suffix=str:Read不只使用一般的组名,并且也支持定义组别名。举例:mysqldump一般会读取[client]与[mysqldump]的组。若是给出了--defaults-group-suffix=str,mysqldump也会读取[client_ohter]与[mysqldump_other]组。
· --delayed-insert:在INSERT时会使用INSERT DELAYED
· --delete- mastelogs:在主从架构中,会使用PURGE BINARY LOG指令来删除主服务器中的从服务器备份的二进制日志。这个选项会自动启用 --master-data
· --disable-keys,-K:在每个表中的INSERT都会使用 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */ /*!40000 ALTER TABLE tbl_name ENABLE KEYS */包起来。这样可使得还原时速度更快,由于索引信息在全部INSERT操做以后才会创建,这个选项只会影响MyISAM表的 nonunique 索引,对其余引擎不生效。
· --dump-date:若是给出了--comments选项,mysqldump会在备份文件的结尾处添加-- Dump completed on DATE。然而,因为在备份时,会消耗时间因此为产生不一样的日期。--dump-date与--skip-dump-date控制如何记录日期,默认为--dump-date,日期包含在 comment中,--skip-dump-date支持阻止时间打印。
· --dump-slavel=[value]:这个选项与--master-data类似(除包含主从关系外),它会引发备份输出至从服务器的二进制日志(包含有CHANGE MASTER TO指令)主服务器则会替换。
--dump-slave:协调主从服务器就像使用--master-data选项。可是会引发--master-data失效。这个选项的值像是挂起--master-data的行为(不传入值或者1,CHANGE MASTER TO,设置为2会致使SQL被包起来)并且与之具备相同效应。这个选项会引发mysqldump在备份前中止中止slave SQL线程,然后重启。也能够结合--dump-slave --applay-slave-statements 与 --include-master-host-port使用。此特性在MySQL5.5.3被引入。
· --events,-E:使用事件调度器完成备份,可是须要数据库相关权限。
· -- extended-insert, -e:会使用列表写入INSERT,即一条语句插入多个值,这样会是备份文件更小。
· --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...:这些选项配合使用--tab选项卡并且要具有对应含义的FIELDS列做为LOAD TATA INFILE
· --first-slave:已弃用!使用--lock-all-tables代替。 此指令在MySQL5.5.3被启用。
· --flush-logs,-F:在备份前刷新MySQL服务器的日志,此选项须要RELOAD权限。若是你在--all-databases情景下使用此选项,则会在每一个数据库时刷新logs。 --lock-all-tables, --master-data, or (as of MySQL 5.5.21) --single-transaction时:日志只会被刷新一次,执行时会加表锁。若是你想在备份时刷新日志,--lock-all-tables, --master-data, or --single-transaction.配合此选项使用。
· --flush-privileges:在备份文件中添加执行FLUSH PRIVILEGES指令。若是你须要备份mysql库来回复某些权限时应当使用此选项。
· --force,-f:及时在备份表出现错误时依然继续执行。这个选项的使用场景之一是:在备份时出现错误,由于表已被删除。若是不使用此选项,mysqldump则会存在错误信息。若是使用,则会将错误信息打印出来后继续执行SQL指令。
· --enable-cleartext-plugin:开启cleartext插件。此特性在MySQL5.5.7时引入。
· --host=name,-h host_name:从给出的主机名备份,若是没给出,则默认为localhost
· --hex-blob:包含有二进制信息的列将会由十六进制输出(好比,‘abc’,将会输出为 0x616263,受影响的数据类型:BINARY, VARBINARY, the BLOB types, and BIT
· --include-master-host-port:在从服务器上的CHANGE MASTER TO 指令将会由--dump-slave选项备份,MASTER_HOST,MASTER_PORT指TCP/IP端口。此特性在MySQL5.5.3引入
· --ignore-table=db_name.tbl_name:忽略要被备份的表,若是忽略多个则须要使用屡次此选项,此选项还能够忽略VIEW。
· --insert-ignore:使用INSERT IGNORE 代替INSERT
· --lines-terminated-by=...:这个选项在LOAD DATA INFILE使用对应意义的--tab做为LINES列
· --lock-all-tables, -x:在备份时添加全局锁。此选项会自动关闭--single-transaction and --lock-tables.
· --lock-tables, -l:对于每一个数据库,都会在备份以前锁全部表。在MyISAM表会施加READ LOCAL。对于Innodb这种带有事物的引擎,--single-transaction多是更好的选择。
· --log-error=file_name:将错误记录到指定file_name,默认不记录。
· --master-data[=value]:使用此选项能够将主服务器转储为备份文件,使用另一台服务器还原时依然能够做为主服务器。可是这些服务器应该是从服务器还原以后再还原主服务器。若是选项值是2,CHANGE MASTER TO 被编写为一个SQL注释,所以只是信息;它转储文件还原时没有影响。若是选项值是1,该声明是没有写评论和生效当转储文件从新加载。若是没有指定选项值,默认值是1。此选项要求具有 RELOAD并且要开启二进制日志。
--master-data选项会默认关闭--lock-tables,并且默认打开 --lock-all-tables,可是 --lock-all-tables除外。在一种状况下:在开始备份前会须要一些时间添加全局读锁。如论如何,logs会详细记录dump时刻。
若是备份的主服务器含有从服务器时,也可能创建一个从服务器。在MySQL5.5.3或以上版本时,你可使用--dump-slave,可是若是同时存在时会覆盖--master-data选项。在MySQL5.5.3以前,使用以下规则来备份:
1.中止从服务器获取当前状态
mysql> STOP SLAVE SQL_THREAD;
mysql> SHOW SLAVE STATUS;
2.从SHOW SLAVE STATUS指令输出的内容中与主服务器对应的新从服务器的二进制日志应该开始替换Relay_Master_Log_File and Exec_Master_Log_Pos表示file_name与file_pos
3.备份从服务器
shell> mysqldump --master-data=2 --all-databases > dumpfile
4.重启从服务器
mysql> START SLAVE;
5.在新的从服务器上导入数据
shell> mysql < dumpfile
6.在新的从服务器上设置主服务器信息
mysql> CHANGE MASTER TO
-> MASTER_LOG_FILE = 'file_name', MASTER_LOG_POS = file_pos;
CHANGE MASTER TO指令可能还须要其余参数,好比MASTER_HOST指向当前从服务器对应的主服务器。添加其余必要参数
· --no-autocommit:在执行INSERT时关闭自动提交,即autocommit = 0 ,使用 COMMIT
· --no-create-db, -n:在给出--databases 或 --all-databases选项时,不执行CREATE DATABASE 指令
· --no-create-info, -t:在建立备份的表示,不执行CREATE TABLE。注意:不过此选项不排除mysqldump时会在日志文件中记录文件组与表空间,但是,你可使用--no-tablespaces来完成。
· --no-data, -d:不会在表中记录信息。这就在你只想CREATE TABLE时就颇有用了(好比,只想备份表结构)
· --no-defaults:不读取选项文件,若是程序由于读取未知文件而失败可使用此选项避免读取。
· --no-set-names, -N:此选项与--skip-set-charset.效果相同。
· --no-tablespaces, -y:CREATE LOGFILE GROUP与CREATE TABLESPACE指令不会被写进备份文件。
· --opt:至关于 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset,它提供了一个快速备份和还原的功能。
· --order-by-primary:备份表时会根据主键或第一个不重复的索引排序。若是索引存在,这就使得从一个MyISAM表向Innodb表导入时很方便了,不过这也会使备份时须要计算的时间更长。
· --password[=password], -p[password]:链接数据库的密码。若是使用短标签时,在密码与p之间不要有空格,若是你省略了password的值,mysqldump会提示输入。为了安全起见,固然你也能够在选项文件中提供,避免使用时输入。
· --pipe, -W:在Windows中,是经过管道链接MySQL服务器。这个选项提供了只有MySQL服务器提供的管道链接。
· --plugin-dir=dir_name:你插件的文件夹。若是--default-auth时,mysqldump不会去寻找。
·--port=port_num, -P port_num:TCP/IP使用的端口号。
· --print-defaults:在输出的文件中打印程序名与选项。
· --protocol={TCP|SOCKET|PIPE|MEMORY}:使用此选项你能够指定传输方式。
· --quick, -q:在备份数据量比较大的表时有用。会将数据读入内存,在输出完成以前会存在内存缓冲区。
· --quote-names, -Q:会将逃逸字符进行转义,“‘” '"'会换位'`',若是是ANSI_QUOTES SQL模式支持的话,会转为‘"‘’,此选项默认启动,若是须要关闭,可使用--skip-quote-names。
· --replace:使用REPLACE代替INSERT。
· --result-file=file_name, -r file_name:直接输出到指定的文件。建立结果文件及其以前的内容覆盖,即便发生错误而生成转储。这个选项应该在Windows上使用,以防止换行符“\ n”字符被转换为“\ r \ n”回车/换行符序列
` --routines, -R:包括存储程序(过程和函数)的倾倒数据库输出。这个选项须要mysql.proc表的SELECT权限。使用,例程生成的输出包含建立过程和建立函数语句建立例程。然而,这些语句不包括属性,如例程建立和修改时间戳,因此当例程.从新加载,建立时间戳等于从新加载时间。若是你须要建立例程和原来的时间戳属性,不使用,例程。相反,转储和重载mysql的内容。proc直接表,使用MySQL帐户有合适的MySQL数据库特权。
· --set-charset:在输出的文件中添加SET NAMES 指定,此选项是默认的,如需关闭可以使用--skip-set-charset。
· --shared-memory-base-name=name:在Windows上,所使用的共享内存的名字,使用共享内存链接到本地服务器。默认值是MYSQL。共享内存名称是区分大小写的。服务器必须启动——共享内存选项来启用共享内存链接。
· --single-transaction:这个选项设置事务隔离模式可重复读取和发送一个开始事务服务器的SQL语句,并把数据。是有用的只有InnoDB等事务性表,由于它转储的一致状态数据库事务开始时发布不阻止任何应用程序。当使用这个选项,你应该记住,只有InnoDB表在一个一致的状态。例如,任何MyISAM表或内存倾倒在使用这个选项可能仍然改变状态。
——单独的事务转储是在过程,以确保一个有效的转储文件和二进制日志坐标)(正确的表内容,没有其余的链接应使用如下语句:ALTER table,建立表,删除表,重命名表,截断。目的是为了保持一致性。这也会添加表锁。
此选项支持MySQL集群,结果不能保证由于NDBCLUSTER一致存储引擎只支持READ_COMMITTED事务隔离级别。你应该老是使用NDB备份和恢复。
在备份很大的表时,结合--quick与此选项使用。
· --skip-comments:参照--comments
· --skip-opt:参照--opt。
· --socket=path, -S path:在与本机通讯时,Unix系统会基于Unix sock file进行通讯,Windows基于pipe。
· --ssl*:使用ssl加密通讯数据
· --tab=dir_name, -T dir_name:产生制表符分隔的文本格式的数据文件。对于每一个转储表,,mysqldump建立一个tbl_name。sql文件,其中包含CREATE TABLE语句建立表,和服务器tbl_name写道。txt文件,其中包含数据的选项值是编写的文件的目录。
此选项只应该在MySQL服务器备份时使用。
· --tables:--databases后使用,此选项会使mysqldump将以后参数视为表名。
· --triggers:会在导出每一个表时都导出触发器,不过须要具备TIGGER的权限,此选项默认启用。
· --tz-utc:默认启用,禁用可使用--skip-tz-utc。此为时区信息。
· --user=user_name, -u user_name:链接MySQL服务器使用的用户名
· --verbose, -v:verbose模式,此模式会输出更多有关程序的信息。
· --version, -V:显示版本信息并退出程序。
· --where='where_condition', -w 'where_condition':备份时使用where条件
· --xml, -X:输出为xml格式