SQL Remote Connection与文件读取

时间:2012-09-02 05:53:32

标签: mysql database windows sqlcommand

所以我试图重新访问我的服务器数据库并让它运行命令将几个表全部导出到各个csv文件。所以我所拥有的是一个如下所示的命令行命令参数:

mysql -h 198.xxx.xxx.xxx -u user-p < file.txt

file.txt的内容如下所示:

SELECT * FROM log
INTO OUTFILE 'C:\USERS\username\Desktop\log.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'


SELECT * FROM permission_types
INTO OUTFILE 'C:\USERS\username\Desktop\permission_types.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'


SELECT * FROM personal_info_options
INTO OUTFILE 'C:\USERS\username\Desktop\personal_info_options.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'

我不确定我是否有这种权利的语法,或者如果这是可能的,我一直在做一些研究试图得到例子。人们通常会告诉你概念,但似乎永远不会给你测试它们所需的代码总是像:

mysql -h localhost -u user-p < somefile and they don't show you contents 
of a file for example

我正在运行Windows 7,我安装了WAMPServer,它有MYSQL版本5.5.24,我可以通过命令行访问它。我不确定FILEDS TERMINATED BY或封闭的BY或LINES LINEDED BY ...我是否需要这些?这实际上会保存到我的本地机器吗?我对运行这个脚本感到紧张我不想犯错误并弄乱数据库。对于脚本文件,还是.txt ok吗?

你能给予的任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

  1.   

    我不确定我是否有这种权利的语法,或者如果可能的话,我一直在做一些研究试图获得例子。

    您的语法是正确的,除了每个SELECT语句都应以分号结束。请注意,您还需要指定表所在的数据库 - 最简单的方法是将此作为mysql的参数:

    mysql -h 198.xxx.xxx.xxx -u user-p mydb < file.txt

  2.   

    我不确定FILEDS TERMINATED BY或封闭的BY或LINES BYES终止......我是否需要这些?

    正如SELECT ... INTO Syntax所述:

      

    以下示例以许多程序使用的逗号分隔值(CSV)格式生成文件:

    SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
      LINES TERMINATED BY '\n'
      FROM test_table;

    正如LOAD DATA Syntax

    所述
      

    如果您没有指定FIELDSLINES子句,则默认值与您编写的相同:

    FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
    LINES TERMINATED BY '\n' STARTING BY ''

    接着解释:

      

    相反,默认值会导致SELECT ... INTO OUTFILE在编写输出时执行以下操作:

         
        
    • 在字段之间编写标签。

    •   
    • 请勿在任何引号中包含字段。

    •   
    • 使用“\”转义字段值中出现的制表符,换行符或“\”的实例。

    •   
    • 在行的末尾写下换行符。

    •   

    请注意,因为LINES TERMINATED BY '\n'是默认值,您可以省略该子句;但是CSV输出需要FIELDS子句。

  3.   

    这实际上会保存到我的本地机器吗?

    没有。正如SELECT ... INTO Syntax所述:

      

    SELECT ... INTO OUTFILE 'file_name' SELECT形式将所选行写入文件。该文件是在服务器主机上创建的,因此您必须具有FILE权限才能使用此语法。 file_name 不能是现有文件,除其他外,它会阻止/etc/passwd和数据库表等文件被销毁。 character_set_filesystem系统变量控制文件名的解释。

         

    SELECT ... INTO OUTFILE语句主要用于让您快速将表转储到服务器计算机上的文本文件中。如果要在服务器主机之外的其他主机上创建生成的文件,通常无法使用SELECT ... INTO OUTFILE,因为无法编写相对于服务器主机文件系统的文件路径。

         

    但是,如果远程计算机上安装了MySQL客户端软件,则可以使用 mysql -e "SELECT ..." > file_name 等客户端命令在客户端主机上生成该文件。

         

    如果可以使用服务器文件系统上的网络映射路径访问远程主机上文件的位置,也可以在服务器主机以外的其他主机上创建生成的文件。在这种情况下,目标主机上不需要mysql(或其他一些MySQL客户端程序)。

  4.   

    我对运行这个脚本感到紧张我不想犯错误并弄乱数据库。

    SELECT语句只读取数据库中的数据,不对其内容进行任何更改:因此它们不会“弄乱数据库”。

  5.   

    脚本文件也是.txt吗?

    任何扩展都可以工作:MySQL客户端和服务器软件都看不到它(您的操作系统读取文件并将其内容发送到客户端程序,然后客户端程序将该内容发送到服务器;操作系统对于这里的文件扩展名。)

    在Windows上,.txt扩展名会将文件与文本编辑器(例如记事本)相关联,以便可以随时打开进行编辑。我个人更喜欢.sql,因为它更准确地描述了文件的内容,然后我将该扩展名与合适的编辑器相关联 - 但这些都不是必要的