跳过mysql密码校验
跳过mysql校验方式有两种:
1. 修改 配置文件:
在mysqld下添加如下语句,并重启mysql。skip-grant-tables;
注意:
此方式在 版本以及更高版本不再适用。情况(问题)是重启时无法启动。不推荐
2. 通过以下管理员窗口命令启动mysql服务:
mysqld --console --skip-grant-tables --shared-memory
正常启动实例如下:
2023-11-04T02:16:05.457267Z 0 [System] [MY-010116] [Server] D:\1 Program software\mysql\MySQL Server 8.0\bin\ (mysqld 8.0.34) starting as process 19332
2023-11-04T02:16:05.465009Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-11-04T02:16:05.689071Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-11-04T02:16:05.817080Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2023-11-04T02:16:05.886202Z 0 [Warning] [MY-010068] [Server] CA certificate is self signed.
2023-11-04T02:16:05.886295Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2023-11-04T02:16:06.914627Z 0 [System] [MY-010931] [Server] D:\1 Program software\mysql\MySQL Server 8.0\bin\: ready for connections. Version: '8.0.34' socket: '' port: 0 MySQL Community Server - GPL.
|
注意:
以上为正常启动示例,光标会一直闪烁表示已经无密码验证启动。
使用命令启动前必须先关闭mysql服务,否则报以下错误:
2023-11-04T02:01:40.522003Z 0 [System] [MY-010116] [Server] D:\1 Program software\mysql\MySQL Server 8.0\bin\ (mysqld 8.0.34) starting as process 13980
2023-11-04T02:01:40.529938Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-11-04T02:01:40.530554Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2023-11-04T02:01:40.530599Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2023-11-04T02:01:40.530631Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2023-11-04T02:01:40.530852Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2023-11-04T02:01:40.530890Z 0 [ERROR] [MY-010119] [Server] Aborting
2023-11-04T02:01:40.531154Z 0 [System] [MY-010910] [Server] D:\1 Program software\mysql\MySQL Server 8.0\bin\: Shutdown complete (mysqld 8.0.34) MySQL Community Server - GPL.
C:\Users\li>
还有一种情况,如果安装时mysql安装位置和放置data的位置不同,或者使用默认(默认data位置:C:\ProgramData\MySQL\MySQL Server 8.0\Data
)。
此时使用以下命令跳过验证:mysqld --defaults-file=“C:\ProgramData\MySQL\MySQL Server 8.0\” --console --skip-grant-tables --shared-memory
避免出现找不到data文件错误
参考链接:采用其指定文件跳转命令
如果不想使用默认安装位置,导致此问题,可以参考以下安装链接:
最新MySQL安装(重装)、卸载、配置全教程
最后:另外打开一个拥有管理员权限的命令窗口,输入 mysql 回车即可免密码进入。(前提:必须把mysql的bin路径添加到系统环境变量path下)
3. 修改密码
如果密码获取其他原因需要修改密码,以上跳过验证是必要操作。
- 进入mysql之后,
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
为何使用这个命令:mysql8.0较旧版更新了密码加密方式
使用该命令时,日志会提示以下内容:Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
OK,既然已经提示过期了,那我们把mysql_native_password
替换成caching_sha2_password
。
最终命令使用如下:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';
查看日志方式:MySql运维篇—008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤 - 可能会出现如下错误:
The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
不用惊慌,刷新一下权限继续即可。flush privileges;
至此修改密码完成。
此外修改密码方式多种多样,推荐如下参考链接:
MySQL8.0!!!登录失败|ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password:YES
4.修改密码问题
我先使用source命令把一个sql文件运行了。
我的密码突然被篡改是因为我在mysql正常的时候,反复尝试mysqldump -uroot -p --all-databases >
进行数据导出,因为导出内容一直是
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
虽然没有报错,但是这也不对,一直没有办法解决,所以我反复尝试,
最后成功让mysql自己修改了密码,不让我再操作 … …
本来数据导不出来就一肚子火,这一下直接骂了娘,我很抱歉@``@
然后我开始修改密码:
我使用了 3 的命令修改密码,出现了以下错误:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '123456';
ERROR 1726 (HY000): Storage engine 'MyISAM' does not support system tables. []
首先我通过百度大法是这样修改的alter table ENGINE=InnoDB;
就把这个表的存储引擎设置成innoDB,虽然默认就是innoDB。用了这个user表不报错了,但是 db 表也开始报一摸一样的错误。db表改了又出来表错误的提示。这样算是不行了。
然后我找到了另一个参考:如何修复错误1726 (HY000):存储引擎’MyISAM‘不支持系统表。在MySQL8.0中创建用户后
里面有一段如下:
不要运行alter来强制它将更改为innodb。您将得到一个不同的错误,例如“无法从加载。该表可能已损坏”。如果你这样做了,下面也会解决这个问题。
我从5.7恢复了一个转储到一个新的8.0服务器,然后出现了这个问题。
要修复它,请停止mysql服务,然后运行以下命令,使mysql 8升级内部模式:
mysqld --upgrade=FORCE
您可以查看日志以查看其进度,以及是否有任何错误。
升级???!!!!!!
哦谢特!!!
我想起来刚开始导入的sql文件是从mysql57导出来的,用source导入的是所有表包括系统表!而我的mysql是8+版本。可能在这个过程中使系统文件版本倒退了。
然后我运行mysqld --upgrade=FORCE
升级之后果然不再出现以上提示。nice
另外,当我修改使用 3 命令修改密码失败时,我还尝试了直接使用update直接修改密码。
第一步-密码置空:update user set authentication_string='' where user='root';
第二步-无密码进入:
推出跳过校验登录窗口,正常登录,输入密码的时候直接回车。因为我们的密码就是空的。
在没有升级之前,我尝试 alter… 命令后还是报错。我侥幸的想使用密码置空的命令来修改密码:update user set authentication_string='123456' where user='root';
这样是错误的,它直接把需要加密的密码字段设置成了123456,使用123456登录不上.
第三步:
必须修改版本问题,再使用alter修改密码。
番外
有此篇文章的问题时,我是为了解决密码被突然篡改的问题。
会涉及到密码失效、密码过期策略和密码格式设置等问题。所以放几个参考链接供大家参考:
用户密码过期那些事。-知乎
密码复杂度设置
其实我还有一个大问题没有解决:为什么mysql密码会失效呢,经常失效还怎么玩。我出现了昨天安装今天密码失效的情况,确定密码是对的,就是失效了;还出现过线上问题,mysql密码直接被篡改并且数据库丢失,还好是个小东西再装一遍也没大问题,但是再出现这种问题没法和老板交代了,只能提桶跑路了呜呜呜。如果有大佬可以指点一二的话,必当顶礼膜拜。欢迎留言