之前在服务器安装的8.0.26版本的mysql,进行安全扫描后发现一些严重的漏洞,于是想升级一下版本,希望高版本能自动解决了这些问题。
-
下载相应版本的RPM Bundle包 tar文件
地址: https://downloads.mysql.com/archives/community/
各选项参考截图:
上传到服务器,解压
# tar -xf mysql-8.4.0-1.el7.x86_64.rpm-bundle.tar
这是没有指定解决目录的,就会直接将那几个文件放到当前目录下,如果不希望这样,则需要指定解决目录:
# tar -xf mysql-8.4.0-1.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql840
(自己创建的目录)
不指定目录,就会解压到当前目录
没有mysql840目录,就自己用mkdir创建一个吧(或者其他目录)
解决后:
-
查看之前安装的mysql
# rpm -qa|grep -i mysql
如果有,需要先删除
删除旧版本的步骤
# rpm -e --nodeps mysql-community-server-8.0.26-1.el7.x86_64
用相同的方法,把client 、common 和 libs 也删除了
开始安装新版本
尝试安装 server
# rpm -ivh mysql-community-server-8.4.0-1.el7.x86_64.rpm
先安装common 和 icu
# rpm -ivh mysql-community-common-8.4.0-1.el7.x86_64.rpm
# rpm -ivh mysql-community-icu-data-files-8.4.0-1.el7.x86_64.rpm
尝试安装 client
安装client-plugins
# rpm -ivh mysql-community-client-plugins-8.4.0-1.el7.x86_64.rpm
尝试安装libs会失败
删除mariadb-libs
先用命令找到 mariadb 的包
# rpm -qa | grep -E 'mysql|mariadb'
执行删除,这里不要管依赖
# rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
现在可以安装libs
# rpm -ivh mysql-community-libs-8.4.0-1.el7.x86_64.rpm
现在安装 client
# rpm -ivh mysql-community-client-8.4.0-1.el7.x86_64.rpm
最后安装 server
# rpm -ivh mysql-community-server-8.4.0-1.el7.x86_64.rpm
启动
# systemctl start mysqld
查看状态
# systemctl status mysqld
设置开机启动
# systemctl enable mysqld
查看mysql安装时产生的默认密码
# grep ‘temporary password’ /var/log/mysqld.log
登录报错
Plugin ‘mysql_native_password’ is not loaded
修改 my.cnf
添加 mysql_native_password
vi /etc/my.cnf
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
添加 skip-grant-tables
重启
# systemctl restart mysqld
这个时候登录输入密码时,直接回车
设置密码
> use mysql
> set password for `root`@`localhost`=password('YourPassword');
这个命令好像会报错,不知道是不是这个版本不能这样操作。
于是改成:
> alter user 'root'@'localhost' identified by 'YourPassword';
但是,会报错:Operation ALTER USER failed for 'root'@'localhost'
于是想到:是不是在user表里没有相应的记录?
可以用:
> select user,host from user;
查看结果,然后再用:
> update user set host='localhost' where host='%';
其实,这样就只能本地连接数据库了,为了尽量减少扫描发现的各种漏洞,这样设置比较省事。但是其实部署环境往往是数据库与web服务程序分开部署在不同的机器上的,是不能像我上面这样update成localhost的。
有人说需要执行一次 flush
> flush privileges;
之后再执行:
> alter user 'root'@'localhost' identified by 'YourPassword';
执行成功之后,需要修改 /etc/my.cnf 将 skip-grant-tables 注释掉
重启mysql
# systemctl restart mysqld
再次登录即可!!