mysqldump bash脚本抛出错误

时间:2015-01-16 19:48:22

标签: mysql bash shell mysqldump

您好我正在尝试创建一个备份某些表的脚本。表的数量非常大,我不想复制粘贴命令。这是我的剧本。

#! /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。

1 个答案:

答案 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一起运行。