#30636 closed Bug (fixed)
mysqldump crash when --defaults-file is not given before other options.
Reported by: | Yann Sionneau | Owned by: | Yann Sionneau |
---|---|---|---|
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 )
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', 'test__1'] 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 (11)
comment:1 by , 5 years ago
Description: | modified (diff) |
---|
comment:2 by , 5 years ago
Description: | modified (diff) |
---|
comment:3 by , 5 years ago
Easy pickings: | set |
---|
comment:5 by , 5 years ago
Has patch: | set |
---|
I propose this patch to fix the issue: https://github.com/django/django/pull/11567
comment:6 by , 5 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:7 by , 5 years ago
Easy pickings: | unset |
---|---|
Keywords: | mysqldump added |
Summary: | mysqldump errors out with "unknown variable" when --parallel and --defaults-file → mysqldump crash when --defaults-file is not given before other options. |
Triage Stage: | Unreviewed → Accepted |
comment:9 by , 5 years ago
I have still the problem with django 2.2.11, is the problem only solved on django 3.0?
comment:10 by , 5 years ago
Effectively, the commit is only for 3.0. If I apply change to my 2.2.11 django it works. Is it possible to include this fix officially in the LTS 2.2 series?
It seems that the same requirement exists for "mariabackup" (the equivalent tool to mysqldump for MariaDB).
See https://mariadb.com/kb/en/library/mariabackup-overview/
Also, a confirmation in MySQL documentation that "defaults-file" must be given before other options: https://dev.mysql.com/doc/refman/5.5/en/option-file-options.html