我有一个名为forum.sql的大型mySQL数据库转储文件。我只想恢复一个表,但是当我恢复整个数据库时,导入"post“表需要很长时间。
是否有任何选项可以跳过"post“表来恢复此数据库?
发布于 2014-02-13 20:24:33
如果要从转储文件恢复,只需写下行号,就可以轻松地构建一个新的转储文件,而不需要这个表。
起始线
> 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.sql20来自减法63 - 43
不干净,但很有用
发布于 2011-04-26 00:48:32
我觉得你做不到。但您可以在必要时使用--tables myqsldump选项单独转储表。因此,您可以为post表生成一个转储,并为其余表生成另一个转储。
示例:
mysqldump -u USERNAME -pPASSWORD --tables TABLE_NAME database_name > TABLE_NAME.sql发布于 2018-03-17 03:27:51
恢复单个表
首先,使用零插入执行恢复:
cat dump.sql | grep -v '^INSERT INTO' | mysql -u <user> -p<pw> <dbname>在这里使用grep -v将排除任何与模式匹配的语句。本例中的模式使用^在行首进行匹配。结果应该是一个恢复后的模式,其中没有数据。
接下来,仅恢复所需的INSERT语句:
cat dump.sql | grep '^INSERT INTO \\\`<table>\\\`' | mysql -u <user> -p<pw> <dbname>这将仅恢复名为<table>的表的数据。注意三个反斜杠。你需要一个反斜杠来转义一个反斜杠,然后你需要用另外两个反斜杠来转义反斜杠。
恢复除一个表之外的所有表
当我想要恢复整个数据库,但从一两个表中排除数据时,我经常使用的另一种技术是...在推送到数据库之前,您可以通过筛选器将转储传递出去,从而过滤掉任何不需要的INSERT语句。下面是一个使用grep作为过滤器的示例:
nohup sh -c "cat dump.sql | grep -v 'INSERT INTO \\\`<table>\\\`' | mysql -u <user> -p<pw> <dbname>" &即使您从nohup注销,shell命令也会使sh命令保持运行。如果您有一个很大的转储文件,需要相当长的时间才能恢复,那么这会非常方便。
grep的-v标志将排除任何与该模式匹配的内容。
末尾的&会将命令发送到后台。
https://stackoverflow.com/questions/5780575
复制相似问题