我想完全通过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
作品。
必须在命令行上传递数据库名吗?
答案 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