【问题标题】:How extract single table data from fullbackup?如何从完整备份中提取单表数据?
【发布时间】:2013-02-01 06:10:58
【问题描述】:

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

在恢复表时遇到问题。你得到的错误应该是“Got error -1 from storage engine”

我该怎么做?

请帮帮我。

【问题讨论】:

  • 我假设您没有其他可用的 TB 来提取和提取它?

标签: mysql linux unix mysqldump percona


【解决方案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*

【讨论】:

  • 我还没有尝试过使用这个脚本来处理 1TB 大小的转储。您可能只想使用 csplit 而忘记附加/前置头部和脚部。另请查看博客文章Splitting a database dump
  • 我只想要我的完整备份中的一个表(key_tansactional 表)。我该怎么做。请在这里帮助我。
  • 您可以使用 cplit 使用 %regex% 而不是 /regex/ 来做到这一点。我会去找你(并将其添加到我的要点中)。
  • @mithunakous K 检查是否添加了该功能。
  • 谢谢它对正常备份很有用。但我的问题是 percona XTRA-BACKUP 。它有像 (.frm,.ibd) 格式这样的文件。所以我如何从 percona 获取单表数据-xtrabakup 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2016-05-22
相关资源
最近更新 更多