将mysql从MyISAM更改成INNODB

今天更新django中的表字段,因为mysql从5.1升级到5.7。之前的外键关联必须从MYISAM改新为INNODB才能够继续。mysql

过程有点刺激,但还好,只要想清楚了过程,提早做好备份,就没啥大问题。sql

一,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;"},
    },
}

二,查看如今库里表的存储引擎django

SELECT table_name, table_type, engine FROM information_schema.tables 
WHERE table_schema = 'xxxxDB' ORDER BY table_name DESC;

三,生成更改全部数据表引擎的mysql语句spa

SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' ENGINE=InnoDB;' )
FROM information_schema.tables
WHERE table_schema = 'xxxxDB';

四,将这些语句放到mysql里执行一次code

...
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的默认存储引擎了。orm

show engine

 六,有了以上操做以后,在django里使用makemigrations,migrate命令,就没啥问题了。若是上面步骤没操做出问题,记得先复原数据库,再操做。blog

相关文章
相关标签/搜索