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版本的想法

-
先去官网下载了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文件
文件的内容:
[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目录
step3. 重启mysql数据库,然后登陆
step4. 进入数据库后就简单了,查看user表的用户名密码,这里的密码是加密过的
step5. 修改root账号的密码, update mysql.user set authentication_string=password('修改的密码') where user='root';
update mysql.user set authentication_string=password('修改的密码') where user='root';
authentication_string是字段名,password是加密
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'
;