如何从MySQL全备DUMP文件中提取表的备份

时间:2019-05-19 01:26:03  来源:igfitidea点击:

Mysqldump是MySQL/MariaDB提供的备份数据库和表的工具。
一般来说,我们会定期清空数据库并保存它。
但有时我们需要从备份中恢复单个或2-3个表。
然后是如何从完整备份文件恢复特定表的问题。
本文将了解如何从完整的数据库备份文件中提取表备份。
此外,我们可以提取所有表备份到每个表的单独文件中。

第1步-下载MySQL转储分割脚本

将一个完整的mysqldump数据库备份文件分割为单独的表特定文件备份。
创建一个名为 splitDB.sh的文件。

内容如下:

#!/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 
cd /opt/splitdb
chmod +x splitDB.sh
./splitDB.sh mydb.sql   

DUMP_FILE [TABLE]" exit fi if [ $# -ge 2 ] ; then csplit -s -ftable "/-- Table structure for table/" "%-- Table structure for table ``%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1" else csplit -s -ftable "/-- 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*

步骤2 -从DUMP中提取所有表

对于本例,我有一个名为 mydb.sql的dump转储文件。
,我希望将其分割为每个表的小备份。
为此,我创建了一个新目录 /opt/splitdb,并将上面的脚本复制到这个目录中。
现在使用下面的命令提取各个备份文件中的所有表。

cd /opt/splitdb
chmod +x splitDB.sh
sh splitDB.sh mydb.sql my_tbl1
sh splitDB.sh mydb.sql my_tbl2

步骤3 -从dump中提取单个表

如果只想提取一个表,可以使用如下命令。
例如,我想只分割名为 my_tbl1my_tbl2的表。
它将在当前目录中提取表 my_tbl1.sqlmy_tbl2.sql的备份。

##代码##