0

所以我有一个运行批处理脚本的批处理服务器。该脚本为我们的数据库服务器发出一个 mysqldump 命令。

 mysqldump -h nnn.nn.nnn.nn -u username -p password --tab=/var/batchfiles/ --fields-enclosed-by='"' --fields-terminated-by="," --fields-escaped-by="\\" --lines-terminated-by="\\n" store_locations stores 

当命令运行时,我得到一个错误:

Can't create/write to file '/var/mi6/batch/stores.txt' (Errcode: 2) when executing 'SELECT INTO OUTFILE'

现在我也尝试按照http://techtots.blogspot.com/2011/12/using-mysqldump-to-export-csv-file.html的建议输出到 /tmp 目录,但它仍然无法写入文件正如它告诉我它已经存在,即使它不存在。

底线是,我希望能够在服务器 A 上运行一个脚本,该脚本为 db 服务器发出一个 mysql 命令,并将该输出文件以 csv 格式保存到服务器 A。

仅供参考,我也尝试过运行 mysql 并将输出重定向到文件。这会创建一个选项卡文件,但您对输出没有太多控制权,因此它也不会真正起作用。

4

1 回答 1

5

mysqldumpin a --tabmode 是一个 CLI 工具,用于SELECT INTO OUTFILE. 后者通常应该用于重新创建分隔文件,并且仅在数据库服务器主机上。

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

您至少有以下选择:

  1. 在远程主机上使用mysql而不是mysqldump创建制表符分隔文件

    mysql -h<host> -u<user> -p<password> \
    -e "SELECT 'column_name', 'column_name2'... \
        UNION ALL SELECT column1, column2, FROM stores" > \
    /path/to/your/file/file_name
    
  2. 您可以使用sedawk从制表符分隔的输出创建一个 CSV 文件。有关详细信息,请参阅

  3. 您可以通过 db 服务器文件系统上的网络映射路径访问远程主机上的文件位置。

于 2013-09-20T22:43:26.337 回答