小智 272
您可以尝试使用sed以仅提取所需的表.
假设您的表名是mytable,文件mysql.dump是包含您的巨大转储的文件:
$ sed -n -e '/CREATE TABLE.*`mytable`/,/CREATE TABLE/p' mysql.dump > mytable.dump
Run Code Online (Sandbox Code Playgroud)
这将在文件中复制mytable.dump位于CREATE TABLE mytable下CREATE TABLE一个表和下一个表之间的文件.
然后,您可以调整mytable.dump包含表结构的文件mytable和数据(列表INSERT).
bry*_*ryn 111
我使用了uloBasEI的sed命令的修改版本.它包括前面的DROP命令,并读取直到mysql完成将数据转储到您的表(UNLOCK).为我工作(重新)将wp_users导入到一堆Wordpress网站.
sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql
Run Code Online (Sandbox Code Playgroud)
小智 47
这可以更轻松地完成吗?我就这样做了:
创建临时数据库(例如恢复):
mysqladmin -u root -p create restore
恢复临时数据库中的完整转储:
mysql -u root -p restore <fulldump.sql
转储要恢复的表:
mysqldump恢复mytable> mytable.sql
在另一个数据库中导入表:
mysql -u root -p database <mytable.sql
小智 11
一个简单的解决方案是简单地创建一个只想要单独恢复的表的转储.您可以使用mysqldump命令使用以下语法执行此操作:
mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql
Run Code Online (Sandbox Code Playgroud)
然后像往常一样导入它,它只会导入转储的表.
无论如何,执行该操作的任何进程都必须遍历转储的整个文本并以某种方式解析它.我只是为了
INSERT INTO `the_table_i_want`
Run Code Online (Sandbox Code Playgroud)
并将输出传递给mysql.看一下转储中的第一个表,确保你以正确的方式获得INSERT.
编辑:好的,这次格式正确.
小智 7
您应该尝试使用@bryn命令,但使用`delimiter,否则您还将提取具有前缀或后缀的表,这是我通常所做的:
sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' dump.sql > mytable.sql
Run Code Online (Sandbox Code Playgroud)
同样出于测试目的,您可能希望在导入之前更改表名:
sed -n -e 's/`mytable`/`mytable_restored`/g' mytable.sql > mytable_restored.sql
Run Code Online (Sandbox Code Playgroud)
要导入,您可以使用mysql命令:
mysql -u root -p'password' mydatabase < mytable_restore.sql
Run Code Online (Sandbox Code Playgroud)
小智 6
备用
$ mysqldump -A | gzip > mysqldump-A.gz
Run Code Online (Sandbox Code Playgroud)恢复单个表
$ mysql -e "truncate TABLE_NAME" DB_NAME
$ zgrep ^"INSERT INTO \`TABLE_NAME" mysqldump-A.gz | mysql DB_NAME
Run Code Online (Sandbox Code Playgroud)