【问题标题】:mysqldump command works when typed directly into command line - but not in a shell scriptmysqldump 命令在直接输入命令行时有效 - 但在 shell 脚本中无效
【发布时间】:2012-01-31 00:12:30
【问题描述】:

我刚刚开始使用 shell 脚本,以节省我一遍又一遍地输入相同的命令。此命令用于将数据库复制到从属服务器,作为设置 MySQL 数据库复制的一部分。

直接在命令提示符下输入就可以了:

mysqldump --host=192.168.1.1  –uUSER –pPASSWORD --opt database_name | mysql --host=192.168.1.2 –uUSER –pPASSWORD -C database_name

USER、PASSWORD 和 database_name 在真实脚本中都替换为它们的实际值。

当我在 scripts.sh 文件中键入此命令时,给它执行权限,然后使用 ./scripts.sh 运行它,我得到:

'RROR1102 (42000): Incorrect database name 'database_name
mysqldump: Got errno 32 on write

什么可能导致此错误?当命令包含在 shell 脚本中时,我是否需要以某种方式修改命令?

【问题讨论】:

    标签: mysql shell centos mysqldump


    【解决方案1】:

    您的数据库名称所在的变量末尾有一个CR。您可能需要通过 dos2unix 运行您的脚本,或者如果您从外部来源获取数据库名称,请使用此站点上的解决方案之一从数据中剥离 CR。

    【讨论】:

    • 感谢您的想法。我使用VI编辑器直接将命令输入到文件中,因此行后没有外部源,也没有CR...
    • 如果我用VI创建一个文件并在其中输入一行然后保存,我可以添加一个CR吗?
    • @Dan: 取决于 vi 设置为默认使用的行尾。
    • 好酷。谢谢!我将从文件重新开始,并研究默认行返回。
    • 它现在可以工作了——我在里面找到了一个 CR,尽管它不可​​见。当我重新开始使用新文件时,一切正常。我不需要更改默认换行或任何东西。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2021-11-13
    • 2017-03-26
    • 2013-02-07
    • 2017-04-01
    • 2017-10-12
    • 2015-03-16
    相关资源
    最近更新 更多