Opened 5 years ago

Last modified 4 years ago

#30636 closed Bug

mysqldump errors out with "unknown variable" when --parallel and --defaults-file — at Version 1

Reported by: Yann Sionneau Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords: mysqldump
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Yann Sionneau)

What happens?
Running tests gives:
Creating test database for alias 'default'...
Cloning test database for alias 'default'...
mysqldump: unknown variable 'defaults-file=/var/lib/jenkins/workspace/Pytition_master/my.cnf'
And then every test fails with 'E' (error).

How to reproduce?
1/ Configure your database like this:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf', # file with credentials and db name
        },
    }
}

2/ run tests with "manage.py test --parallel 2 appname"
The important here is "--parallel 2" (or more than 2)

Explanations?

This happens because Django tries to clone the database using mysqldump: https://github.com/django/django/blob/master/django/db/backends/mysql/creation.py#L60
In my case I've printed the arguments, it gives:
dump_cmd: ['mysqldump', '--routines', '--events', '--defaults-file=/var/lib/jenkins/workspace/Pytition_master/my.cnf', 'test_']
load_cmd: ['mysql', '--defaults-file=/var/lib/jenkins/workspace/Pytition_master/my.cnf', 'test1']
mysqldump: unknown variable 'defaults-file=/var/lib/jenkins/workspace/Pytition_master/my.cnf'

However, it seems that, even if this is undocumented in mysqldump's man page, it does only support --defaults-file parameter when in first position.

See the Note on this StackOverflow answer: https://stackoverflow.com/questions/10725209/specifying-separate-config-file-on-mysqldump-command-line

Proposed solution:
Test if read_default_file is in settings, and in this case put it as first argument to mysqldump

Change History (1)

comment:1 by Yann Sionneau, 5 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top