南迁移错误,InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope

Posted

技术标签:

【中文标题】南迁移错误,InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope【英文标题】:South migrate error, InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope 【发布时间】:2014-06-26 17:45:30 【问题描述】:

我迁移数据发生错误。 我尝试在下面运行原始 sql: 更改表 wxwall_participation 添加列 event INT 默认值 0 更改表 wxwall_scene 添加列 welcome_msg VARCHAR(400) NULL 他们工作得很好,这让我很困惑。我该如何解决这个问题?

错误详情:

 - Migrating forwards to 0002_auto__add_field_participation_event__add_field_scene_welcome_msg.
 > wxwall:0002_auto__add_field_participation_event__add_field_scene_welcome_msg
 ! Error found during real run of migration! Aborting.

 ! Since you have a database that does not support running
 ! schema-altering statements in transactions, we have had
 ! to leave it in an interim state between migrations.

! You *might* be able to recover with:   - no dry run output for delete_foreign_key() due to dynamic DDL, sorry
   = ALTER TABLE `wxwall_participation` DROP COLUMN `event` CASCADE; []
   - no dry run output for delete_foreign_key() due to dynamic DDL, sorry
   = ALTER TABLE `wxwall_scene` DROP COLUMN `welcome_msg` CASCADE; []

 ! The South developers regret this has happened, and would
 ! like to gently persuade you to consider a slightly
 ! easier-to-deal-with DBMS (one that supports DDL transactions)
 ! NOTE: The error which caused the migration to fail is further up.

Error in migration: wxwall:0002_auto__add_field_participation_event__add_field_scene_welcome_msg
  File "E:\PyCharm 3.0.1\helpers\pydev\pydevd.py", line 1534, in <module>
    debugger.run(setup['file'], None, None)
  File "E:\PyCharm 3.0.1\helpers\pydev\pydevd.py", line 1145, in run
    pydev_imports.execfile(file, globals, locals) #execute the script
  File "D:/YUNTU/Incubations/Project/chlitina/germes/manage.py", line 36, in <module>
    execute_from_command_line(sys.argv)
  File "E:\Python27\lib\site-packages\django\core\management\__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "E:\Python27\lib\site-packages\django\core\management\__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "E:\Python27\lib\site-packages\django\core\management\base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "E:\Python27\lib\site-packages\django\core\management\base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\management\commands\migrate.py", line 111, in handle
    ignore_ghosts = ignore_ghosts,
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\__init__.py", line 220, in migrate_app
    success = migrator.migrate_many(target, workplan, database)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 254, in migrate_many
    result = migrator.__class__.migrate_many(migrator, target, migrations, database)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 329, in migrate_many
    result = self.migrate(migration, database)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 133, in migrate
    result = self.run(migration, database)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 114, in run
    return self.run_migration(migration, database)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 84, in run_migration
    migration_function()
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\migration\migrators.py", line 60, in <lambda>
    return (lambda: direction(orm))
  File "D:\YUNTU\Incubations\Project\chlitina\germes\app\weixin\wxwall\migrations\0002_auto__add_field_participation_event__add_field_scene_welcome_msg.py", line 17, in forwards
    keep_default=False)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\db\generic.py", line 47, in _cache_clear
    return func(self, table, *args, **opts)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\db\generic.py", line 418, in add_column
    self.execute(sql)
  File "D:\YUNTU\Incubations\Project\chlitina\germes\lib\south\db\generic.py", line 282, in execute
    cursor.execute(sql, params)
  File "E:\Python27\lib\site-packages\django\db\backends\util.py", line 40, in execute
    return self.cursor.execute(sql, params)
  File "E:\Python27\lib\site-packages\django\db\backends\mysql\base.py", line 114, in execute
    return self.cursor.execute(query, args)
  File "E:\Python27\lib\site-packages\MySQLdb\cursors.py", line 203, in execute
    if not self._defer_warnings: self._warning_check()
  File "E:\Python27\lib\site-packages\MySQLdb\cursors.py", line 117, in _warning_check
    warn(w[-1], self.Warning, 3)


_mysql_exceptions.Warning: InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope.

【问题讨论】:

【参考方案1】:

我找到问题了。关键是innodb_file_format 我从生产数据库备份恢复数据。生产的 mysql 配置 innodb_file_format=Barracuda,但我的本地是默认值 Antelope

我认为更合适的错误消息是ROW_FORMAT=DYNAMIC requires innodb_file_format =Barracuda。 我应该怎么做,只需将innodb_file_format = Barracuda设置为my.ini,就可以了。

【讨论】:

以上是关于南迁移错误,InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_format > Antelope的主要内容,如果未能解决你的问题,请参考以下文章

南迁移错误 - 关系已经存在

南迁移错误:django.contrib.auth 的 NoMigrations 异常

使用南(django)和 MySQL 进行模式迁移

南迁移 DateField 到 IntegerField

如何在南迁移期间调用 django 模型类的静态方法

Antelope 和Barracuda区别