将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
=制表符分隔