【问题标题】:SQL Remote Connection with file read读取文件的 SQL 远程连接
【发布时间】:2012-08-27 08:34:57
【问题描述】:

所以我试图重新访问我的服务器数据库并让它运行命令以将多个表全部导出到单个 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 或 ENCLOSED BY 或 LINES TERMINATED BY ... 我需要这些吗?这实际上会保存到我的本地机器吗?我对运行这个脚本很紧张,我不想犯错误并弄乱数据库。 .txt 也可以用于脚本文件吗?

您能提供的任何帮助都会很棒。

【问题讨论】:

  • 查看我在MySQL backups 上的博文。这可能有助于引导您走上正确的道路。

标签: mysql database windows sqlcommand


【解决方案1】:
  1. 我不确定我是否有正确的语法,或者如果这可能的话,我一直在进行大量研究以获取示例。

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

    mysql -h 198.xxx.xxx.xxx -u user -p mydb 
  2. 我不确定 FILEDS TERMINATED BY 或 ENCLOSED BY 或 LINES TERMINATED BY... 我需要这些吗?

    SELECT ... INTO Syntax 中所述:

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

    选择 a,b,a+b INTO OUTFILE '/tmp/result.txt'
      以 ',' 结尾的字段可选地由 '"' 包围
      以“\n”结尾的行
      FROM test_table;

    LOAD DATA Syntax 中所述:

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

    字段由 '\t' 终止,由 '' 包围,由 '\\' 转义
    由 '\n' 终止的行由 '' 开始

    继续解释:

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

    • 在字段之间写入标签。

    • 请勿将字段括在任何引号字符内。

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

    • 在行尾添加换行符。

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

  3. 这真的会保存到我的本地机器吗?

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

    SELECTSELECT ... INTO OUTFILE '<em>file_name</em>' 形式将选定的行写入文件。该文件是在服务器主机上创建的,因此您必须具有FILE 权限才能使用此语法。 file_name 不能是现有文件,这样可以防止 /etc/passwd 和数据库表等文件被破坏。 character_set_filesystem 系统变量控制文件名的解释。

    SELECT ... INTO OUTFILE 语句的主要目的是让您可以非常快速地将表转储到服务器计算机上的文本文件中。如果您想在服务器主机以外的其他主机上创建结果文件,通常不能使用SELECT ... INTO OUTFILE,因为无法写入相对于服务器主机文件系统的文件路径。

    但是,如果远程机器上安装了 MySQL 客户端软件,您可以改用 mysql -e "SELECT ..." &gt; <em>file_name</em> 等客户端命令在客户端主机上生成文件。

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

  4. 我对运行这个脚本很紧张,我不想出错并弄乱数据库。

    SELECT 语句仅从数据库中读取数据,不对其内容进行任何更改:因此它们不能“搞乱数据库”。

  5. .txt 也可以用于脚本文件吗?

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

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

【讨论】:

  • 非常感谢eggyal,这是一个非常详细的回复,帮助了很多。我仍然不明白如何在我的计算机上获得输出。我在我的服务器上安装了 mysql 以及 phpmyadmin。我需要做什么才能将此脚本的结果保存到我的家用计算机中,例如 %UserProfile%\Desktop?
  • @user1639634:您可以SELECT ... INTO OUTFILE 到服务器文件系统上的一个文件中,然后将该文件复制到您的桌面。
  • 谢谢!我可以使用我制作的 FTP 脚本从那里复制它。这是一个额外的步骤,但它工作得很好。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多