mysql数据库备份一般使用命令mysqldump,这个命令会在屏幕打印指定数据库、数据表的创建的SQL语句和数据表中数据的插入SQL语句。该命令导出的SQL语句在不同数据库之间是可移植的。
mysqldump还可以同时导出包含sql语句的文件和以特定符号分割的数据文件
下面介绍mysqldump的用法:
mysqldump的用法有三种:
mysqldump [options] database_name [table1 table2 ...]
备份特定数据库,可以指定特定表,以空格分隔
mysqldump [options] --database database1 database2
备份特定数据库
mysqldump [options] --all-database / mysqldump [options] -A
备份所有数据库
mysqldump还有很多选项,下面根据选项的使用频率依次介绍
--user=user_name / -u user_name
连接数据库的用户,-u后面的空格可有可无
--password[=password] / -p[password]
注意-p后面跟密码时,中间不能间隔空格号,表示连接数据库用户对应的密码
--host=host_name / -h host_name
注意-h后面一定要有空格,数据库所在服务器的ip地址或者域名
--port=port_num / -P port_num
服务器上数据库通讯使用的端口号,-P后的空格可有可无
--result-file=file / -r file
指定输出的信息到文件,而终端不输出文字
使用该选项要好于终端的输出重定向,因为重定向可能会发生字符编码的问题
=====================================================================================
--tab=path / -T path
产生tab分割的数据文件。对于每个转储的表,mysqldump创建一个包含创建表的CREATE TABLE语句的tbl_name.sql文件,和一个包含其数据的tbl_name.txt文件。选项值定义写入文件的目录。默认情况,.txt数据文件的格式是在列值和每行后面的新行之间使用tab字符。可以使用--fields-xxx和--行--xxx选项明显指定格式。
需要注意的是:该选项其实是间接调用了两个命令,第一个命令类似SHOW CREATE TABLE,第二个产生数据文件的命令等同于SELECT … INTO OUTFILE '文件路径',所以和SELECT … INTO OUTFILE的特点相同,产生的数据文件只能存到服务器中,而不能存到客户机,所以对指定的目录路径path是针对服务器操作系统的,并且对目录路径path要有读写的用户权限。如果想把类似的数据格式化导出文件存到客户机,可以参考$ >mysql -e "SELECT … FROM … WHERE … " > file_path
--fields-terminated-by=
该选项连同-T选项一起使用,规定了数据域以什么结束,参数为字符串,默认为\t
--fields-enclosed-by=
该选项连同-T选项一起使用,规定了数据域用什么符号扩起来,默认为空,一般可以是双引号、括号等
--fields-optionally-enclosed-by=
该选项连同-T选项一起使用,规定了数据域可以用什么符号括起来,因为为只有部分数据用这些符号括起来
--fields-escaped-by=
该选项连同-T选项一起使用,规定了转义字符,参数为字符,默认为\
--lines-terminated-by=
该选项连同-T选项一起使用,规定了数据行以什么结束,参数为字符串,windows默认为\r\n
=====================================================================================
--add-drop-database
在每个CREATE DATABASE语句前添加DROP DATABASE语句
--compatible=name
产生与其它数据库系统或旧的MySQL服务器更兼容的输出。值可以为ansi(标准SQL)、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_table_options或者no_field_options。同时使用几个选项,要用逗号将它们隔开
No_key_options不输出mysql专用索引选项
No_table_options不输出mysql专用表选项,如ENGINE=MyISAM
No_field_options不输出mysql专用列选项
--compact
产生少量输出,该选项相当于--comments=0、--skip-add-drop-table、--no-set-name、--skip-disable-key和--skip-add-locking一起使用
--comments[={0|1}]
如果设置为 0,禁止转储文件中的其它信息,例如程序版本、服务器版本和主机。--skip-comments与--comments=0的结果相同, 默认值为1,即包括额外信息
--compress / -C
如果客户端和服务器都支持压缩,则压缩双方传送的所有信息
--default-character-set=charset
使用charsetas默认字符集,如果没有指定,mysqldump使用utf8
--delayed-insert
使用INSERT DELAYED语句插入行
--default-character-set=charset
使用charset作为默认字符集
--allow-keywords
允许创建关键字列名,应在每个列名前面加上表名前缀
====================================================================================
--opt
该选项应该同时代表优化(optimize)和选项(option)意思,默认开启,相当于同时开启以下多个选项,省得用户每次都键入选项:--add-drop-table --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。可以用--skip-opt禁用。要想只禁用确信用-opt启用的选项,使用--skip形式;例如,--skip-add-drop-tables或--skip-quick
该选项比较重要,但是由于默认开启,所以不常用
--add-drop-table
在每个CREATE TABLE语句前添加DROP TABLE语句
--add-locking
用LOCK TABLES和UNLOCK TABLES语句引用每个表转储,重载转储文件时插入得更快
--create-option
在CREATE TABLE语句中包括所有MySQL表选项
--disable-keys / -K
对于每个表,用ALTER TABLE tbl_name DISABLE KEYS;和ALTER TABLE tbl_name ENABLE KEYS;语句引用INSERT语句。因为在插入所有行后创建索引,所以这样可以更快地装载转储文件,该选项只适合MyISAM表。
--extended-insert / -e
默认开启,使用包括几个VALUES的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入
--lock-tables,-l
开始转储前锁定所有表。用READ LOCAL锁定表以允许并行插入MyISAM表。对于事务表例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表。
--quick,-q
该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中
--set-charset
将SET NAMES default_character_set加到输出中。该选项默认启用。要想禁用SET NAMES语句,使用--skip-set-charset
=====================================================================================
--complete-insert / -c
使用包括列名的完整的INSERT语句
--single-transaction
该选项从服务器转储数据之前发出一个BEGIN SQL语句。它只适用于事务表,例如InnoDB和BDB,因为然后它将在发出BEGIN而没有阻塞任何应用程序时转储一致的数据库状态。
当使用该选项时,应记住只有InnoDB表能以一致的状态被转储。例如,使用该选项时任何转储的MyISAM或HEAP表仍然可以更改状态。
--single-transaction选项和--lock-tables选项是互斥的,因为LOCK TABLES会使任何挂起的事务隐含提交。要想转储大的表,应结合--quick使用该选项
--lock-all-tables,-x
所有数据库中的所有表加锁。在整体转储过程中通过全局读锁定来实现。该选项自动关闭--single-transaction和--lock-tables
--hex-blob
使用十六进制符号转储二进制字符串列(例如,'abc' 变为0x616263)。影响到的列有BINARY、VARBINARY、BLOB