我有一个 mysql 数据库的备份,我只需要匆忙中的 1 个表。
它的 4gb 并且我试图用 VIM 之类的程序打开它,但它并不顺利,猜它太大了。即使尝试从如此多的文本中提取一个表也很困难。
所以我遇到了这个: http: //kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-shell-script
其中解释了如何使用 shell 脚本进行操作。我发现http://cygwin.com可以在 Windows 中运行 shell 脚本,我正在运行 Windows 8.1。
我不太清楚步骤是什么:
所以我运行 cwygin 并进入 shell 脚本窗口,我将我的数据库文件和 mysqldumpsplitter.sh 放在我创建的 C:\cygwin64\usr\mysql 文件夹中。
然后我转到 /usr/mysql 并运行它:
sh mysqldumpsplitter.sh mydatabase.sql tbl_activity
tbl_activity 是我试图访问的表。mydatabase.sql 是 sql 备份
但是当我跑步时,我得到了
mysqldumpsplitter.sh:第 5 行:tput:找不到命令 mysqldumpsplitter.sh:第 6 行:tput:找不到命令 mysqldumpsplitter.sh:第 7 行:tput:找不到命令 mysqldumpsplitter.sh:第 8 行:tput:找不到命令 mysqldumpsplitter。 sh:第 9 行:tput:找不到命令 mysqldumpsplitter.sh:第 10 行:tput:找不到命令 mysqldumpsplitter.sh:第 11 行:tput:找不到命令 mysqldumpsplitter.sh:第 12 行:tput:找不到命令 mysqldumpsplitter.sh:第 13 行:tput:找不到命令 mysqldumpsplitter.sh:第 14 行:tput:找不到命令 0 从 mydatabase.sql 中提取的表。
第 5=14 行在下面
txtund=$(tput sgr 0 1) # Underline
txtbld=$(tput bold) # Bold
txtred=$(tput setaf 1) # Red
txtgrn=$(tput setaf 2) # Green
txtylw=$(tput setaf 3) # Yellow
txtblu=$(tput setaf 4) # Blue
txtpur=$(tput setaf 5) # Purple
txtcyn=$(tput setaf 6) # Cyan
txtwht=$(tput setaf 7) # White
txtrst=$(tput sgr0) # Text reset
虽然我可能会访问 ubuntu 机器并运行它(我认为这会在那里更好地工作),但我必须等待数小时才能上传 4gb .sql 转储,我希望能快速完成此操作。它只是一个在 Windows 上运行它的黑客,我应该切换到 ubuntu 来运行它吗?
完整的 .sh 文件在这里,因为它很小
#!/bin/sh
# http://kedar.nitty-witty.com
#SPLIT DUMP FILE INTO INDIVIDUAL TABLE DUMPS
# Text color variables
txtund=$(tput sgr 0 1) # Underline
txtbld=$(tput bold) # Bold
txtred=$(tput setaf 1) # Red
txtgrn=$(tput setaf 2) # Green
txtylw=$(tput setaf 3) # Yellow
txtblu=$(tput setaf 4) # Blue
txtpur=$(tput setaf 5) # Purple
txtcyn=$(tput setaf 6) # Cyan
txtwht=$(tput setaf 7) # White
txtrst=$(tput sgr0) # Text reset
TARGET_DIR="."
DUMP_FILE=$1
TABLE_COUNT=0
if [ $# = 0 ]; then
echo "${txtbld}${txtred}Usage: sh MyDumpSplitter.sh DUMP-FILE-NAME${txtrst} -- Extract all tables as a separate file from dump."
echo "${txtbld}${txtred} sh MyDumpSplitter.sh DUMP-FILE-NAME TABLE-NAME ${txtrst} -- Extract single table from dump."
echo "${txtbld}${txtred} sh MyDumpSplitter.sh DUMP-FILE-NAME -S TABLE-NAME-REGEXP ${txtrst} -- Extract tables from dump for specified regular expression."
exit;
elif [ $# = 1 ]; then
#Loop for each tablename found in provided dumpfile
for tablename in $(grep "Table structure for table " $1 | awk -F"\`" {'print $2'})
do
#Extract table specific dump to tablename.sql
sed -n "/^-- Table structure for table \`$tablename\`/,/^-- Table structure for table/p" $1 > $TARGET_DIR/$tablename.sql
TABLE_COUNT=$((TABLE_COUNT+1))
done;
elif [ $# = 2 ]; then
for tablename in $(grep -E "Table structure for table \`$2\`" $1| awk -F"\`" {'print $2'})
do
echo "Extracting $tablename..."
#Extract table specific dump to tablename.sql
sed -n "/^-- Table structure for table \`$tablename\`/,/^-- Table structure for table/p" $1 > $TARGET_DIR/$tablename.sql
TABLE_COUNT=$((TABLE_COUNT+1))
done;
elif [ $# = 3 ]; then
if [ $2 = "-S" ]; then
for tablename in $(grep -E "Table structure for table \`$3" $1| awk -F"\`" {'print $2'})
do
echo "Extracting $tablename..."
#Extract table specific dump to tablename.sql
sed -n "/^-- Table structure for table \`$tablename\`/,/^-- Table structure for table/p" $1 > $TARGET_DIR/$tablename.sql
TABLE_COUNT=$((TABLE_COUNT+1))
done;
else
echo "${txtbld}${txtred} Please provide proper parameters. ${txtrst}";
fi
fi
#Summary
echo "${txtbld}$TABLE_COUNT Table extracted from $DUMP_FILE at $TARGET_DIR${txtrst}"