写点什么

实战分享丨 MySQL 与 Django 版本匹配相关经验

作者:Java你猿哥
  • 2023-04-17
    湖南
  • 本文字数:2723 字

    阅读完需:约 9 分钟

run:


(env) E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro>python manage.py migrate
复制代码


报错代码提示如下:


raise errorclass(errno, errval)django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1")During handling of the above exception, another exception occurred:
复制代码



根据提示分析报错原因:


Django2.1 不再支持 MySQL5.5,必须 mysql5.6 版本以上


查 mysql 版本和 Django 版本:


mysql 版本:


Django 版本:


根据原因分析得出解决思路:


二选一


(1)Django 降级到 2.0


(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> pip install Django==2.0.0 -i https://pypi.douban.com/simple
复制代码



>>> import django>>> django.VERSION
复制代码



(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> python .\manage.py makemigrationsNo changes detected(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro>(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> python .\manage.py migrate
复制代码




成功连接数据库。


(2)MySQL 升级


1.查看 MySQL 的版本


mysql --versionmysql  Version 14.14 Distrib 5.5.28, for Linux (x86_64) using reeadline 5.1从上面可以看出,MySQL版本为5.5.28
复制代码


2.查看 MySQL 的安装包


yum list | grep mysql注意:如果没有看到想要升级的版本,请更新yum安装库,具体操作如下:1) wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm2) rpm -ivh mysql-community-release-el6-5.noarch.rpm3) 重新查看即可,yum list | grep mysql
复制代码


3.查看当前已经安装的 MySQL 安装相关信息


yum list | grep ^mysql注意:这里的^代表以mysql开头的项-----------yum info mysql-server据说,上面的命令执行完毕后可以看到可升级的版本,但是并没看到。-----------yum check-update mysql-server可以检查可用的安装包
复制代码


4.升级 MySQL 及其组件

yum update mysql-server执行结束,会显示complete之类的关键字。
复制代码


5.检查是否更新成功


mysql --version当然,执行完这一步并不代表已经可以用MySQL了。在这里,可能碰到了一个错误。
复制代码


问题 1:


启动服务的时候,提示找不到 mysql.sock 之类的问题。

解决方案:


1.查看错误日志(前提:my.cnf里面有配置日志功能log-error = 路径)cat /var/log/mysql_error.log2.发现skip-locking5.6不支持,已经过时。改为skip-extenal-locking(skip-locking可参考链接:) 3.保存退出,重启mysqld服务即可
复制代码


问题 2:


启动服务的时候,错误日志显示 Unknown/unsupported storage engine: InnoDB


解决方案:


执行删除命令:rm -rf /var/lib/mysql/ib*删除:ibdata1、ib_logfile0、ib_logfile1文件重启服务即可,service mysqld restart
复制代码


当然,你可能会想,如果更新的版本存在 5.5、5.6 甚至更高,但我只是想更新到指定版本呢?那应该怎么做?


其实很简单,只要在上诉操作中更新前,改动 repo 配置文件即可。


配置文件路径:/etc/yum.repos.d修改配置文件:mysql-community.repo和mysql-community-source.repo修改内容:将所要更新的版本的enabled=1,其他版本的enabled=0即可,如下图所示,只更新到mysql 5.
复制代码

原文链接;run:


(env) E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro>python manage.py migrate
复制代码


报错代码提示如下:


raise errorclass(errno, errval)django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1")During handling of the above exception, another exception occurred:
复制代码



根据提示分析报错原因:


Django2.1 不再支持 MySQL5.5,必须 mysql5.6 版本以上


查 mysql 版本和 Django 版本:

mysql 版本:


Django 版本:


根据原因分析得出解决思路:


二选一


(1)Django 降级到 2.0


(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> pip install Django==2.0.0 -i https://pypi.douban.com/simple
复制代码



>>> import django>>> django.VERSION
复制代码



(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> python .\manage.py makemigrationsNo changes detected(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro>(env) PS E:\PythonPro\PyDjangoProDemo011\xuanyuaniotpro> python .\manage.py migrate
复制代码




成功连接数据库。


(2)MySQL 升级


1.查看 MySQL 的版本


mysql --versionmysql  Version 14.14 Distrib 5.5.28, for Linux (x86_64) using reeadline 5.1从上面可以看出,MySQL版本为5.5.28
复制代码


2.查看 MySQL 的安装包


yum list | grep mysql注意:如果没有看到想要升级的版本,请更新yum安装库,具体操作如下:1) wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm2) rpm -ivh mysql-community-release-el6-5.noarch.rpm3) 重新查看即可,yum list | grep mysql
复制代码


3.查看当前已经安装的 MySQL 安装相关信息

yum list | grep ^mysql注意:这里的^代表以mysql开头的项-----------yum info mysql-server据说,上面的命令执行完毕后可以看到可升级的版本,但是并没看到。-----------yum check-update mysql-server可以检查可用的安装包
复制代码


4.升级 MySQL 及其组件


yum update mysql-server执行结束,会显示complete之类的关键字。
复制代码


5.检查是否更新成功


mysql --version当然,执行完这一步并不代表已经可以用MySQL了。在这里,可能碰到了一个错误。
复制代码


问题 1:


启动服务的时候,提示找不到 mysql.sock 之类的问题。


解决方案:


1.查看错误日志(前提:my.cnf里面有配置日志功能log-error = 路径)cat /var/log/mysql_error.log2.发现skip-locking5.6不支持,已经过时。改为skip-extenal-locking(skip-locking可参考链接:) 3.保存退出,重启mysqld服务即可
复制代码


问题 2:


启动服务的时候,错误日志显示 Unknown/unsupported storage engine: InnoDB


解决方案:


执行删除命令:rm -rf /var/lib/mysql/ib*删除:ibdata1、ib_logfile0、ib_logfile1文件重启服务即可,service mysqld restart
复制代码


当然,你可能会想,如果更新的版本存在 5.5、5.6 甚至更高,但我只是想更新到指定版本呢?那应该怎么做?


其实很简单,只要在上诉操作中更新前,改动 repo 配置文件即可。


配置文件路径:/etc/yum.repos.d修改配置文件:mysql-community.repo和mysql-community-source.repo修改内容:将所要更新的版本的enabled=1,其他版本的enabled=0即可,如下图所示,只更新到mysql 5.6版本:
复制代码


用户头像

Java你猿哥

关注

一只在编程路上渐行渐远的程序猿 2023-03-09 加入

关注我,了解更多Java、架构、Spring等知识

评论

发布
暂无评论
实战分享丨 MySQL 与 Django 版本匹配相关经验_Java_Java你猿哥_InfoQ写作社区