Mysql 如何在默认文件中指定要转储的数据库

Mysql 如何在默认文件中指定要转储的数据库,mysql,Mysql,我希望完全通过defauts文件配置mysqldump命令,但似乎不可能在文件中指定数据库 我试过了 databases=mydb databases mydb databases="mydb" databases "mydb" 我总是能得到信息 mysqldump: ignoring option '--databases' due to invalid value 'mydb' 在命令行中,我仅在使用以下命令时收到此消息: mysqldump: --databases=mydb 只

我希望完全通过defauts文件配置mysqldump命令,但似乎不可能在文件中指定数据库

我试过了

databases=mydb
databases mydb

databases="mydb"
databases "mydb"
我总是能得到信息

mysqldump: ignoring option '--databases' due to invalid value 'mydb'
在命令行中,我仅在使用以下命令时收到此消息:

 mysqldump: --databases=mydb
只有这样才行

 mysqldump .... --databases mydb
工作

必须在命令行上传递数据库名吗?

尝试以下操作:

mysqldump --user='{{USER}}' --password='{{PASSWORD}}' -h {{HOST}} {{DATABASE}} {{TABLE_NAME}} > database.sql
如果您运行
--help
,您将获得

$ mysqldump --help

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]

...
databases                         FALSE
...
因此,如果您看到
--databases
是一个布尔标志,那么在配置中,如果您只指定
databases
,则表示该标志为
TRUE
。现在,数据库名称始终是一个位置参数,需要在命令本身中指定

我们通过使用bash脚本来解决这个问题

#!/bin/bash
database=$(mysqldump --print-defaults | tr ' ' '\n' | awk -F'=' '/databases/ {print $2}')
mysqldump $@ $database
这样做的目的是打印默认配置,它不会得到验证,因此您也可以提供无效选项。然后使用相同的方法从配置中提取数据库,然后从终端传递命令。现在如果我这样做了

$  ./mysqldump.sh
Warning: mysqldump: ignoring option '--databases' due to invalid value 'testing'
-- MySQL dump 10.13  Distrib 5.6.40, for Linux (x86_64)
--
-- Host: localhost    Database: testing
-- ------------------------------------------------------
-- Server version   5.6.40

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

它起作用了。我们可以给我们一个不同的名称,而不是
数据库
。但是我应该采取的解决方法无论如何都不支持多个数据库,但是更新它让它这样做并不容易,你能找到它的来源吗?比如:

source <PATH_TO_DEFAULTS_FILE> && mysqldump -u $user -p $pass $databases ...
source&&mysqldump-u$user-p$pass$databases。。。

这很有效,谢谢,但理想情况下,我会在defaults-file中指定数据库。在我的例子中,我希望数据库在配置文件中,但仍然在命令行中指定表,例如,
mysqldump--defaults file=config.cnf--skip comments--skip tz utc--tables mytable>“sql/mytable.sql”
-这样我就可以得到选择数据库“文件a”功能请求时拒绝访问数据库“mytable”“在bugs.mysql上。com@DisgruntledGoat,对我发布的答案有任何更新/反馈吗?这不是一个好方法,因为有多种原因,mysql配置可以拆分为不同的文件,而且配置中也有一些您无法获取的部分,接下来这意味着在配置中指定每个变量,同样在命令中。那么使用配置文件到底有什么意义呢?谢谢,这似乎是最好的方法。奇怪的是,该选项不能直接在配置中设置。