很多时候我们需要将电脑上的数据库备份或者多台电脑上同步数据库上的数据,mysqldump命令可以帮助我们解决这个问题。
mysqldump常用于MySQL数据库逻辑备份,可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和装载表的SQL语句,对于备份整个数据库或所有数据库是非常不错的,可以通过参数导出满足不同需求的备份文件,如,带drop语句的备份,只备份出表结构等。
使用命令方式运行mysqldump,即在cmd命令行下,进入于mysql的bin下。如:C:/Program Files/MySQL/MySQL Server 5.6/bin>mysqldump -p --where="id > 10" mydatabase mytable > buckup.txt
sqldump的几种常用方法:
1、备份数据
(1)导出整个数据库(包括数据库中的数据)
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
这个时候会提示要你输入用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中,当然,你可以指定文件导出的路径.
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump -uppnie -p ppniedb>D:/ppniedb.sql
执行命令后,你会发现D:盘多了个ppnie.sql 文件,其中既有有所有表的创建语句又有对应表中的数据。
(2)导出数据库结构(不含数据)
mysqldump -u 用户名 -p -d数据库名 > 导出的文件名
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump -uppnie -p -d ppniedb>D:/ppni
Edb01.sql
执行命令后,你会发现D:盘多了个ppnie01.sql 文件,其中只有创建表的语句
(3)导出数据库中的某张数据表(包含数据)
mysqldump -u 用户名 -p -d数据库名表名> 导出的文件名
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump -uppnie -p ppniedb person>D:/ppnie02.sql
执行命令后,你会发现D:盘多了个ppnie01.sql 文件,其中只有创建表person的语句和该表中的数据
mysqldump -u username -p dbname tablename > tablename.sql
(4)导出数据库中的某张数据表的表结构(不含数据)
mysqldump -u 用户名 -p -d数据库名表名> 导出的文件名
C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump -uppnie -p -d ppniedb person>D:/ppnie02.sql
执行命令后,你会发现D:盘多了个ppnie01.sql 文件,其中只有创建表person的语句
2、恢复数据
(1)将备份的数据还原
备份的脚本没有创建数据库,所以在还原的时候应使用已经存在的数据库
A )用户登陆后,进入到数据库下,然后使用命令”source备份脚本“
由图可知,导入之前导出的数据库脚本ppnie02.sql,新数据库testdb2中新增了表person且person中包含数据。
B )使用命令mysql -u 用户名 -p 数据库名 < 备份脚本
mysql -u ppnie -p test < D:/ppniedb.sql
3、其他备份表数据和还原数据
SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA …INFILE语句恢复数据。但是这种方法只能导出或导入数据的内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构。
3.1SELECT INTO…OUTFILE语法:
select * from Table into outfile '/path/filename'
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
例:
mysql> select * from person into outfile 'd:/person1.txt';
注意:路径目录必须有读写权限,文件名必须唯一
文件person1.txt 的内容如下
● fields子句:在FIELDS子句中有三个亚子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY。如果指定了FIELDS子句,则这三个亚子句中至少要指定一个。
(1)TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ','”指定了逗号作为两个字段值之间的标志。
(2)ENCLOSED BY子句用来指定包裹文件中字符值的符号,例如,“ENCLOSED BY ' " '”表示文件中字符值放在双引号之间,若加上关键字OPTIONALLY表示所有的值都放在双引号之间。
(3)ESCAPED BY子句用来指定转义字符,例如,“ESCAPED BY '*'”将“*”指定为转义字符,取代“\”,如空格将表示为“*N”。
● LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY '?'”表示一行以“?”作为结束标志。
3.2LOAD DATA …INFILE语句是SELECT INTO…OUTFILE语句的补语,该语句可以将一个文件中的数据导入到数据库中。
mysql> load data local infile 'd:/person1.txt' into table person;
4、mysqldump常用参数说明
导出要用到MySQL的mysqldump工具,基本用法是:
> mysqldump [OPTIONS] database [tables]
如果你不给定任何表,整个数据库将被导出。
通过执行mysqldump --help,你能得到你mysqldump的版本支持的选项表。
注意,如果你运行mysqldump没有--quick或--opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。
mysqldump支持下列选项:
--add-locks
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。
--add-drop-table
在每个create语句之前增加一个drop table。
--allow-keywords
允许创建是关键词的列名字。这由表名前缀于每个列名做到。
-c, --complete-insert
使用完整的insert语句(用列名字)。
-C, --compress
如果客户和服务器均支持压缩,压缩两者间所有的信息。
--delayed
用INSERT DELAYED命令插入行。
-e, --extended-insert
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)
-#, --debug[=option_string]
跟踪程序的使用(为了调试)。
--help
显示一条帮助消息并且退出。
--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--fields-terminated-by=...
这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。
LOAD DATA INFILE语法。
-F, --flush-logs
在开始导出前,洗掉在MySQL服务器中的日志文件。
-f, --force,
即使我们在一个表导出期间得到一个SQL错误,继续。
-h, --host=..
从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。
-l, --lock-tables.
为开始导出锁定所有表。
-t, --no-create-info
不写入表创建信息(CREATE TABLE语句)
-d, --no-data
不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的!
--opt
同--quick --add-drop-table --add-locks --extended-insert --lock-tables。
应该给你为读入一个MySQL服务器的尽可能最快的导出。
-pyour_pass, --password[=your_pass]
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。
-P port_num, --port=port_num
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)
-q, --quick
不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。
-S /path/to/socket, --socket=/path/to/socket
与localhost连接时(它是缺省主机)使用的套接字文件。
-T, --tab=path-to-some-directory
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据--fields-xxx和--lines--xxx选项来定。
-u user_name, --user=user_name
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。
-O var=option, --set-variable var=option
设置一个变量的值。可能的变量被列在下面。
-v, --verbose
冗长模式。打印出程序所做的更多的信息。
-V, --version
打印版本信息并且退出。
-w, --where='where-condition'
只导出被选择了的记录