gpt4 book ai didi

mysql - 在 Windows 上运行 .sh 文件以从 Mysql .sql 文件恢复单个表

转载 作者:行者123 更新时间:2023-11-30 01:06:04 25 4
gpt4 key购买 nike

我有 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 上运行这个程序的 hack,我应该切换到 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}"

最佳答案

尝试 UltraEdit 程序:它打开文件而不缓冲整个内容。我相信您可以使用评估版 30 天。

奇怪的是,这是我所知道的唯一不缓冲整个文件的程序(Windows/Linux)。它在很多场合帮助了我。

关于mysql - 在 Windows 上运行 .sh 文件以从 Mysql .sql 文件恢复单个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com