MySQLmysqldump命令使⽤详解
经常地备份可以帮助防⽌宝贵数据地丢失;另外⼀个原因是,也许您希望导出数据来共享。在这个信息技术不断成长的世界中,共享数据变得越来越常见。
⽐⽅说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(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到⼀个⽂件,可以使⽤下⾯的命令:
  bin/mysqldump –p Meet_A_Geek Orders >
  这个⾮常的灵活,您甚⾄可以使⽤WHERE从句来选择您需要的记录导出到⽂件中。要达到这样的⽬的,可以使⽤类似于下⾯的命令:
  bin/mysqldump –p –where="Order_ID > 2000" Meet_A_Geek Orders >
  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,数据⽂件被命名为路径名是存放这两个⽂件的⽬录。⽬录必须已经存在,并且命令的使⽤者有对⽂件的特权。
  -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
简单的mysql语句  mysqladmin ping⽤于检测mysqld的状态,is alive说明正在运⾏,出错则可能需要⽤户名和密码。
  4. 启动MySQL 监听程序.
  5. bin/mysql –p Meet_A_Geek;// 进⼊mysql命令⾏,并且打开数据库Meet_A_Geek,需要输⼊密码
  6. 在命令⾏中,输⼊⼀下命令:
  SELECT * INTO OUTFILE '/home/'
  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)的⽅法来帮助得到报表。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。