将多个.sql转储文件从shell导入到mysql数据库中

我有一堆的.sql文件的目录,我的服务器上的每个数据库的mysql转储。

例如

 database1-2011-01-15.sql database2-2011-01-15.sql ... 

实际上有相当多的

我需要创build一个shell脚本或单行可能会导入每个数据库。

我在Linux Debian机器上运行。

我认为有一些方法可以将ls的结果转化为一些find命令或其他东西。

任何帮助和教育是非常感激。

编辑

所以最终我想自动将一个文件一次导入到数据库中。

例如,如果我手动在一个它会这样做:

 mysql -u root -ppassword < database1-2011-01-15.sql 

cat *.sql | mysql cat *.sql | mysql ? 你需要以任何特定的顺序吗?

如果你有太多的处理方式,那就试试这样的:

 find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch 

这也解决了通过pipe道传递脚本input的一些问题,尽pipe在Linux下你不应该有任何stream水线处理的问题。 这种方法的mysql是, mysql实用程序读取每个文件,而不是从stdin读取。

单行阅读所有.sql文件并导入它们:

 for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done 

唯一的技巧是bash子串replace去掉.sql来获取数据库名称。

http://kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-shell-script中有一个非常棒的小脚本,它将获取一个;巨大的 mysqldump文件并将其分割成单个文件每张桌子。 然后你可以运行这个非常简单的脚本从这些文件中加载数据库:

 for i in *.sql do echo "file=$i" mysql -u admin_privileged_user --password=whatever your_database_here < $i done 

mydumpsplitter甚至可以在.gz文件上工作,但是比起使用gunzipping慢得多,然后在未压缩的文件上运行。

我说的很大 ,但是我猜所有事都是相对的。 花了大约6-8分钟为我分配一个2000表,200MB的转储文件。

前一段时间我创build了一个脚本来完成这个工作,我完全自主地调用了“myload”。 它将SQL文件加载到MySQL中。

这是在GitHub上

简单直接, 允许你指定mysql的连接参数,并且会立即解压缩gzip的sql文件。 它假定每个数据库都有一个文件,文件名的底部是所需的数据库名称。

所以:

 myload foo.sql bar.sql.gz 

将创build(如果不存在)名为“foo”和“bar”的数据库,并将sql文件导入到每个。

对于进程的另一端,我编写了这个脚本(mydumpall) ,它为每个数据库(或由名称或正则expression式指定的一些子集)创build对应的sql(或sql.gz)文件。

我不记得mysqldump的语法,但它会是这样的

  find . -name '*.sql'|xargs mysql ...