我有很多数据库。所有这些都包含一个表。表的名称未知。我需要的是将所有表放入一个大数据库中。
因此,如果我有3个带有table1,table2和table3的文件,我需要一个包含table1,table2和table3的文件。这些表本身不能合并到一起,我只需要它们在同一个文件中。
由于我不知道有多少个文件,我需要使用bash并解析一个文件列表。
非常感谢!
答案 0 :(得分:0)
我正在粘贴这样做的逻辑(可能必须根据您的要求进行修改)
while read line
do
count=0
while read fine
do
if [ $count -gt 1 ] #as first line is tablename heading by sql
then
mysql -uuser -ppasword -s -e 'CREATE TABLE newdb.$fine LIKE $line.$fine;'
mysql -uuser -ppasword -s -e 'INSERT INTO newdb.$fine SELECT * FROM $line.$fine;;'
done < $(mysql -uuser -ppassword -s -D$line -e 'show databases')
fi
count=$(($count+1));
done < $(mysql -uuser -ppassword -s -e `show databases`)
这适用于所有db的
如果将所有数据库名称保留在文件中,则可以将该文件名作为外部while循环的输入
一对一从mysql提示复制就像这样
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;
外部while循环给出数据库名称,而while while循环给出表名。
如果您保留包含所需数据库名称的文件,则
while read line
do
count=0
while read fine
do
if [ $count -gt 1 ] #as first line is tablename heading by sql
then
mysql -uuser -ppasword -s -e 'CREATE TABLE newdb.$fine LIKE $line.$fine;'
mysql -uuser -ppasword -s -e 'INSERT INTO newdb.$fine SELECT * FROM $line.$fine;;'
done < $(mysql -uuser -ppassword -s -D$line -e 'show databases')
fi
count=$(($count+1));
done < dbnames.txt
答案 1 :(得分:0)
您只需使用数据库的转储工具即可。使用sqlite3之类的东西:
sqlite3 mergeDB.sqlite3 < <( sqlite3 db1.sqlite3 <<< ".dump" && sqlite3 db2.sqlite3 <<< ".dump" && sqlite3 db3.sqlite3 <<< ".dump" )