airfling 2020-06-09
这次不仅可以乘凉,甚至还能吃瓜了,国内论坛总会给我一种,升级数据库等同于在无人区探索的感觉一样,好多文章里面的代码我怀疑他自己都没有实践过,甚至有5.7和8.0代码混用的文章,我觉得你有问题
升级前需要备份老的数据库,直接upgrade仅能在5.7的小版本下升级,不能升级到5.8(即8.0,噢,这该死的版本号竞赛),同时,前后格式不兼容,且不再支持mysql_upgrade函数,因此一定要备份!!!如果能把服务器镜像,最好也做一份!!!备份的方式为全数据库备份
mysqldump -uroot -p密码 --all-databases > /路径/名字.sql
备份完建议大致检查一下内容,其中会显示数据库的默认格式和表的创建格式,即5.7的latin,不用担心,在8.0导入的时候会自动变成utf8mb4的,这是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 mysql find 查找到的文件用 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
当然,会非常大
然后删除老的数据库文件(卸载时不会删除的),当然,可以选择重命名文件夹,以防万一
/var/lib/mysql/
然后设置无需密码登录
在/etc/my.cnf中添加 skip-grant-table
启动mysql服务并设置开机启动,若已启动则重启
systemctl start mysqld.service systemctl enable mysqld.service
进入mysql,无需密码,直接回车
mysql –u root -p
修改密码为空密码(为啥有人喜欢用单引号呢)
use mysql update user set authentication_string = ‘’ where user = "root";
将 /etc/my.cnf 中 skip-grant-table 删除,并重启服务
依旧使用空密码登录,然后修改密码策略,一般情况下,设置前两条就够用了
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 ‘新密码‘;
退出后重启服务,然后再次登录尝试即可
恢复数据库,创建一个5.7中同名的database(不知使用自带的可否),进入该database,然后恢复数据库(自动恢复其他database)
create database 数据库名字; use database 数据库名字 source 路径/名字.sql
然后等待刷屏结束,可以自行检验数据是否正常,这时可以检查字符集是否正确,理论上都是和utf8挂钩了,这下不会再出现latin的不兼容问题了
show create 表名; SHOW VARIABLES LIKE ‘character_set_%‘; SHOW VARIABLES LIKE ‘collation_%‘;
如果使用了sqlalchemy,则需要做些修改,要不然会报一些意想不到的错误,比如缺少 libmysqlclient.so.20
5.7的默认链接为 mysql://root:密码@localhost/数据库 8.0需要改为,同时需要用pip3安装pymysql库 mysql+pymysql://root:密码@localhost/数据库?charset=utf8mb4
至此,大部分人应该能一遍过,把很多其他文章中的坑都填满了,当然,如果还遇到什么问题,可以留言反馈,本文根据操作后的印象编写,可能有少许错误,望指正!
感谢:
CentOS7安装mysql8.0.12https://blog.csdn.net/qq_38591756/article/details/82958333Centos7 Mysql8.0版本修改密码 https://blog.csdn.net/qq_15904867/article/details/85941022Centos7中安装Mysql8并修改密码策略并远程连接https://www.cnblogs.com/greycdoer0/p/10863918.html