在生产环境中,最常用的数据库是MySQL5.7版本;后续在接触到8版本的MySQL后,决定尝试切换至新版本的MySQL测试新特性,并作此文进行记录
MySQL8
MySQL从5.7版本一跃更新至8版本,一度以为自己落伍了,实际了解之后才发现MySQL8实际上是直接从5.7跳到8版本的,你可以理解为8以前的是小版本,即5.7可以理解为7版本,这样就可以解释得通了.
不过版本号始终只是一个数字,了解它的新特性才是正经事.
一.新特性简介
- 默认字符集由latin1变为utf8mb4
- MyISAM系统表全部换成InnoDB表
- 自增变量持久化
- JSON特性增强
…
总之,比之前的旧版本增加了许多新特性,首先我们先安装好8版本的数据库再来讨论这些新特性.
二.安装
实际上,在服务器上安装MySQL的步骤大致都相同,只不过需要注意的是,在安装新版本数据库之前最好将旧版本的数据库进行删除.
- 首先访问官网,下载对应版本的rpm文件到本地
官网下载地址:https://dev.mysql.com/downloads/
在这里我们选择MySQL Yum Repository,进入到下一级页面后选择对应Linux版本的rpm包,点击下载到本地; - 通过xftp上传到服务器后执行
sudo yum install /xx/(下载的rpm文件地址)
- 等待执行完成后,继续执行
yum install mysql-server
- 等上述命令都执行完后,理论上来说已经安装完成了,执行运行命令
systemctl start mysqld
发现返回"systemctl start mysqld"的错误,通过查找资料发现还需要安装mariadb-server,于是需要先执行以下命令后再进行启动:
yum install -y mariadb-server
- 启动完成
常用的命令为:
systemctl start mysqld 启动
systemctl stop mysqld 关闭
systemctl status mysqld 查看运行状态
三.登录
我们在安装完成后,其实已经在启动日志里生成了一个默认的随机密码,我们需要进入到/var/log/mysqld.log目录下进行查看,或者直接可以用以下命令进行查看:
grep "password" /var/log/mysqld.log
获取到你的默认密码后,你就可以用mysql -u -p,然后输入对应密码进行登录.
这里需要注意的是,首次登录后,你执行任何sql语句都会提示你You must reset your password using ALTER USER statement before executing this statement,意思是说在执行这条命令之前你必须修改你的密码
使用以下命令进行修改密码:
alter user 'root'@'localhost' identified by 'YOUR_PASSWORD';
由于默认的密码校验是强检验,所以你用简单的密码口令是不会被通过的.虽然我在这里推荐使用默认的强校验密码防止你设置弱口令密码,但是如果只是测试的数据库需要设置成弱口令密码,那我也在下面提供设置弱口令的方法:
1.设置弱口令前,你也必须先将你的密码修改成功一次,也就意味着你必须用多种大小写字母或者数字以及特殊字符设置一个密码之后,才能修改密码策略.
2.设置完一个强密码之后,你登录到MySQL中,通过以下命令可以查看目前的密码策略
SHOW VARIABLES LIKE 'validate_password%';
3.设置密码强度为0
set global validate_password.policy=0;
4.设置密码长度限制为1
set global validate_password.length=1;
5.密码策略已经修改为最低,尝试修改为简单密码root
alter user 'root'@'localhost' identified by '123456';
通过检验,发现目前root账号的密码为123456,且能正常登录了
四.允许远程登录
目前我们只是在服务器本地登录,但是通过远程连接工具,例如Navicat登录就会发现远程连接被拒
所以我们需要授权远程访问白名单:
- 登录mysql
- 选择mysql库
use mysql;
- 允许root账号能被所有ip远程访问
update user set host = '%' where user = 'root';
- 刷新权限信息到内存中
flush privileges;
一般情况下,到这里其实就已经完成了MySQL远程连接的配置,但是由于我们使用的是8版本,导致后面在测试远程连接的过程中又出现了另一个错误:
报错就算了,居然还带乱码,所幸我们能通过错误码2059来判定报错类型.经过查询发现,该报错信息是源于MySQL8之前的版本中加密规则是mysql_native_password,而在MySQL8之后,加密规则是caching_sha2_password,所以我们需要重新修改加密规则.
5. 同样在mysql库下更改加密策略
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
- 更改加密策略后,我们需要重新设置一下登录密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 刷新权限
FLUSH PRIVILEGES;
设置完毕后,测试远程连接,终于看到了熟悉的’成功’字样.
四.总结
目前只是简单介绍了MySQL8的安装步骤,我对8版本的JSON处理新特性很感兴趣,下次在体验过后再做分享.
参考资料: