轻松导入MySQL --tab转储

时间:2012-07-13 16:07:50

标签: mysql mysqldump mysqlimport

我已经使用--tab选项转储了一个MySQL数据库,该数据库每个表创建2个文件(带有create table的SQL文件和带有数据的制表符分隔值文件)。

有没有一种简单的方法可以将这个文件目录导回MySQL服务器?我在mysqlimport中找不到该选项。

3 个答案:

答案 0 :(得分:3)

for i in `ls *.sql`; do 
  sql_file=$i; 
  table_name=`echo $sql_file | sed "s/.sql$//"`
  mysql -u root database_name < $sql_file
  echo "LOAD DATA LOCAL INFILE '$table_name.txt' INTO TABLE $table_name" | mysql -u root database_name
done

答案 1 :(得分:1)

你可以通过以下几种方式做到这一点 - 最直接的是

mysql db < sql_structure_file

这会创建表格。然后做(从mysql客户端)

LOAD DATA LOCAL INFILE tab_delimited_file INTO TABLE 

(使用适当的名称,分隔符等)

答案 2 :(得分:1)

我正在使用此bash脚本,该脚本首先导入所有sql文件以构建表,然后导入txt文件。使用后台进程并行加载数据-基本上模拟mysqlimport中的多线程选项。用法是这样的:

./import_table.sh database_name /path/to/dump/files

脚本:

#!/bin/bash

DIR=$(echo $2 | sed 's/\/$//')

function import_sql() {
    mysql $1 < $2;
    echo "mysql $1 < '$2'";
}

function import_txt() {
    mysqlimport --silent $1 $2;
    echo "mysqlimport --silent $1 '$2'";
}

for filename in $DIR/*.sql; do
    [ -e "$filename" ] || continue
    import_sql $1 $filename &
done
wait
echo 'ALL SQL IMPORTED';

for filename in $DIR/*.txt; do
   [ -e "$filename" ] || continue
   import_txt $1 $filename &
done
wait
echo 'ALL TXT IMPORTED';