mer*_*tio 11
当我需要从sql转储中提取单个表时,我使用grep,head和tail的组合.
例如:
grep -n "CREATE TABLE" dump.sql
Run Code Online (Sandbox Code Playgroud)
然后,它会为您提供每个的行号,因此,如果您的表位于第200行,而后一个位于第269行,我会:
head -n 268 dump.sql > tophalf.sql
tail -n 69 tophalf.sql > yourtable.sql
Run Code Online (Sandbox Code Playgroud)
我想你可以扩展这些原则来敲除一个脚本,将每个表分成一个文件.
有人想在这里做吗?
另一点可能有助于启动bash循环:
grep -n "CREATE TABLE " dump.sql | tr ':`(' ' ' | awk '{print $1, $4}'
Run Code Online (Sandbox Code Playgroud)
这给你一个很好的行号和表名列表,如:
200 FooTable
269 BarTable
Run Code Online (Sandbox Code Playgroud)
mysqldump -T
如果可以的话,为自己省去很多麻烦和使用.
从文档:
--tab = path,-T path
生成制表符分隔的数据文件.对于每个转储表,mysqldump创建一个tbl_name.sql文件,其中包含创建表的CREATE TABLE语句和包含其数据的tbl_name.txt文件.选项值是写入文件的目录.
默认情况下,.txt数据文件使用列值之间的制表符和每行末尾的换行符进行格式化.可以使用--fields-xxx和--lines-terminated-by选项明确指定格式.
注意
仅当mysqldump与mysqld服务器在同一台机器上运行时,才应使用此选项.您必须具有FILE权限,并且服务器必须具有在您指定的目录中写入文件的权限.