在远程服务器上尝试mysqldump到csv时无法创建文件

时间:2013-09-20 21:34:42

标签: mysql bash csv batch-file mysqldump

所以我有一个运行批处理脚本的批处理服务器。此脚本为我们的数据库服务器发出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上运行一个脚本,该脚本为数据库服务器发出mysql命令,并将该输出文件以csv格式保存到服务器A.

仅供参考,我也尝试过运行mysql并将输出重定向到文件。这会创建一个标签文件,但你对输出没有多少控制权,所以它也不会真正起作用。

1 个答案:

答案 0 :(得分:5)

mysqldump模式下的

--tabSELECT INTO OUTFILE的CLI工具。后者通常应该用于重新创建分隔文件,而仅在数据库服务器主机上。

  

<强> SELECT ... INTO Syntax
  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文件。有关详细信息,请参阅this

  3. 您可以通过数据库服务器文件系统上的网络映射路径为远程主机上的文件创建位置。