您好我正在尝试创建一个备份某些表的脚本。表的数量非常大,我不想复制粘贴命令。这是我的剧本。
#! /bin/bash
#The following commands exports/dump tables
# Usage: sh export-script DBName username password
#
#
#
export TABLES="A B C D...Z"
#
mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${TABLES} > dump.YYYY-MM-DD.sql
但是我收到以下错误:
" ysqldump:无法找到表格:" Z
我是脚本新手,令人惊讶的是,我无法找到解决这个简单问题的方法。 SOS。
答案 0 :(得分:2)
在这里,我假设您将export TABLES="A B C D...Z"
替换为不包含省略号的表列表。很抱歉,不得不问,因为有些人希望bash
的行为与其他脚本环境一样,可能会将D...Z
扩展为D E F ... etc
,但事实并非如此。
尝试双引${TABLES}
参数,如下所示:
mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 "${TABLES}" > dump.YYYY-MM-DD.sql
这会将所有表作为单个参数传递。如果这不起作用,我建议循环:
for table in ${TABLES} ; do
mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${table} > dump_${table}.YYYY-MM-DD.sql
done
请注意这是如何为每个表创建单独的dump_
SQL文件。如果所有表都需要一个文件,请使用:
/bin/rm -f dump.YYYY-MM-DD.sql
for table in ${TABLES} ; do
mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${table} >> dump.YYYY-MM-DD.sql
done
我刚注意到评论建议您使用sh ...
。不要与sh
一起运行。使用bash export-script DBName username password
运行,或者只使用export-script DBName username password
运行,让进程shell通过顶部的#!
行选择运行脚本的shell。在这种情况下,它将与bash
一起运行。