如何从fullbackup中提取单个表数据?

时间:2013-02-01 06:10:58

标签: mysql linux unix mysqldump percona

我们有一个昨天的“完整备份文件(daily_3101013.sql)”它的大小是 1TB 。我们使用 Percona-XTRA BACKUP 进行完整的bakup。所以现在我想从我的完整备份文件(daily_3101013.sql)中获取一个表备份/数据用于恢复/导入目的。

遇到恢复表的问题。你得到的错误应该是“从存储引擎得到错误-1”

我该怎么做?

请在这里帮助我。

1 个答案:

答案 0 :(得分:1)

我已经创建了一个bash脚本,可以将完整的数据库转储吐出到每个表的一个SQL文件中。

结帐并下载要点Split MySQL dump SQL file into one file per table

提取单个表格mysql_splitdump.sh daily_3101013.sql mytable

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump
####

if [ $# -lt 1 ] ; then
  echo "USAGE $0 DUMP_FILE [TABLE]"
  exit
fi

if [ $# -ge 2 ] ; then
  csplit -s -ftable $1 "/-- Table structure for table/" "%-- Table structure for table \`$2\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
else
  csplit -s -ftable $1 "/-- Table structure for table/" {*}
fi

[ $? -eq 0 ] || exit

mv table00 head

FILE=`ls -1 table* | tail -n 1`
if [ $# -ge 2 ] ; then
  mv $FILE foot
else
  csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
  mv ${FILE}1 foot
fi

for FILE in `ls -1 table*`; do
  NAME=`head -n1 $FILE | cut -d$'\x60' -f2`
  cat head $FILE foot > "$NAME.sql"
done

rm head foot table*