-----------------------简单的线下备份-------------------------------------

 

一.错误修正

检测 MySQL 内 phpBB 的 DB 後发现,有个 users 的 table 是有问题的, 使用 myisamchk 尝试去修护,发现还不行用预设方式修护,还要多加个 "-o" 的参数才行,在使用myisamchk 时,为避免还有用户来存取 DB ,最好是能够将 MySQL 服务停止,不然最少也要下个 "mysqladmin flush-tables" 後, 再作 myisamchk 指令,像:

myisamchk -o phpbb2_users.MYI

这个动作,可能要作个2~3次,直到没有错误的讯息出现!

修护完,重新启动 MySQL 服务後,就可以用 mysql 这个 client 的指令, 去 Query 一下 DB 内容,测试看是否正常.很幸运的,DB的部份在此时, 运作是正常的.

当然,在你要备份之前,假如能先检测资料是否正确,那是最好不过了, 假如有需要,可以把检测的工作,排定在备份工作之前,但是记得,这个检测DB 的动作不要排定在 DB 高用量的那段时间,深夜无人上线的时段是个不错的选择!

二.开始备份

phpBB 讨论区的资料档,主要有两个部份,就是 php 主程式和 DB 内容, php 主程式的备份就比较简单,只要把全部档案 tar 起来就行了,就像:

tar cvfz phpbb2_20020601.tgz phpbb (上面的 phpbb 是指 phpBB 的 php 网页程式存放目录.)

以後有改到 phpBB 网页程式部份再重新备份一次就行,它的内容资料都写在DB 内,所以 php 程式档部份异动性应该不大.

 

再来就是 MySQL DB 部份了,预设 MySQL 的 DB 档案是存在 /var/lib/mysql 内, 以 DB 名称为目录,目录内就是该 DB 的所有资料,像 phpbb2 这个 DB, 就是存在 /var/lib/mysql/phpbb2 内,在备份前,因为怕资料尚未完全写入磁碟, 而且 MySQL 会 Lock 在使用的 DB 档案,所以应该是要先把 MySQL 先 Shutdown 一下, 整个备份的程序可以下像下面的指令去完成:

/etc/rc.d/init.d/mysqld stop 

tar cvfz phpbb2_db_20020601.tgz phpbb2 

/etc/rc.d/init.d/mysqld start

(上面的 phpbb2 是指存放 phpbb2 这个 DB 的目录.)

 

对!这样就可以了! 不过要注意的是,怕 DB 内每个 Tables 间的资料有关关联性, 所以最好是把整个 DB 一次备起来,单独只备哪个 Tables 的档案,以後回存时, 怕会有资料关联不一致的问题!

三.如何回存

phpBB 讨论区的回存,只需把档案解回原来存放网页的路径就可以,用以下指令解开:

tar xvfz phpbb2_20020601.tgz

DB 发生错误而要回存时,其实也不难,先找出最近一次完整正常的备份,先把现在错误的网页或 DB 先更名或 tar 起来,再把好的备份给解开回原来目录位置就行了,需要注意的是, MySQL 服务最好也是要先停止,回存完成後再启动服务,回存 DB 的整个程序可能像下面:

/etc/rc.d/init.d/mysqld.stop 

mv phpbb2 phpbb2_error 

tar xvfz phpbb2_db_20020601.tgz 

/etc/rc.d/init.d/mysqld.start

然後再去测试一下网页及资料库! 看使用上是否正常就行了..

------------------------------------mysql线上备份---------------------------------------------------------

MySQL的mysqldump工具的基本用法

导出要用到MySQL的mysqldump工具,基本用法是:   

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

 

