mysqldump命令如下:
mysqldump -u<username> -p<password> -h<remote_db_host> -T<target_directory> <db_name> --fields-terminated-by=,
将为每个表写出两个文件(一个是架构,另一个是CSV表数据)。要获取CSV输出,您必须指定目标目录(使用-T)。当-T传递给mysqldump时,它会将数据写入运行mysqld的服务器的文件系统 - 而不是发出命令的系统。 有没有一种从远程系统转储CSV文件的简单方法?
注意:我熟悉使用简单的mysqldump并处理STDOUT输出,但我不知道如何在不进行实质性解析的情况下以这种方式获取CSV表数据。在这种情况下,我将使用-X选项并转储xml。
答案 0 :(得分:10)
mysql -h remote_host -e "SELECT * FROM my_schema.my_table" --batch --silent > my_file.csv
答案 1 :(得分:2)
我想补充一下codeman的答案。它工作但需要大约30分钟的调整以满足我的需求。
我的网络服务器使用centos 6 / cpanel,上面使用的编码器的标志和序列对我不起作用,我不得不重新排列并使用不同的标志等。
另外,我将它用于本地文件转储,它不仅对远程数据库有用,因为我对selinux和SELECT INTO OUTFILE命令的mysql用户权限等问题太多了。
mysql -B -s -uUSERNAME -pPASSWORD < query.sql > /path/to/myfile.txt
无专栏名称
我不能让列名出现在顶部。我尝试添加标志:
--column-names
但它没有任何区别。我仍然坚持这个。我目前在处理后将其添加到文件中。
选择数据库
由于某种原因,我无法在命令行中包含数据库名称。我试过
-D databasename
在命令行中,但我一直得到权限错误,所以我结束使用以下查询的顶部.sql:
USE database_name;
答案 2 :(得分:1)
在许多系统上,MySQL作为一个独特的用户运行(例如用户“mysql”),如果MySQL用户在转储目录中没有写权限,你的mysqldump将失败 - 你自己的写权限是什么并不重要在那个目录中。将您的目录(至少暂时)更改为可写入世界(777)通常可以解决您的导出问题。