mysql很棒!我目前参与了一个主要的服务器迁移,以前,我们的小数据库曾经与客户端托管在同一服务器上。
因此,我们曾经这样做: SELECT * INTO OUTFILE .... LOAD DATA INFILE ....

现在,我们将数据库移至其他服务器和 SELECT * INTO OUTFILE .... 我相信不再有效,可以理解 - 安全原因。但是,有趣的是 LOAD DATA INFILE .... 可以更改为 LOAD DATA LOCAL INFILE .... 和BAM,它有效。

我不是在抱怨,也不对MySQL表示厌恶。该添加了2行额外代码和系统调用表格A .SQL脚本的替代方案。我只想知道为什么 LOAD DATA LOCAL INFILE 作品,为什么没有这样的东西 SELECT INTO OUTFILE LOCAL?

我做了功课,找不到上面问题的直接答案。我也找不到功能请求 @ mySQL。如果有人能清除这一点,那真是太棒了!

Mariadb是否能够处理此问题?

有帮助吗?

解决方案

从手册中: The SELECT ... INTO OUTFILE 语句主要是为了使您非常快速地将表转倒在服务器计算机上的文本文件。如果要在服务器主机以外的某些客户端主机上创建结果文件,则无法使用 SELECT ... INTO OUTFILE. 。在这种情况下,您应该使用命令 mysql -e "SELECT ..." > file_name 在客户端主机上生成文件。”

http://dev.mysql.com/doc/refman/5.0/en/select.html

一个例子:

mysql -h my.db.com -u usrname--password=pass db_name -e 'SELECT foo FROM bar' > /tmp/myfile.txt

其他提示

您可以使用MySQL控制台使用-s( - 信号)选项来实现所需的目标。

也可以通过-R(-RAW)选项,以便不逃脱特殊角色可能是个好主意。您可以像想要的那样使用它来管道查询。

mySQL -U用户名-H主机名-P -S -R -E“ select concat('this'','','works')”

编辑:另外,如果要从输出中删除列名,只需添加另一个-s(mySQL -SS -R等)

你给的路 LOAD DATA INFILE 是用于服务器运行的机器上的文件系统,而不是您连接的机器。 LOAD DATA LOCAL INFILE 是用于客户端的机器,但要求服务器以正确的设置启动,否则不允许使用。你可以在这里读到所有和它有关的: http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

至于 SELECT INTO OUTFILE 我不确定为什么没有本地版本,除了在连接上很难做到这一点。您可以通过 mysqldump 工具,但不能通过将SQL发送到服务器。

将MySQL CLI与-e选项一起使用,因为Waverly360暗示是一个很好的选择,但这可能会消失并在大型结果中被杀死。 (还没有找到背后的原因)。如果是这样,您需要所有记录,我的解决方案是:mySqlDump + mySqlDump2csv:

wget https://raw.githubusercontent.com/jamesmishra/mysqldump-to-csv/master/mysqldump_to_csv.py
mysqldump -u username -p --host=hostname database table | python mysqldump_to_csv.py > table.csv

回复:选择 *进入淘汰赛

检查MySQL是否具有将文件写入服务器上的外档目录的权限。

由于我发现自己经常寻找这个确切的问题(希望我在之前错过了什么...),所以我终于决定花时间写一份 小要点以CSV文件导出MySQL查询, ,有点像 https://stackoverflow.com/a/28168869 但基于PHP和更多选择。这对我的用例很重要,因为我需要能够微调CSV参数(分界符,无效处理),并且文件实际上需要是有效的CSV,因此简单 CONCAT 是不够的,因为如果值包含线路断路或CSV定界符,则不会生成有效的CSV文件。

注意:需要在服务器上安装PHP!(可以通过 php -v)

“安装” mysql2csv 通过

wget https://gist.githubusercontent.com/paslandau/37bf787eab1b84fc7ae679d1823cf401/raw/29a48bb0a43f6750858e1ddec054d3552f3cbc45/mysql2csv -O mysql2csv -q && (sha256sum mysql2csv | cmp <(echo "b109535b29733bd596ecc8608e008732e617e97906f119c66dd7cf6ab2865a65  mysql2csv") || (echo "ERROR comparing hash, Found:" ;sha256sum mysql2csv) ) && chmod +x mysql2csv

(下载要点的内容,检查校验和使其可执行)

用法示例

./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"

生成文件 /tmp/result.csv 内容

foo,bar
1,2

帮助参考

./mysql2csv --help
Helper command to export data for an arbitrary mysql query into a CSV file.
Especially helpful if the use of "SELECT ... INTO OUTFILE" is not an option, e.g.
because the mysql server is running on a remote host.

Usage example:
./mysql2csv --file="/tmp/result.csv" --query='SELECT 1 as foo, 2 as bar;' --user="username" --password="password"

cat /tmp/result.csv

Options:
        -q,--query=name [required]
                The query string to extract data from mysql.
        -h,--host=name
                (Default: 127.0.0.1) The hostname of the mysql server.
        -D,--database=name
                The default database.
        -P,--port=name
                (Default: 3306) The port of the mysql server.
        -u,--user=name
                The username to connect to the mysql server.
        -p,--password=name
                The password to connect to the mysql server.
        -F,--file=name
                (Default: php://stdout) The filename to export the query result to ('php://stdout' prints to console).
        -L,--delimiter=name
                (Default: ,) The CSV delimiter.
        -C,--enclosure=name
                (Default: ") The CSV enclosure (that is used to enclose values that contain special characters).
        -E,--escape=name
                (Default: \) The CSV escape character.
        -N,--null=name
                (Default: \N) The value that is used to replace NULL values in the CSV file.
        -H,--header=name
                (Default: 1) If '0', the resulting CSV file does not contain headers.
        --help
                Prints the help for this command.
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top