mysqldump -uroot -ppassword –default-character-set=latin1 –opt –routines –master-data=1 –single-transaction  –flush-logs –force DBName > tt.txt
 
 
–opt 等同于同时添加 –add-drop-tables –add-locking –create-option –disable-keys –extended-insert –lock-tables –quick –set-charset 选项。
–lock-tables 锁定导出的表。只适用MyISAM
–add-locking 插入语句加锁
--disable-keys 告诉 mysqldump  INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */;  /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
–extended-insert 使用包括几个VALUES列表的多行INSERT语法。这样使转储文件更小,重载文件时可以加速插入。
–quick 该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中
–routines 导出存储过程定义
–single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB BDB。本选项和 –lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 –quick 选项。
–flush-logs 开始转储前刷新MySQL服务器日志文件。该选项要求RELOAD权限。请注意如果结合–alldatabase(-A)选项使用该选项,根据每个转储的数据库刷新日志。例外情况是当使用–lock-all-tables–master-data的时候:在这种情况下,日志只刷新一次,在所有表被锁定后刷新。如果你想要同时转储和刷新日志,应使用–flush-logs连同–lock-all-tables–master-data
–master-data 该选项将二进制日志的位置和文件名写入到输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。如果该选项值等于1,位置和文件名被写入CHANGE MASTER语句形式的转储输出,如果你使用该SQL转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。如果选项值等于 2CHANGE MASTER语句被写成SQL注释。如果value被省略,这是默认动作。–master-data选项启用–lock-all-tables,除非还指定–single-transaction(在这种情况下,只在刚开始转储时短时间获得全局读锁定。又见–single-transaction。在任何一种情况下,日志相关动作发生在转储时。该选项自动关闭–lock-tables 
–force 在表转储过程中,即使出现SQL错误也继续

   

 

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

只导出被选择了的记录;注意引号是强制的!   

"--where=user='jimf'" "-wuserid>1" "-wuserid<1"  

最常见的mysqldump使用可能制作整个数据库的一个备份:  

mysqldump --opt database > backup-file.sql   

但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的:   

mysqldump --opt database | mysql --host=remote-host -C database   

由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了:   

shell> mysqladmin create target_db_name   

shell> mysql target_db_name < backup-file.sql  

就是  

shell> mysql 库名 < 文件名 

--------------------- 几个常用用例------------------  

1.导出整个数据库

 mysqldump -u 用户名 -p 数据库名(直接输入数据库名字不用带路径) > 导出的文件名      

mysqldump -uroot -p boss > boss_back.sql 

2.导出一个表(包括表的数据)  mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名  

mysqldump -u wcnc -p boss users> boss_users.sql  

3.导出一个数据库的所有结构  

mysqldump -u wcnc -p -d --add-drop-table boss>/mysqlbackup/bossboss_db.sql     

-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table   

4、导出一个表的结构  

mysqldump -u 用户名 -p -d --add-drop-table 数据库名 表名>/mysqlbackup/boss_db.sql  

 

 

还原部分分(1)mysql命令行source方法  和 (2)系统命令行方法

1.还原全部数据库:

(1) 常用source 命令

  进入mysql     mysql -u root -p  

  mysql>use 数据库

  然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

  mysql>source /mysqlbackup/boss_db.sql

(2) 系统命令行: mysql -uroot -p123456 <f:\all.sql

2.还原单个数据库(需指定数据库)

(1) mysql>use mydb

mysql>source f:\mydb.sql

(2) mysql -uroot -p123456 mydb <f:\mydb.sql

3.还原单个数据库的多个表(需指定数据库)

(1) mysql>use mydb

mysql>source f:\multables.sql

(2) mysql -uroot -p123456 mydb <f:\multables.sql

4.还原多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库)

(1) mysql命令行:mysql>source f:\muldbs.sql

(2) 系统命令行: mysql -uroot -p123456 <f:\muldbs.sql

 

 

---------------------------------第二篇------------------------

最近在工作的时候,要将原来在本机开发的 MySQL存储过程迁往另一Linux操作系统下的MySQL数据库,因为表结构等已经在目标数据库中存在了, 不想直接拷贝数据库过去,所以用到了 MySQL的存储过程导出和导入,经上网搜索发现用Mysqldump工具可以实现,具体用法为:

 [root@localhost bin]# mysqldump -uroot -p -hlocalhost -P3306 -n -d -t -R DBName > procedure_name.sql

