flask mysql py3.7_CentOS7+Python3.6+Flask环境MySQL5.7升级MySQL8.0

这次不仅可以乘凉,甚至还能吃瓜了,国内论坛总会给我一种,升级数据库等同于在无人区探索的感觉一样,好多文章里面的代码我怀疑他自己都没有实践过,甚至有5.7和8.0代码混用的文章,我觉得你有问题

升级前需要备份老的数据库,直接upgrade仅能在5.7的小版本下升级,不能升级到5.8(即8.0,噢,这该死的版本号竞赛),同时,前后格式不兼容,且不再支持mysql_upgrade函数,因此一定要备份!!!如果能把服务器镜像,最好也做一份!!!备份的方式为全数据库备份

mysqldump -uroot -p密码 --all-databases > /路径/名字.sql

全数据备份目的是不要因遗漏信息而造成不必要损失,千万不要直接导入这个文件!!!!!!!!前文已提及,两代兼容性为0,所以不能导入,导入后会产生无法修复的问题!!!需要自行打开文件删除多余的部分,仅保留需要的代码,可以用查找【CREATE DATABASE】或【use `数据库名`】来分段,如果有自信,可以直接导出单独数据库,这里需要读者自行判断!

备份完建议再大致检查一下内容,其中会显示数据库的默认格式和表的创建格式,然后全文检索latin并替换成charset=utf8mb4 collation=utf8mb4_0900_ai_ci,具体格式请读者自行查阅,这是utf8mb3(即常说的utf8)的扩展集,然后卸载老数据库

yum remove mysql mysql-server mysql-libs mysql-server

如果是yum 安装的则用 yum卸载,用 pip 安装的用 pip卸载,用下面命令检查是否有残留

rpm-qa | grep -i mysql

rpm 查找到的软件用yum remove 卸载,因为依赖问题无法卸载可以使用 rpm -e --nodeps卸载,安装时不要使用 --nodeps 跳过依赖检查find / -name mysqlfind 查找到的文件用 rm -rf 删除(记得验证是否是正确的路径)

chkconfig--list | grep -i mysql

删除相关的服务 chkconfig--del mysql

从官网拉取新安装包

wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

安装源

yum localinstall mysql80-community-release-el7-1.noarch.rpm

开始安装

yum install mysql-community-server

当然,会非常大

516a11f42985500e4d286e0b66d4bcb2.png

然后删除老的数据库文件(卸载时不会删除的),当然,可以选择重命名文件夹,以防万一

/var/lib/mysql/

修改配置文件,使大小写不敏感,若完成初始化则无法再设置此项

/etc/my.cnf中添加

lower_case_table_names=1

启动mysql服务并设置开机启动

systemctl start mysqld

systemctl enable mysqld

初次启动之后会生成临时密码

grep 'temporary password' /var/log/mysqld.log

用临时密码登录后,修改密码策略,一般情况下,设置前两条就够用了

set global validate_password.policy=0;

set global validate_password.length=4;

set global validate_password.check_user_name=OFF;

set global validate_password.number_count=0;

set global validate_password.special_char_count=0;

然后修改密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

退出后重启服务,也可不重启,然后再次登录尝试即可

恢复数据库,进入任何一个自带的数据库即可,例 use mysql ,然后恢复数据库(自动执行文件里语句恢复所有database)

use mysql

source 路径/名字.sql

然后等待刷屏结束,可以自行检验数据是否正常,这时可以检查字符集是否正确,理论上都是和utf8挂钩了,这下不会再出现latin的不兼容问题了

show create database 库名;

show create table 表名;

SHOW VARIABLES LIKE'character_set_%';

SHOW VARIABLES LIKE'collation_%';

如果使用了sqlalchemy,则需要做些修改,要不然会报一些意想不到的错误,比如缺少 libmysqlclient.so.20

5.7的默认链接为mysql://root:密码@localhost/数据库

8.0需要改为如下格式,同时需要用pip3安装pymysql库pip3 install pymysql

import pymysqlmysql+pymysql://root:密码@localhost/数据库?charset=utf8mb4

不过pymysql会报warning,所以建议使用mysql-connector,注意包名不叫mysql-connector

pip3 install mysql-connector-python

import mysql.connector

mysql+mysqlconnector://root:密码@localhost/数据库?charset=utf8mb4

至此,大部分人应该能一遍过,把很多其他文章中的坑都填满了,当然,如果还遇到什么问题,可以留言反馈,本文根据操作后的印象编写,可能有少许错误,望指正!

感谢:

CentOS7安装mysql8.0.12

https://blog.csdn.net/qq_38591756/article/details/82958333Centos7中安装Mysql8并修改密码策略并远程连接

https://www.cnblogs.com/greycdoer0/p/10863918.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值