【发布时间】:2012-07-13 16:07:50
【问题描述】:
我已经使用--tab 选项转储了一个 MySQL 数据库,该选项为每个表创建 2 个文件(一个带有 create table 的 SQL 文件和一个带有数据的制表符分隔值文件)。
有没有一种简单的方法可以将此目录文件导入 MySQL 服务器?我在mysqlimport 中找不到选项。
【问题讨论】:
标签: mysql mysqldump mysqlimport
我已经使用--tab 选项转储了一个 MySQL 数据库,该选项为每个表创建 2 个文件(一个带有 create table 的 SQL 文件和一个带有数据的制表符分隔值文件)。
有没有一种简单的方法可以将此目录文件导入 MySQL 服务器?我在mysqlimport 中找不到选项。
【问题讨论】:
标签: mysql mysqldump mysqlimport
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
【讨论】:
您可以通过多种方式做到这一点 - 最直接的是
mysql db < sql_structure_file
这将创建表格。然后做(从mysql客户端)
LOAD DATA LOCAL INFILE tab_delimited_file INTO TABLE
(带有适当的名称、分隔符等)
【讨论】:
我正在使用这个 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';
【讨论】: