天天看点

MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结

MySQL5.7安装遇到的问题总结

一、MySQL5.5升级到MySQL5.7版本原因

前几天准备建一张表,DDL如下图,结果报了一个这样的错误

[Err] [Dtf] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

查了相关资料才知道 MySql 5.5和MySql 5.6之后版本的区别:5.5 版本只能有一个Timestamp类型的字段设置CURRENT_TIMESTAMP默认值

于是就有了升级MySql 5.7版本的想法

MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
  • 先去官网下载了5.7版本的压缩包
  • 管理员身份打开cmd,找到5.5版本的bin目录下,执行

    mysqld remove

    ,先卸载掉之前版本的
  • 解压5.7版本的压缩包,管理员身份打开cmd,找到5.7版本的bin目录下,执行

    mysqld install

    ,安装新版本
  • 之后。。。。。奇怪的事情又发生了。

二、MySQL5.7版本的root账号默认密码

本以为安装后就万事大吉了,谁知出现了新的问题

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)

他说我密码不对,坚信自己密码正确的情况下又试了几次,结果以失败告终,于是又查了查资料

原话是这么说的:出于安全考虑,MySQL 5.7 默认安装完成后,密码是随机的,在没有初始化之前是没有办法登录的。

于是继续找方法,最终找到了一个在这分享给大家:

step1. 在mysql的bin同级目录下新建my.ini文件
MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
文件的内容:
[mysql]

# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]

#跳过密码登陆

skip-grant-tables

#设置3306端口

port = 3306

# 设置mysql的安装目录

basedir=D:\\sql\\mysql-5.7.34-winx64

# 设置mysql数据库的数据的存放目录

datadir=D:\\sql\\mysql-5.7.34-winx64\\data

# 允许最大连接数

max_connections=200

# 服务端使用的字符集默认为8比特编码的latin1字符集

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB
           
其中跳过密码登陆才是我们的重点哈。
step2. 初始化data目录
MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
step3. 重启mysql数据库,然后登陆
MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
step4. 进入数据库后就简单了,查看user表的用户名密码,这里的密码是加密过的
MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
step5. 修改root账号的密码,

update mysql.user set authentication_string=password('修改的密码') where user='root';

authentication_string是字段名,password是加密
MySQL5.7安装遇到的问题MySQL5.7安装遇到的问题总结
step6. 编辑my.ini,去掉跳过密码登陆,然后重启MySQL。大功告成!

三、MySQL5.7密码过期问题

mysql 5.7安装完后登陆报错,意思是密码过期

ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.

step1. 在my.ini mysqld 部分加入 skip-grant-tables 参数。
step2. 重启mysql数据库,然后登陆
step3. 查看mysql的用户状态
  • 发现password_expired :y说明密码已经过期,可以改成N,就是未过期
  • update mysql.user set password_expired='N' where user = 'root'

    ;
step4. 注释掉skip-grant-tables参数,重启mysql。

update mysql.user set password_expired='N' where user = 'root'

;

step4. 注释掉skip-grant-tables参数,重启mysql。