本文完全是个人实践经验,包含了mysql8.0升级的全过程以及中间遇到的问题及解决方法。
整个过程中参考的有价值的文档均有标注。
欢迎收藏,欢迎转发,但希望注明出处https://blog.csdn.net/qq_34175893/article/details/79564604,原创不易
首先下载安装所需安装包,根据自己所需选择(这里以rhel7.4,64位为例)
https://dev.mysql.com/downloads/mysql/8.0.html
解压缩tar包
Tar -zxvf mysql-8.0.4-0.1.rc.el7.x86_64.rpm-bundle.tar
报错
gzip: stdin: not in gzipformat
tar: Child returnedstatus 1
tar: Error is notrecoverable: exiting now
解决方法:
去掉z参数,使用 tar -xvf解压正常
原因分析:
1、压缩文件被人为的改过名称,比如:最初压缩的并非.gz,被人为的修改了后缀,这时可以去掉后缀再解压,如:文件FMIS2600DMP.tar.gz,去掉gz后缀,再用tar -xvf 解压
2、-z参数实际上是调用bz2的加压或者解压程序,去掉该参数,则同样可以避免该问题
软件包的安装,
这里就按照下面的做就行了,不然会出现很多软件包的依赖问题。具体问题就不举例了,我遇到的挺多的
将解压得到的所有rpm包放在同一个空的文件夹下,mysql-community-server-miniaml-*除外,因为会和server及client冲突,
然后使用如下命令安装(我是建议直接全部装了就好了,没必要按照我下面的链接所给的那样限定很多,因为那样会出现一些冲突问题,直接把9个rpm包都用yum安装了就好了,建议一定要用yum装,不要用rpm命令,因为yum会自动检测并解决安装包之间的冲突和依赖问题)
sudoyum install mysql-community-*
安装参考:https://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html
Can’t connect to local MySQL serverthrough socket ‘/var/lib/mysql/mysql.sock
解决步骤:
1 systemctl stop mysqld (停止服务)
2 rm -fr /var/lib/mysql/* (删除/var/lib/mysql下的所有文件)
3 rm /var/lock/subsys/mysqld(删除锁定文件)
4 killall mysqld (杀死所有mysqld进程)
5 systemctl start mysqld (启动mysql服务。)
参考链接:https://www.cnblogs.com/okstill/p/5667138.html
Root用户无密码登录数据库遇到
Access denied for user 'root'@'localhost' (using password: YES)
方法:
跳过root临时密码登录数据库修改密码
1. 关闭mysql服务:
systemctl stop mysqld
2. 设置环境变量跳过权限检查
systemctlset-environment MYSQLD_OPTS="--skip-grant-tables"
3. 重新启动mysql服务
systemctl start mysqld
4.以root用户登录
mysql -u root
这时便可以成功登录了
5. 设置root用户密码
UPDATE mysql.userSET authentication_string= PASSWORD('Root@123') WHERE User = 'root';
在mysql 5.6之后对密码的强度进行了加强,推出了validate_password 插件(据某些地方说好像之前就有,不过现在成了必须的了)。支持密码的强度要求。,通过如下命令查看validate_password的各参数配置要求,
MySQL密码强度审计插件:validate_password的使用说明http://www.xuchanggang.cn/archives/1033.html
SHOW VARIABLES LIKE 'validate_password%';
使用如下命令可以自行配置参数,对密码强度要求最重要的参数为下面的policy
set global validate_password.policy=LOW;
重新执行
UPDATEmysql.user SET authentication_string = 'root123' WHERE User = 'root';
所以最终的修改密码的命令为
UPDATEmysql.user SET authentication_string = 'root123' WHERE User = 'root';
6. 停止mysql服务
systemctl stopmysqld
7. 取消之前设置的跳过权限检查的选项
systemctl unset-environment MYSQLD_OPTS
8.正常启动mysql
systemctl start mysqld
9. 使用前面设置的新密码登录
mysql -u root -p
登录时遇到问题参考:http://blog.csdn.net/u014306472/article/details/78160427
查看默认密码
grep "temporary password"/var/log/mysqld.log
下面是我把上面的命令写在一块,这样copy执行只需一次,而不需3次