【问题标题】:Problem with mysqldump: "--defaults-extra-file" option is not working as expectedmysqldump 的问题:“--defaults-extra-file”选项未按预期工作
【发布时间】:2010-10-01 02:41:53
【问题描述】:

我从 Windows 命令行运行以下命令来备份我的数据库:

...\right_path\mysqldump --add-drop-database --databases my_database_name
                         --defaults-extra-file=d:\1.cnf

其中d:\1.cnf 包含以下内容:

[client]
user="my_user"
password="my_password"

很遗憾,我收到以下错误消息:

mysqldump: unknown variable 'defaults-extra-file=d:\1.cnf'

如果我这样做:

...\right_path\mysqldump --add-drop-database --databases my_database_name
                         --user="my_user" --password="my_password"

它按预期工作。

我做错了什么?

【问题讨论】:

    标签: mysql windows mysqldump


    【解决方案1】:

    供将来参考:

    接受的答案是正确的,需要将--defaults-extra-file选项放在第一位。

    要尝试使用容器,一种选择是:

    $ docker network create dbnet
    $ docker run --network dbnet -it --rm \
        --name db -e MYSQL_ROOT_PASSWORD=example \
        mysql echo "[client]\npassword=example\n">.mydbcreds.cnf  
    $ docker run --network dbnet -it --rm \
        --name db-client -v "$PWD:/app/" mysql \
        mysql --defaults-extra-file=/app/.mydbcreds.cnf \
            --host db --user root \
            -e "SHOW SCHEMAS;"
    

    不要忘记将凭据安全地保存在 VCS 之外:

    echo ".mydbcreds.cnf">>.gitignore
    

    该文件可以包含所有连接参数(主机、用户等)。

    很遗憾,此文件不能包含数据库名称,如果每个环境有不同的文件,那就太棒了。 现在我们已经在命令中设置了所有用于连接的文件和数据库名称。

    【讨论】:

    • 这不能回答这个人的问题。
    • 接受的答案是正确的。如前所述,如果有人也像我一样从问题中搜索相同的关键字,这供将来参考。这是一个 Docker 示例,在其中正确存储凭据以及如何使用 --defaults-extra-file 读取它。这种东西非常罕见,不需要只为一个小笔记打开一个新问题。
    【解决方案2】:

    我找到了答案:--defaults-extra-file 必须是第一个选项。这按预期工作:

    ...\right_path\mysqldump --defaults-extra-file=d:\1.cnf
                             --add-drop-database --databases my_database_name
    

    【讨论】:

    • 另外:当您将普通的“--defaults-file”参数传递给例如mysqld
    • 在某些系统上,mysql和mysqldump被设置为别名,例如alias mysql='mysql --skip-secure-auth'。因此,如果您首先设置 --defaults-extra-file 并且它仍然不起作用,请检查是否存在这样的别名,使用例如。 which mysql.
    【解决方案3】:

    也遇到这个问题。发现还有另一种情况会导致 --defaults-extra-file 选项无法识别。

    当您在脚本中更改 IFS 时,可能会遇到此问题。解决方法是在执行mysql语句之前重置IFS。

    供参考。

    【讨论】:

      【解决方案4】:

      我意识到这是特定于 Linux 的,但我的搜索将我带到了这里。

      我正在使用 bitnami 的 LAMP 堆栈,发现他们的“mysqldump”实际上是一个脚本:

      LD_LIBRARY_PATH=/opt/lampstack-5.5.3-0/mysql/lib:$LD_LIBRARY_PATH
      export LD_LIBRARY_PATH
      case "$@" in
        *--no-defaults*)
          exec $0.bin "$@"
          exit
      esac
      exec $0.bin --defaults-file=/opt/lampstack-5.5.3-0/mysql/my.cnf "$@"
      

      这似乎不允许 --defaults-file 被传入...并工作(根据此处接受的答案)。

      【讨论】:

      • @LeifSegen 直接调用 .bin 版本即可。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2012-12-20
      • 2018-06-27
      • 2017-10-14
      相关资源
      最近更新 更多