[英]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下管道处理不应该有任何问题。 这种方法的mysql
是mysql
实用程序读入每个文件而不是从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中。
这很简单直接; 允许您指定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.