繁体   English   中英

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

[英]Import Multiple .sql dump files into mysql database from shell

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

例如

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

实际上有很多。

我需要创建一个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

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

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

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

唯一的技巧是使用bash子字符串替换.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文件上运行,但它比先解压缩要快得多,然后在未压缩的文件上运行它。

我说很大 ,但我想一切都是相对的。 花了大约6-8分钟为我分割一个2000个表,200MB的转储文件。

我前段时间创建了一个脚本来完成这个,我称之为(完全没有创造性地)“myload”。 它将SQL文件加载到MySQL中。

这是在GitHub上

这很简单直接; 允许您指定mysql连接参数,并将动态解压缩gzip的sql文件。 它假定每个数据库都有一个文件,文件名的基础是所需的数据库名称。

所以:

myload foo.sql bar.sql.gz

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

对于该过程的另一方,我编写了这个脚本(mydumpall) ,它为每个数据库(或者通过名称或正则表达式指定的某个子集创建相应的sql(或sql.gz)文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM