将mysql数据库从命令行转储到纯文本(CSV)备份

我想避免mysqldump,因为输出的forms只是方便mysql读取。 CSV似乎更普遍(每个表格一个文件是好的)。 但是,如果有mysqldump的优点,我全部耳朵。 另外,我想要的东西,我可以从命令行(Linux)运行。 如果这是一个MySQL脚本,指示如何做出这样的事情将是有益的。

如果你可以一次处理表,并且你的数据不是二进制的,那么使用mysql命令的-B选项。 有了这个选项,它会生成TSV(制表符分隔)文件,可以很容易地导入到Excel等等:

 % echo 'SELECT * FROM table' | mysql -B -uxxx -pyyy database 

或者,如果您可以直接访问服务器的文件系统,请使用SELECT INTO OUTFILE ,它可以生成真正的CSV文件:

 SELECT * INTO OUTFILE 'table.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table 

在MySQL本身,你可以指定CSV输出,如:

 SELECT order_id,product_name,qty FROM orders INTO OUTFILE '/tmp/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' 

http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/

您可以使用mysqldump的–tab选项一次性转储整个数据库。 您提供了一个目录path,它使用CREATE TABLE DROP IF EXISTS语法创build一个.sql文件,并使用tab分隔的内容创build一个.txt文件。 要创build逗号分隔的文件,您可以使用以下命令:

 mysqldump --password --fields-optionally-enclosed-by='"' --fields-terminated-by=',' --tab /tmp/path_to_dump/ database_name 

该path需要由mysql用户和运行该命令的用户写入,为简单起见,我build议使用chmod 777 /tmp/path_to_dump/ first。

select into outfile选项对我来说不起作用,但是下面通过SEDpipe道制表符分隔的文件的迂回方式确实如此:

 mysql -uusername -ppassword -e "SELECT * from tablename" dbname | sed 's/\t/","/g;s/^/"/;s/$/"/' > /path/to/file/filename.csv 

如果您确实需要“备份”,那么您还需要数据库架构,如表定义,视图定义,存储过程等。 数据库的备份不仅仅是数据。

用于备份的mysqldump格式的值特别是使用它来恢复mysql数据库是非常简单的。 一个不易恢复的备份远没有那么有用。 如果你正在寻找一种方法来可靠地备份MySQL数据,所以你可以恢复到MySQL服务器,那么我认为你应该坚持使用mysqldump工具。

Mysql是免费的,可以运行在许多不同的平台上。 build立一个我可以恢复的新的mysql服务器很简单。 我一点也不担心无法安装mysql,所以我可以做一个恢复。

我会更担心基于脆弱的格式,如csv / tsv失败的自定义备份/恢复。 您确定数据中的所有引号,逗号或制表符都能正确转义,然后通过还原工具正确parsing吗?

如果你正在寻找一种方法来提取数据,然后在其他答案中看到几个。

这是最简单的命令

 mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' | sed 's/\t/,/g' > output.csv 

如果列值中有一个逗号,那么我们可以使用以下命令生成.tsv而不是.csv

 mysql -h<hostname> -u<username> -p<password> -e 'select * from databaseName.tableNaame' > output.csv 

检查mk-parallel-dump ,这是maatkit工具套件的一部分 。 这可以使用–csv选项转储逗号分隔的文件。

这可以在不指定单个表的情况下完成整个数据库,并且可以在备份集表中指定一组表。

请注意,它也将表定义,视图和触发器转储到单独的文件中。 除了以更普遍可访问的forms提供完整的备份之外,还可以通过mk-parallel-restore立即恢复

你可以使用下面的脚本来获得输出到CSV文件。 每个表头有一个文件。

 for tn in `mysql --batch --skip-page --skip-column-name --raw -uuser -ppassword -e"show tables from mydb"` do mysql -uuser -ppassword mydb -B -e "select * from \`$tn\`;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > $tn.csv done 

用户是你的用户名,密码是密码,如果你不想继续input每个表的密码,并且mydb是数据库名称。

脚本解释:sed中的第一个expression式将用“,”replace标签,所以你有用双引号括起来的字段,并用逗号分隔。 第二个在开头插入双引号,第三个在最后插入双引号。 最后一个照顾\ n。

两行PowerShell的答案:

 # Store in variable $Global:csv = (mysql -uroot -p -hlocalhost -Ddatabase_name -B -e "SELECT * FROM some_table") ` | ConvertFrom-Csv -Delimiter "`t" # Out to csv $Global:csv | Export-Csv "C:\temp\file.csv" -NoTypeInformation 

繁荣巴塔潮

-D =数据库的名称

-e =查询

-B =制表符分隔