MySQL 数据库导出

  • 数据库导出

    将表数据导出到文本文件的最简单方法是使用SELECT ... INTO OUTFILE语句,该语句将查询结果直接导出到服务器主机上的文件中。
    该语句的语法在末尾结合了常规的SELECT命令和INTO OUTFILE 文件名。默认输出格式与LOAD DATA命令相同。所以,下面的语句导出tutorials_tbl表分成/tmp/tutorials.txt作为制表符分隔,换行终止的文件。
    mysql> SELECT * FROM tutorials_tbl 
       -> INTO OUTFILE '/tmp/tutorials.txt';
    您可以使用各种选项来更改输出格式,以指示如何对列和记录进行引用和定界。要以带有CRLF终止行的CSV格式导出tutorial_tbl表,请使用以下代码。
    mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/tutorials.txt'
       -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
       -> LINES TERMINATED BY '\r\n';
    SELECT ... INTO OUTFILE具有以下属性
    • 输出文件是由MySQL服务器直接创建的,因此文件名应指示您要将文件写入服务器主机的位置。没有类似于LOAD DATALOCAL版本的语句的LOCAL版本。
    • 您必须具有MySQL FILE特权才能执行SELECT ... INTO语句。
    • 输出文件必须不存在。这样可以防止MySQL破坏可能很重要的文件。
    • 您应该在服务器主机上具有登录帐户,或通过某种方式从该主机上检索文件。否则,SELECT ... INTO OUTFILE命令对您很可能毫无价值。
    • 在UNIX下,该文件是可读的,并且由MySQL服务拥有。这意味着,尽管您将能够读取文件,但可能无法将其删除。
  • 将表导出为原始数据

    mysqldump程序用于复制或备份表和数据库。它可以将表输出作为原始数据文件或一组在表中重新创建记录的INSERT语句来写入。要将表转储为数据文件,必须指定--tab选项,该选项指示MySQL服务器要在其中写入文件的目录。例如,要将tutorials_tbl表从mydb数据库转储到/tmp目录中的文件,请使用如下所示的命令。
    $ mysqldump -u root -p --no-create-info \
       --tab=/tmp mydb tutorials_tbl
    password ******
  • 以SQL格式导出表内容或定义

    要将SQL格式的表导出到文件,请使用以下命令。
    $ mysqldump -u root -p mydb tutorials_tbl > dump.txt
    password ******
    这将创建一个具有如下所示内容的文件。
    -- MySQL dump 8.23
    --
    -- Host: localhost    Database: mydb
    ---------------------------------------------------------
    -- Server version       3.23.58
    
    --
    -- Table structure for table `tutorials_tbl`
    --
    
    CREATE TABLE tutorials_tbl (
       tutorial_id int(11) NOT NULL auto_increment,
       tutorial_title varchar(100) NOT NULL default '',
       tutorial_author varchar(40) NOT NULL default '',
       submission_date date default NULL,
       PRIMARY KEY  (tutorial_id),
       UNIQUE KEY AUTHOR_INDEX (tutorial_author)
    ) TYPE = MyISAM;
    
    --
    -- Dumping data for table `tutorials_tbl`
    --
    
    INSERT INTO tutorials_tbl 
       VALUES (1,'Learn PHP','John Poul','2007-05-24');
    INSERT INTO tutorials_tbl 
       VALUES (2,'Learn MySQL','Abdul S','2007-05-24');
    INSERT INTO tutorials_tbl 
       VALUES (3,'JAVA Tutorial','Sanjay','2007-05-06');
    要转储多个表,请将它们全部命名,后跟数据库名称参数。要转储整个数据库,请不要在数据库后命名任何表,如以下代码块所示。
    $ mysqldump -u root -p mydb > database_dump.txt
    password ******
    要备份主机上可用的所有数据库,请使用以下代码。
    $ mysqldump -u root -p --all-databases > database_dump.txt
    password ******
  • 将表或数据库复制到另一台主机

    如果要将表或数据库从一台MySQL服务器复制到另一台,请使用带有数据库名和表名的mysqldump。在源主机上运行以下命令。这会将完整的数据库转储到dump.txt文件中。
    $ mysqldump -u root -p database_name table_name > dump.txt
    password *****
    您可以在不使用特定表名的情况下复制完整的数据库,如上所述。现在,在另一台主机上使用ftp dump.txt文件,并使用以下命令。在运行此命令之前,请确保已在目标服务器上创建了database_name。
    $ mysql -u root -p database_name < dump.txt
    password *****
    在不使用中间文件的情况下完成此操作的另一种方法是直接通过网络将mysqldump的输出发送到远程MySQL服务器。如果可以从源数据库所在的主机连接到两台服务器,请使用以下命令(确保两台服务器都具有访问权限)。
    $ mysqldump -u root -p database_name \
       | mysql -h other-host.com database_name
    在mysqldump中,一半的命令连接到本地服务器,并将转储输出写入管道。该命令的其余一半连接到other-host.com上的远程MySQL服务器。它读取用于输入的管道,并将每个语句发送到other-host.com服务器。