情景: [Err] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause
升级Mysql,将Mysql升级到5.7版本以上就不会出现类似的问题了。
第一步:下载安装包
官方地址:https://dev.mysql.com/downloads/mysql/
这里第一项是在线安装,第二项是离线包安装
第二步,安装
我这里选择的是Custom自定义安装,也可以选择Default默认
因为我是自定义安装,所以我只选择了下面这2个安装内容
这时如果出现下面的提示,代表机器没有VC的环境,使安装无法进行下去,这时需要先下载好VC环境
下载VC环境:官方地址
如果地址失效,也可以百度:microsoft visual c++ 2015 进行下载
环境下载安装完后,我们再回来重新安装,发现刚才此步会变成
接下去一路安装下去
上面这步是创建一个用户,然后接着往下走
安装完成后,可以再服务里,看到MYSQL服务已经启动,bin目录(默认为:C:\Program Files\MySQL\MySQL Server 8.0\bin)
但此时如果我们用Navicat等第三方应用登录,会提示:
Authentication plugin 'caching_sha2_password' cannot be loaded
经查看发现,8.0改变了 身份验证插件 ,
解决方式
ALTER USER stocker@localhost IDENTIFIED WITH mysql_native_password BY 'stocker';
1
如果是最新版本的第三方软件,可能已经自动改变了身份验证,无需手动修改
第三步 配置环境变量
将bin路径添加到变量值中,前后以 ; 开头结尾
mysql -uroot -p进入
status查看状态
查看编码信息:
show variables like '%colla%';
show variables like '%char%';
第四步 修改配置文件my.ini(mysql8.0的配置文件默认在C:\ProgramData\MySQL\MySQL Server 8.0隐身文件。同时也要复制一份到C:\Program Files\MySQL\MySQL Server 8.0与bin目录同级)
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=E:\\software\\mysql\\mysql-8.0.11-winx64 # 切记此处一定要用双斜杠\\,单斜杠我这里会出错,不过看别人的教程,有的是单斜杠。自己尝试吧
# 设置mysql数据库的数据的存放目录
datadir=E:\\software\\mysql\\mysql-8.0.11-winx64\\Data # 此处同上
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
重启mysql服务
net stop mysql80
net start mysql80
二、navicat 连接 mysql 出现Client does not support authentication protocol requested by server解决方案
USE mysql;
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘831015’;
FLUSH PRIVILEGES;
root是用户名,localhost是ip地址127.0.0.1都是特指本机,mysql_native_password是旧的密码验证机制,831015是密码,最后别忘了分号;
三、此版本使用caching_sha2_password的身份验证机制。在以往的版本中采用的是mysql_native_password 这种验证机制。
这是这个坑导致后面,Navicat连接会报错:
1251--Client does not support authentication protocol requested by server
PHP连接时也报错:
Unexpected server respose while doing caching_sha2 auth: 109
另外,采用这种机制的验证方式似乎对密码的设置要求也提高了,不能是纯数字!!!!!!!!!!(我的密码设置成数字+字符了)否则会报这个错:
ERROR 1819 (HY000): Your password does notsatisfy the current policy requirements
解决策略
更改验证方式,先进入mysql,输入:
select host,user,plugin,authentication_string from mysql.user;
得到:
为了直观,我创建了个php用户,可以看到它默认的方式总是caching…bra bra bra,root是我修改过的。
确认是这个caching搞的鬼后:输入
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '!1234' //更改验证方式
1
回车,输入下面这个刷新
FLUSH PRIVILEGES;
mysql配置文件加入
default_authentication_plugin=mysql_native_password //加入这句话
重启mysql服务