恢复mysql数据库时如何跳过表?

| 我有一个名为Forum.sql的大型mySQL数据库转储。我只想还原一个表,但是当还原完整数据库时,导入“ post”表需要很长时间。 是否可以跳过\“ post \”表来还原此数据库?     
已邀请:
如果要从转储文件还原,则只需写下行号,即可轻松构建不带此表的新转储文件。 首行
> grep dumpfile.sql -ne \"Dumping data for table \\`avoid_tablename\\`\" -m 1
43:-- Dumping data for table `avoid_tablename`
总行
> wc -l dumpfile.sql
63 dumpfile.sql
制作一个新文件
> head -n 43 dumpfile.sql > dumpfile-lite.sql
> tail -n 20 dumpfile.sql >> dumpfile-lile.sql
20来自减法63-43 不干净,但有用     
我认为您无法做到。但是您可以根据需要使用
--tables
myqsldump选项单独转储表。因此,您可以为
post
表生成一个转储,并为其余表生成另一个转储。 例:
mysqldump -u USERNAME -pPASSWORD --tables TABLE_NAME database_name > TABLE_NAME.sql
    
或者,使用
sed
fulldump.sql
中提取需要还原的表:
sed -n -e \'/CREATE TABLE.*tableName1/,/CREATE TABLE/p\' fulldump.sql > temp.sql
sed -n -e \'/CREATE TABLE.*tableName2/,/CREATE TABLE/p\' fulldump.sql >> temp.sql
...等等 现在从
temp.sql
恢复。     
据我所知,没有。 您必须从转储文件中手动编辑不需要的表的
CREATE
INSERT
语句。     
您可以更改转储语句,使其使用忽略表? http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_ignore-table     
恢复单个表 首先,使用零插入进行还原:
cat dump.sql | grep -v \'^INSERT INTO\' | mysql -u <user> -p<pw> <dbname>
在此处使用“ 13”将排除所有与模式匹配的语句。在这种情况下,模式使用ѭ14来匹配行首。结果应该是具有零数据的已还原架构。 接下来,仅还原所需的
INSERT
语句:
cat dump.sql | grep \'^INSERT INTO \\\\\\`<table>\\\\\\`\' | mysql -u <user> -p<pw> <dbname>
这将仅还原名为“ 17”的表的数据。请注意三反斜杠。您需要使用反斜杠来避免反引号,然后再使用2个反斜杠来避免反斜杠。 恢复除一张桌子外的所有东西 当我想还原整个数据库但不从一两个表中删除数据时,我一直使用的另一种技术是...您可以通过在转储到数据库之前将转储通过过滤器来过滤掉所有不需要的
INSERT
语句。这是使用“ 19”作为过滤器的示例:
nohup sh -c \"cat dump.sql | grep -v \'INSERT INTO \\\\\\`<table>\\\\\\`\' | mysql -u <user> -p<pw> <dbname>\" &
you21ѭ命令将使
sh
命令保持运行,即使您退出Shell也是如此。如果您有一个很大的转储文件,将需要相当长的时间来还原,那将非常方便。
grep
-v
标志将排除与模式匹配的任何内容。 最后的“ 25”将命令发送到后台。     

要回复问题请先登录注册