我有一个mysqldump备份我的mysql数据库,包括我们所有的表,这是大约440兆。我只想从mysqldump中恢复其中一个表的内容。这可能吗?从理论上讲,我可以只删除重建我想要的表的部分,但我甚至不知道如何有效地编辑这种大小的文本文档。
当前回答
SQL块被“表my_table的表结构”和“转储表my_table的数据”阻塞。
您可以如下所示使用Windows命令行获取各个部分的行号。根据需要调整搜索字符串。
查找/n "for table ' " sql.txt
将返回以下内容:
---------- SQL.TXT
[4384]——my_table的表结构
[4500]——转储表my_table的数据
[4514]——表some_other_table的表结构
... 等。
这就得到了你需要的行号……现在,如果我知道如何使用它们……调查。
其他回答
不管怎样,任何这样做的进程都必须遍历转储的整个文本,并以某种方式解析它。我只要grep
INSERT INTO `the_table_i_want`
并将输出导入mysql。看一下之前转储中的第一个表,以确保您以正确的方式获取INSERT。
编辑:好的,这次格式正确。
我使用了uloBasEI的sed命令的修改版本。它包括前面的DROP命令,读取直到mysql完成转储数据到你的表(解锁)。为我工作(重新)导入wp_users到一堆Wordpress网站。
sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql
这能更容易做到吗?我是这样做的:
创建一个临时数据库(例如restore):
Mysqladmin -u root -p create restore
恢复临时数据库中的完整转储:
Mysql -u root -p——one-database restore < fulldump.sql
转储需要恢复的表:
Mysqldump恢复mytable
在另一个数据库中导入表:
Mysql -u root -p database < mytable.sql
这也可能有所帮助。
# mysqldump -u root -p database0 > /tmp/database0.sql
# mysql -u root -p -e 'create database database0_bkp'
# mysql -u root -p database0_bkp < /tmp/database0.sql
# mysql -u root -p database0 -e 'insert into database0.table_you_want select * from database0_bkp.table_you_want'
这个工具可能就是你想要的:tbdba-restore-mysqldump.pl
https://github.com/orczhou/dba-tool/blob/master/tbdba-restore-mysqldump.pl
从数据库转储文件中恢复一个表:
Tbdba-restore-mysqldump.pl -t yourtable -s yourdb -f backup.sql
推荐文章
- 我可以从一个完整的mysql mysqldump文件恢复一个表吗?
- 计数在VARCHAR字段中字符串的出现次数?
- 修改一个MySQL列为AUTO_INCREMENT
- 在ROR迁移期间,将列类型从Date更改为DateTime
- 如何删除所有MySQL表从命令行没有DROP数据库权限?
- 从主机连接到docker容器中的mysql
- 如果任何字段包含NULL, MySQL CONCAT将返回NULL
- MySQL中的字符串连接
- Laravel未知列'updated_at'
- MySQL更新内部连接表查询
- 根据查询结果设置用户变量
- 不能删除外键约束中需要的索引
- MySQL现在()+1天
- MySQL索引的最佳实践是什么?
- 如何在Mac OS安装时停止MySQL ?