Der*_*gan 39 mysql linux shell
我有一个目录,其中有一堆.sql文件,我的服务器上的每个数据库都有mysql转储.
例如
database1-2011-01-15.sql
database2-2011-01-15.sql
...
Run Code Online (Sandbox Code Playgroud)
实际上有很多.
我需要创建一个shell脚本或单行,可能会导入每个数据库.
我在Linux Debian机器上运行.
我认为有一些方法可以将ls的结果输入到某些find命令或其他东西中.
任何帮助和教育都非常感谢.
编辑
所以最终我想自动将一个文件一次导入数据库.
例如,如果我在一个上手动完成它将是:
mysql -u root -ppassword < database1-2011-01-15.sql
Run Code Online (Sandbox Code Playgroud)
D.S*_*ley 75
cat *.sql | mysql?你是否需要任何特定的订单?
如果你有太多的方法来处理这种方式,那么尝试以下方法:
find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch
Run Code Online (Sandbox Code Playgroud)
这也解决了通过管道传递脚本输入的一些问题,尽管在Linux下管道处理不应该有任何问题.这种方法的好处是mysql实用程序读取每个文件而不是读取它stdin.
Ron*_*nie 17
单行读取所有.sql文件并导入它们:
for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done
Run Code Online (Sandbox Code Playgroud)
唯一的技巧是使用bash子字符串替换来去除.sql获取数据库名称.
小智 9
在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
Run Code Online (Sandbox Code Playgroud)
mydumpsplitter甚至可以在.gz文件上运行,但它比先解压缩要快得多,然后在未压缩的文件上运行它.
我说很大,但我想一切都是相对的.花了大约6-8分钟为我分割一个2000个表,200MB的转储文件.