参数说明:

-n:   --no-create-db (没有创建数据库的信息)

-d:   --no-data     (不导出数据)

-t:   --no-create-info (没有创建数据库表的信息)

-R:   --routines      Dump stored routines (functions and procedures)

-E:  --events  (导出数据库中events)

-A:  --all-databases (导出所有的数据库)

-B:  --databases db1 db2 (导出指定的数据库)

    Mysqldump是客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建活装载表的SQL语句:

主要参数介绍:

1.连接选项

  -u,--user=name

  -p,--password=name

  -h,--host=name

  -P,--port=#

2.输出内容选项

 --add-drop-database (默认是自动加上的)

 --add-drop-table     (默认是自动加上的)

 -n;--no-create-db

 -d;--no-data

 -t;--no-create-info

3.输出格式选项

--compact (精简格式,将导出时的一些备注省略)

-c --complete-insert (导出数据的语句中,在insert to table values后加上各个字段,如insert into table(tab1,tab2,…) values(value1,value2,…))

-T(指定数据表中的数据备份为单纯的数据文件和建表SQL两个文件)

在mysqldump帮助文档中的说明:

-T, --tab=name      Creates tab separated textfile for each table to given

                           path. (creates .sql and .txt files). NOTE: This only

                          works if mysqldump is run on the same machine as the

                           mysqld daemon.

这里提示,使用-T参数时必须保证运行mysqldump命令的客户端必须与mysqld服务器实例在同一台机器上。

经 测试可知xx.sql建表文件是以linux的root用户创建,而xx.txt文件则是以linux的mysql用户创建,因此xxx.txt文件的存 放路径一定要保证mysql用户有读写创建文件的权限。在远程利用-T备份mysql的表时是不允许的,如果你非的这么使用你会发现在本地仅仅会创建 xxx.sql文件,而xxx.txt文件则没有,它有可能在远程运行mysqld的服务器上出现(仅仅是可能,保证远程运行mysqld的linux服 务器和本地linux有相同的路径和用户权限)。

--fields-terminated-by=name(域分隔符)

--fields-enclosed-by=name(域引用符)

--fields-optionally-enclosed-by=name(域引用可选字符)

--fields-escaped-by=name(转义字符)

域引用符和域引用可选字符在一次导出中不能同时使用,域引用可选字符只对认为需要引用的字段作引用,而域引用符对所有的字段都要作引用。

 

4.字符集选项

--default--character-set=xx

5.其他选项

-F --flush-logs(备份前刷新日志)

-l --lock-tables(给所有的表加读锁)

---------------------------------------第三篇--------------------------------

MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导出数据。一个重要的原因是用于备份数据库。数据的造价常常是昂贵的,需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是,也许您希望导出数据来共享。 在这个信息技术不断成长的世界中,共享数据变得越来越常见。 

比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。世界变得越来越小,信息也被共享得越来越多。有很多中导出数据得方法,它们都跟导入数据很相似。因为,毕竟,这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各样的导出数据的方法,您将学会如何用MySQL来实现数据导出。  

  使用mysqldump:   

  (mysqldump命令位于mysql/bin/目录中)  

  mysqldump工具很多方面类似相反作用的工具mysqlimport。它们有一些同样的选项。但mysqldump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。决不会有半点让人头疼地地方。   

  因此,如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用下面的命令:  

  bin/mysqldump –p Meet_A_Geek > MeetAGeek_Dump_File.txt   

  这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,可以使用下面的命令:  

  bin/mysqldump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt   

  这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:  

  bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt   

  mysqldump工具有大量的选项,部分选项如下表:  

  选项/Option 作用/Action Performed  

  --add-drop-table 

  这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除  

  --add-locks  

  这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作   

  -c or - complete_insert  

  这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。  

  --delayed-insert 在INSERT命令中加入DELAY选项  

  -F or -flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log.  

  -f or -force 使用这个选项,即使有错误发生,仍然继续导出  

  --full 这个选项把附加信息也加到CREATE TABLE的语句中  

  -l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。  

  -t or -no-create- info  

  这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。   

  -d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。  

