升级到Ubuntu 16.04后无法在MySQL上迁移Django数据库

12

重新安装了Ubuntu 16.04的系统,第一次尝试运行python manage.py makemigrations时收到以下错误:

django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")

我的 Django 数据库设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'license_portal',
        'USER': '****',
        'PASSWORD': '****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET storage_engine=MyISAM",
        },
    },
}

库:

(mmslic) ➜  mmsLicenseServer git:(master) ✗ pip freeze              
Django==1.8.12
django-admin-bootstrapped==2.5.7
django-bootstrap3==7.0.1
MySQL-python==1.2.5
mysqlclient==1.3.7
requests==2.9.1
(mmslic) ➜  mmsLicenseServer git:(master) ✗ dpkg -l | grep -i mysql            
ii  libmysqlclient-dev                            5.7.12-0ubuntu1                                     amd64        MySQL database development files
ii  libmysqlclient20:amd64                        5.7.12-0ubuntu1                                     amd64        MySQL database client library
ii  libmysqlclient20:i386                         5.7.12-0ubuntu1                                     i386         MySQL database client library
ii  libqt4-sql-mysql:i386                         4:4.8.7+dfsg-5ubuntu2                               i386         Qt 4 MySQL database driver
ii  mysql-client-5.7                              5.7.12-0ubuntu1                                     amd64        MySQL database client binaries
ii  mysql-client-core-5.7                         5.7.12-0ubuntu1                                     amd64        MySQL database core client binaries
ii  mysql-common                                  5.7.12-0ubuntu1                                     all          MySQL database common files, e.g. /etc/mysql/my.cnf
ii  mysql-server                                  5.7.12-0ubuntu1                                     all          MySQL database server (metapackage depending on the latest version)
ii  mysql-server-5.7                              5.7.12-0ubuntu1                                     amd64        MySQL database server binaries and system database setup
ii  mysql-server-core-5.7                         5.7.12-0ubuntu1  

你真的,真的想使用MyISAM吗? - middlestump
@middlestump 我无法让INNODB正常工作,而且它的性能很低,因此数据库吞吐量不会成为问题! - charles.fg
但是在最近的MySQL版本中,InnoDB是默认的,因此它可以直接使用。 - middlestump
1个回答

29

经过解决这个问题的努力,我发现问题出在MySQL 5.7版本的更改。

使用MySQL 5.7时,命令SET storage_engine=MyISAM将无法起作用,这就是问题所在!

MySQL 5.7文档中指出,请改用default_storage_engine!我的配置变为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'license_portal',
        'USER': '****',
        'PASSWORD': '****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            "init_command": "SET default_storage_engine=MyISAM",
        },
    },
}

非常感谢您。应该指出,当使用http://seafile.com并更新底层的MySQL服务器时,可能会出现此错误。还请参阅gitlab上的此问题(https://github.com/haiwen/seafile/issues/1776)。 - benni
我最近在 Mac OS 上进行了一次干净的安装,但在使用 brew 安装 mysql-server 时忘记指定版本,结果默认安装了 5.7 版本。谢谢! - kopos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接