MySQL常见问题的原因及解决方法

文章讲述了在使用Node.js连接MySQL数据库时遇到的ER_NOT_SUPPORTED_AUTH_MODE错误,原因是MySQL8.0后的加密协议不被支持。解决方法包括更改用户密码的加密方式至mysql_native_password。此外,文章还讨论了MySQL自增字段不连续的原因,如唯一键冲突和删除记录,并提供了通过更新ID和使用TRUNCATE语句来解决不连续问题的方法。
摘要由CSDN通过智能技术生成

目录

一、node连接mysql数据库报错

原因

解决方法

二、MySQL自增字段不连续

原因

1、唯一键冲突导致自增字段值不连续

2、删除字段导致自增字段值不连续

3、其他

解决方法


一、node连接mysql数据库报错

用 nodejs 连接 mysql 数据库的时候可能会有报错如下:

ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因

MySQL8.0 之前的版本中加密规则是:mysql_native_password

为了提供更安全的密码加密方式,从 MySQL 8.0版本开始,默认的密码加密方式是:caching_sha2_password,这个加密的方式在node中不支持,所以需要去修改密码为旧版本。

解决方法

cmd 管理员进入MySQL文件夹的 bin 目录

输入以下命令:

mysql -u root -p

输入自己数据库的密码,进入数据库

查看mysql的版本,发现是8以后的,所以加密规则会变

select version();

修改加密方式(password是你正在使用的密码


ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
 
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
 

如果输入命令后发现报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'

可以查看,会看到root后%

use mysql;

select user, host from user where user = 'root';

所以需要修改上面两条命令为:


ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
 

刷新权限,让修改生效

FLUSH PRIVILEGES;

可以查看一下修改的加密方式是否变了:

select user,host,plugin from user where user='rootx';

二、MySQL自增字段不连续

原因

1、唯一键冲突导致自增字段值不连续

由于name字段有唯一键约束,当插入相同内容的字段时,会报 Duplicate key error(唯一键冲突)。

在这之后,在插入新数据时,自增 id 就是 3,这样就出现了自增字段值不连续的情况。

2、删除字段导致自增字段值不连续

删除字段后,自增字段不会补齐而是按照既定数值继续向下排列,会导致自增数字不连续。

3、其他

还有一些情况会造成自增不连续,比如事务回滚导致的自增键不连续、自增锁优化带来的不连续等。

解决方法

执行下面代码,会发现由于唯一键冲突导致自增不连续的数据表的id字段的自增连续了

SET @i=0;

UPDATE `tablename` SET `id`=(@i:=@i+1);

ALTER TABLE `tablename` AUTO_INCREMENT=0

如果想要清空表的话可以使用 TRUNCATE table 'good' 语句来操作,比delete效率高,并且会将自增归零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值