在您只需要DDL语句时,可以使用这个选项。 

   --opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。  

  -q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。  

  -T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。   

  -w "WHERE Clause" or -where = "Where clause "  

  如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。   

  假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣,并且需要文件有逗号分隔,因为这样就很容易导入到Excel中。 为了完成这个人物,您可以使用下面的句子:  

  bin/mysqldump –p –where "Order_Date >='2000-01-01'" 

  –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders 

 

  这将会得到您想要的结果。   

  schema:模式  

  The set of statements, expressed in data definition language, that completely describe the structure of a data base.  

  一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。   

  SELECT INTO OUTFILE :  

  如果您觉得mysqldump工具不够酷,就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令,这就是SELECT INTO OUTFILE 命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用mysqldump完成的功能,可以依照下面的步骤进行操作:   

  1. 确保mysqld进程(服务)已经在运行  

  2. cd /usr/local/mysql  

  3. bin/mysqladmin ping ;// 如果这个句子通不过,可以用这个:mysqladmin -u root -p ping  

  mysqladmin ping用于检测mysqld的状态,is alive说明正在运行,出错则可能需要用户名和密码。  

  4. 启动MySQL 监听程序.  

  5. bin/mysql –p Meet_A_Geek;// 进入mysql命令行,并且打开数据库Meet_A_Geek,需要输入密码  

  6. 在命令行中,输入一下命令:  

  SELECT * INTO OUTFILE '/home/mark/Orders.txt' 

  FIELDS 

  TERMINATED BY = ',' 

  FROM Orders 

  WHERE Order_Date >= '2000-01-01' 

  

  在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。   

  比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:   

  在mysql目录建立一个名为Report_G.rpt 的文本文件,加入下面的行:  

  USE Meet_A_Geek; 

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name) 

  VALUES (NULL, "Kinnard", "Vicky"); 

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name) 

  VALUES (NULL, "Kinnard", "Steven"); 

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name) 

  VALUES (NULL, "Brown", "Sam"); 

  SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt' 

  FROM Customers WHERE Customer_ID > 1;  

  然后确认 mysql进程在运行,并且您在mysql目录中, 输入下面的命令: 

 

  bin/mysql < Report_G.rpt检查您命名作为输出的文件,这个文件将会包含所有您在Customers表中输入的顾客的姓。 如您所见,您可以使用今天学到的导入/导出(import/export)的方法来帮助得到报表。

---------------------------第四篇-----------------------------------

Mysqldump参数大全(参数来源于mysql5.5.19源码)

 

参数 参数说明

--all-databases , -A 导出全部数据库。

mysqldump -uroot -p --all-databases

--all-tablespaces , -Y 导出全部表空间。

mysqldump -uroot -p --all-databases --all-tablespaces

--no-tablespaces , -y 不导出任何表空间信息。

mysqldump -uroot -p --all-databases --no-tablespaces

--add-drop-database 每个数据库创建之前添加drop数据库语句。

mysqldump -uroot -p --all-databases --add-drop-database

--add-drop-table 每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

mysqldump -uroot -p --all-databases (默认添加drop语句) 

mysqldump -uroot -p --all-databases --skip-add-drop-table (取消drop语句)

--add-locks 在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

mysqldump -uroot -p --all-databases (默认添加LOCK语句) 

mysqldump -uroot -p --all-databases --skip-add-locks (取消LOCK语句)

--allow-keywords 允许创建是关键词的列名字。这由表名前缀于每个列名做到。

mysqldump -uroot -p --all-databases --allow-keywords

--apply-slave-statements 在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

mysqldump -uroot -p --all-databases --apply-slave-statements

--character-sets-dir 字符集文件的目录

mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments 附加注释信息。默认为打开,可以用--skip-comments取消

mysqldump -uroot -p --all-databases (默认记录注释) 

mysqldump -uroot -p --all-databases --skip-comments (取消注释)

--compatible 导出的数据将和其它数据库或旧版本的 MySQL 相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等, 

要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。

mysqldump -uroot -p --all-databases --compatible=ansi

--compact 导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

mysqldump -uroot -p --all-databases --compact

--complete-insert, -c 使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

mysqldump -uroot -p --all-databases --complete-insert

--compress, -C 在客户端和服务器之间启用压缩传递所有信息

mysqldump -uroot -p --all-databases --compress

--create-options, -a 在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)

mysqldump -uroot -p --all-databases

--databases, -B 导出几个数据库。参数后面所有名字参量都被看作数据库名。

mysqldump -uroot -p --databases test mysql

--debug 输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace

mysqldump -uroot -p --all-databases --debug 

mysqldump -uroot -p --all-databases --debug=" d:t:o,/tmp/debug.trace"

--debug-check 检查内存和打开文件使用说明并退出。

mysqldump -uroot -p --all-databases --debug-check

--debug-info 输出调试信息并退出

mysqldump -uroot -p --all-databases --debug-info

--default-character-set 设置默认字符集,默认值为utf8

mysqldump -uroot -p --all-databases --default-character-set=latin1

--delayed-insert 采用延时插入方式(INSERT DELAYED)导出数据

mysqldump -uroot -p --all-databases --delayed-insert

--delete-master-logs master备份后删除日志. 这个参数将自动激活 --master-data。

mysqldump -uroot -p --all-databases --delete-master-logs

--disable-keys 对于每个表,用/!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。

mysqldump -uroot -p --all-databases

--dump-slave 该选项将导致主的binlog位置和文件名追加到导出数据的文件中。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,在命令前增加说明信息。该选项将会打开--lock-tables选项。默认值为0。

mysqldump -uroot -p --all-databases --dump-slave=1 

mysqldump -uroot -p --all-databases --dump-slave=2

--events, -E 导出事件。

mysqldump -uroot -p --all-databases --events

--extended-insert, -e 使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。

mysqldump -uroot -p --all-databases 

mysqldump -uroot -p --all-databases --skip-extended-insert (取消选项)

--fields-terminated-by 导出文件中忽略给定字段。与--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-terminated-by="#"

--fields-enclosed-by 输出文件中的各个字段用给定字符包裹。与--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-enclosed-by="#"

--fields-optionally-enclosed-by 输出文件中的各个字段用给定字符选择性包裹。与--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-enclosed-by="#" --fields-optionally-enclosed-by ="#"

--fields-escaped-by 输出文件中的各个字段忽略给定字符。与--all-databases选项

mysqldump -uroot -p mysql user --tab="/home/mysql" --fields-escaped-by="#"

--flush-logs 开始导出之前刷新日志。 

