Opened 5 years ago
Last modified 5 years ago
#30636 closed Bug
mysqldump errors out with "unknown variable" when --parallel and --defaults-file — at Initial Version
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
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