如何在defaults-file中指定要转储的数据库

时间:2014-11-19 06:58:36

标签: mysql

我想完全通过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

作品。

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

3 个答案:

答案 0 :(得分:2)

如果您运行--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 */;

有效。我们可以使用其他名称代替databases。但是我不应该支持多个数据库的解决方法,但更新它以使它这样做并不容易

答案 1 :(得分:1)

Can you source it? Something like:

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

答案 2 :(得分:0)

试试这个:

mysqldump --user='{{USER}}' --password='{{PASSWORD}}' -h {{HOST}} {{DATABASE}} {{TABLE_NAME}} > database.sql