请注意:假如一次导出多个数据库(使用选项--lock-all-tables 或者 --master-data 和 --flush-logs。

mysqldump -uroot -p --all-databases --flush-logs

--flush-privileges 在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。

mysqldump -uroot -p --all-databases --flush-privileges

--force 在导出过程中忽略出现的SQL错误。

mysqldump -uroot -p --all-databases --force

--help 显示帮助信息并退出。

mysqldump --help

--hex-blob 使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。

mysqldump -uroot -p --all-databases --hex-blob

--host, -h 需要导出的主机信息

mysqldump -uroot -p --host=localhost --all-databases

--ignore-table 不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如: --ignore-table=database.table.

mysqldump -uroot -p --all-databases --ignore-table=database.table1 --ignore-table=database.table2 ……

--include-master-host-port 在--dump-slave产生的'CHANGE MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'

mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore 在插入行时使用 INSERT IGNORE语句.

mysqldump -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by 输出文件的每行用给定字符串划分。与--all-databases选项。

mysqldump -uroot -p --host=localhost test test --tab="/tmp/mysql" --lines-terminated-by="##"

--lock-all-tables, -x 提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables, -l 开始导出前,锁定所有表。用READ LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。 

请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。

mysqldump -uroot -p --host=localhost --all-databases --lock-tables

--log-error 附加警告和错误信息到给定文件

mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err

--master-data 该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-tables选项。

mysqldump -uroot -p --host=localhost --all-databases --master-data=1; 

mysqldump -uroot -p --host=localhost --all-databases --master-data=2;

--max_allowed_packet 服务器发送和接受的最大包长度。

mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240

--net_buffer_length TCP/IP和socket连接的缓存大小。

mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024

--no-autocommit 使用autocommit/commit 语句包裹表。

mysqldump -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db, -n 只导出数据,而不添加CREATE DATABASE 语句。

mysqldump -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info, -t 只导出数据,而不添加CREATE TABLE 语句。

mysqldump -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d 不导出任何数据,只导出数据库表结构。

mysqldump -uroot -p --host=localhost --all-databases --no-data

--no-set-names, -N 等同于 --skip-set-charset

mysqldump -uroot -p --host=localhost --all-databases --no-set-names

--opt 等同于--skip-opt禁用.

mysqldump -uroot -p --host=localhost --all-databases --opt

--order-by-primary 如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。

mysqldump -uroot -p --host=localhost --all-databases --order-by-primary

--password, -p 连接数据库密码

--pipe(windows系统可用) 使用命名管道连接mysql

mysqldump -uroot -p --host=localhost --all-databases --pipe

--port, -P 连接数据库端口号

--protocol 使用的连接协议,包括:tcp, socket, pipe, memory.

mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。

mysqldump -uroot -p --host=localhost --all-databases 

mysqldump -uroot -p --host=localhost --all-databases --skip-quick

--quote-names,-Q 使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。

mysqldump -uroot -p --host=localhost --all-databases 

mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names

--replace 使用 REPLACE INTO 取代 INSERT INTO.

mysqldump -uroot -p --host=localhost --all-databases --replace

--result-file, -r 直接输出到指定文件中。该选项应该用在使用回车换行对(

n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。

mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt

--routines, -R 导出存储过程以及自定义函数。

mysqldump -uroot -p --host=localhost --all-databases --routines

--set-charset 添加'SET NAMES default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。

mysqldump -uroot -p --host=localhost --all-databases 

mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset

--single-transaction 该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。

mysqldump -uroot -p --host=localhost --all-databases --single-transaction

--dump-date 将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。

mysqldump -uroot -p --host=localhost --all-databases 

mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date

--skip-opt 禁用 --opt选项.

mysqldump -uroot -p --host=localhost --all-databases --skip-opt

--socket,-S 指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock

mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab,-T 为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。

mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"

--tables 覆盖--databases (-B)参数,指定需要导出的表名。

mysqldump -uroot -p --host=localhost --databases test --tables test

--triggers 导出触发器。该选项默认启用,用--skip-triggers禁用它。

mysqldump -uroot -p --host=localhost --all-databases --triggers

--tz-utc 在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。

mysqldump -uroot -p --host=localhost --all-databases --tz-utc

--user, -u 指定连接的用户名。

--verbose, --v 输出多种平台信息。

--version, -V 输出mysqldump版本信息并退出

--where, -w 只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

mysqldump -uroot -p --host=localhost --all-databases --where=" user='root'"

--xml, -X 导出XML格式.

mysqldump -uroot -p --host=localhost --all-databases --xml

--plugin_dir 客户端插件的目录,用于兼容不同的插件版本。

mysqldump -uroot -p --host=localhost --all-databases --plugin_dir="/usr/local/lib/plugin"

--default_auth 客户端插件默认使用权限。

mysqldump -uroot -p --host=localhost --all-databases --default-auth="/usr/local/lib/plugin/<PLUGIN>"