linux 安装mysql8.0及常见报错处理
一、从官网下载自己所需的安装包
https://downloads.mysql.com/archives/community/
只需下载RPM Bundle包就行了,里面包含了安装此版本所有的包,解压如下图所示
安装此版本只需以下包即可
直接上传到linux环境安装,安装时这些包有先后依赖顺序,否者安装时要报错(不过多尝试几次也能安装成功,以下为安装顺序)
rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm
二、启动mysql服务
我用的linux环境是CentOS7,服务管理命令systemctl,在红帽6.0以下用的是service
systemctl start mysqld
systemctl enable mysqld
service mysqld start
查看数据库密码
cat /var/log/mysqld.log
登录数据库修改密码
mysql -uroot -p
修改密码几种方法(后面两种只能修改当前登录用户密码):
alter user 'root'@'localhost' identified by 'new_password';
alter user user() identified by 'new_password';
set password = 'new_password';
flush privileges 刷新权限
此时可能会报如下错误,报错原因:密码强度不够,需要设置长一点(这是mysql8.0新特性,默认密码强度等级为MEDIUM)
自己做实验不方便,可以修改密码强度
注:以下是我修改后的设置,默认密码长度8,policy为MEDIUM
show variables like '%validate_password%';
set global validate_password_length = 4 设置密码长度为4
set global validate_password_policy = LOW 密码策略为LOW
修改后系统环境变量后会立即生效,但是重启服务就会失效,永久生效需要添加到 /etc/my.cnf配置文件中
validate_password_policy说明:
密码强度检验等级,可以使用数值0、1、2或相应的符号值LOW、MEDIUM、STRONG来指定
0/LOW:只检查长度
1/MEDIUM:检查长度、数字、大小写、特殊字符
2/STRONG:检查长度、数字、大小写、特殊字符、字典文件
三、设置数据远程登录
查看host和user信息
修改root用户host为% (localhost代表本地登录,%代表远程登录)
update mysql.user set host='%' where user='root' and host='localhost';
四、远程工具连接数据库
第一次连接数据库时响应很久都没反应,最后还连接不成功,当然这是很正常现象,我们逐步排除问题所在
我大致归纳了几个问题所在:
1、服务没启动
systemctl status mysqld 查看服务是否启用
2、端口问题
netstat -ntpl 查看本地所有开放端口
lsof -i:3306
ss -ltn
3、查看端口是否开放
在cmd中
telnet 192.168.10.114 3306
4、防火墙问题
有两种方式解决,1、直接关闭防火墙,2、设置防火墙策略
systemctl stop firewalld
firewall-cmd --set-default-zone=trusted 默认放行所有请求连接
此时我们用navicat或sqlyong工具连接,出现这个原因是MySQL8之前的版本中加密规则是mysql_native_password,而在MySQL8之后,加密规则是caching_sha2_password。解决问题方法有两种,第一种是升级图形界面工具版本,第二种是把MySQL8用户登录密码加密规则还原成mysql_native_password。第二种解决方案如下
#修改'root'@'%'用户的密码规则和密码
alter user 'root'@'%' identified with mysql_native_password by 'rootR@123';
五、字符集问题
注:mysql8.0默认字符集为utf8,不需要修改
mysql5.7的版本字符集为latin需要修改字符集
set global character_set_server = utf8
修改配置文件my.cnf
character_set_server = utf8 添加到mysqld下