关于MySQL中的mysqldump饬令的运用

起原:zhoubin_java的 Blog 作者:zhoubin_java的 Blog




">  您可以看到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)的办法来辅助失失报表。




版权声明: 原创作品,许诺转载,转载时请务必以超链接体式格局标明文章 原始理由 、作者信息和本声明。不然将穷究法令责任。

posted @ 2011-03-07 19:59  蓝色的天空III  阅读(90)  评论(0编辑  收藏  举报