今天更新django中的表字段,由于mysql从5.1升级到5.7。以前的外键关联必须从MYISAM改新为INNODB才可以继续。
过程有点刺激,但还好,只要想清楚了过程,提前作好备份,就没啥大问题。
一,django里的mysql配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'PDB', 'USER': 'user', 'PASSWORD': 'xxxx', 'HOST': '1.2.3.4', 'PORT': '3306', 'OPTIONS': {"init_command": "SET default_storage_engine=INNODB;"}, }, }
二,查看现在库里表的存储引擎
SELECT table_name, table_type, engine FROM information_schema.tables WHERE table_schema = 'xxxxDB' ORDER BY table_name DESC;
三,生成更改所有数据表引擎的mysql语句
SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' ENGINE=InnoDB;' ) FROM information_schema.tables WHERE table_schema = 'xxxxDB';
四,将这些语句放到mysql里执行一次
... ALTER TABLE A ENGINE=InnoDB; ALTER TABLE B ENGINE=InnoDB; ALTER TABLE C ENGINE=InnoDB; ALTER TABLE H ENGINE=InnoDB; ALTER TABLE D ENGINE=InnoDB; ALTER TABLE E ENGINE=InnoDB; ...
五,在my.cnf里将默认引擎设置为innodb,然后,使用show engine,即可看到mysql的默认存储引擎了。
show engine
六,有了以上操作之后,在django里使用makemigrations,migrate命令,就没啥问题了。如果上面步骤没操作出问题,记得先复原数据库,再操作。