mariadb mysql -u root -p 显示Access denied解决办法

问题

在ubuntu下执行mysql -u root -p显示:

‘Access denied for user ‘root‘@‘localhost‘ (using password: YES)‘

应该算是经典问题,stackoverflow上有很多高票回答,这样报错的原因应该是密码不对。解决方式无外乎是通过skip-grant-tables绕开密码登陆mysql,然后修改密码。

参考:https://stackoverflow.com/questions/41645309/mysql-error-access-denied-for-user-rootlocalhost

解决办法

1、执行:

$ sudo mysqld_safe --skip-grant-tables --skip-networking

注意staoverflow中参考的代码在networking后还有个&,我的电脑上没有&但是生效了。之前敲$ sudo mysqld_safe --skip-grant-tables &也没生效,不知道为什么。

2、这时mariadb应该不需要密码可以直接进了:

$ mysql -u root

3、进去之后我们需要改密码,改密码前先刷新数据库,大小写无所谓:

mysql> FLUSH PRIVILEGES;

这时报错:

不要方,这也不是什么大问题,就是名为‘procs_priv‘的表损坏了。

5、修复table,修复前先找到这张表属于哪个database下,我的openstack的mariadb的这张表属于 ‘mysql‘ 数据库下。OK,回顾以下mysql基本操作:

修复表格参考:

https://syslint.com/blog/tutorial/got-error-130-incorrect-file-format-some_table-mysql-issue-fix/

https://forums.mysql.com/read.php?34,164324=

4、验证效果,重新刷新数据库,成功:

5、改密码

接着看之前参考skip命令的那条stackoverflow的高票回答,给了几种改密码的方式,但是对我都不适用:

基本上都是因为使用--skip-grant-tables进的mariadb,属于匿名用户:

6、匿名用户下修改密码

尝试了这里的方案:https://ourcodeworld.com/articles/read/704/how-to-change-the-password-of-a-mysql-user-from-the-command-line,无效;

后来尝试了这里的方案,成功:https://help.ubuntu.com/community/MysqlPasswordReset

改root账户的密码,改所有远程连接到mariadb的用户的密码:

具体操作的时候,本来应该3,4配套,3不生效故使用5,5生效6不生效,故改用4,敲完这些就可以退出数据库了,效果如下:

6、重启mariadb

7、验证

还尝试过的方案

1、参考上述url在配置文件里添加--skip-grant-tables:我的mysql目录下配置文件众多,在一般认为的配置文件my.cnf里又导入了两个目录下的配置文件,反正都改了也没生效;

2、在终端中输入:

$ sudo mysqld_safe --skip-grant-tables &

之后使用$ mysql -u root是进不去的,后来发现使用上面那条有效的命令,有时也是不能不用密码进mariadb,猜测之前使用这条命令不生效,有可能是命令不对,也有可能是mariadb时好时坏吧

3、查看错误日志

因为尝试上面两种方法一直无果我想的是通过查看mariadb日志找报错原因。

参考官方:https://mariadb.com/kb/en/library/error-log/

官方的说法是如果你不指定log位置,那么错误日志在datadir这个路径下,datadir是mariadb的一个全局变量,进入mariadb后可以通过命令行显示datadir的实际路径,但问题就是进不去啊,进不去就看不了路径;

那么指定log位置吧,进入配置文件后定义error_log,不管是自定义路径下的文件名是已存在的,还是新建的,重新mysql -u root -p时log总是空的。

事后分析原因:错误日志是在数据库mariadb启动或运行时发生错误才会打日志,进不去mariadb是因为密码不对的原因,数据库本身是能启动的,所以可能正常来说就是不会产生log。

顺便学到的mysql/mariadb知识小结

1、openstack中用到的Mysql的配置文件目录

mysql配置文件my.cnf位置:/etc/mysql/my.cnf

my.cnf最后两行有

!includeddir /..../

把该目录下的所有配置文件都导入进来了

2、openstack用到的Mysql的log位置:

/var/log/mysql

如果sudo CLI进不去,可以用sudo -s进去

3、数据库只运行在控制节点上

4、mariadb属于Mysql的一个分支,所以很多时候显示的是mysql,比如命令行中出现的很多都是mysql。辨别数据库是mysql还是mariadb,可以这样:

原文地址:https://www.cnblogs.com/IcarusYu/p/10924989.html

时间: 2024-08-05 13:10:37

mariadb mysql -u root -p 显示Access denied解决办法的相关文章

MySQL 5.7 免安装版 access denied 解决办法

MySQL 5.7 在Windows 下安装的过程很多人都写过了 但是安装完成后用 root 第一次登录时需要密码 可是我根本就没设密码嘛... 搞了半天最后终于搞定了 在执行 mysqld --initialize --console 这条命令时会生成一个临时密码... 会出现一个类似于 [Note] A temporary password is generated for [email protected]localhost: 9t*h3XLlMXy< 这样的命令.后面的是mysql为初次

关于Mysql输入密码显示access denied for user &#39;root&#39;@&#39;localhost&#39;(using password:YES)的问题

在网上找了一篇大神的 处理 安装Mysql后用管理员权限右键打开cmd 1. 管理员登陆系统,停止mysql服务或者结束mysqld-nt进程:2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入命令行:3. 运行 D:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld-nt --skip-grant-tables启动mysql,关闭权限的检查:(本人运行这条语句的时候显示未知命令于是直接cmd的下面那段 m

mysql报错:Access denied for user &#39;root&#39;@&#39;localhost&#39; 的一次解决办法

Centos6.5 X64,Mysql 5.6.20 X64 均是64位 顺便记录一下,方便后来人. 1.java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 确认用户名.密码是正确的. select * from mysql.user;之后,发现 没有localhost用户 可以复制一行 127.0.0.1的记录,然后再次修改密码 mysql> UPDATE user SET

解决MySql 数据库 提示:1045 access denied for user &#39;root&#39;@&#39;localhost&#39; using password yes

今天想用用MySQL 数据库  谁知道老提示 1045 access denied for user 'root'@'localhost' using password yes 最后在csdn 上找到了答案 来源:http://bbs.csdn.NET/topics/310006640     13楼 解决: 1. 开始 --> cmd   --> net stop mysql  (停用MySQL服务  没启动的可以省略) 2. 找到安装路径 MySQL Server 5.1下的my.ini

onethink框架显示Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)

本地开发的时候使用的用户名是root,密码为空,它会生成两份.一份在Common/config.php里面,还有一份在Application\User\Conf/config.php 在linux环境当中,把Common/config.php配置更新之后,也要把User/Conf/config.php里的'UC_DB_DSN'更改掉.否则会出现如上错误. 当然也有可能是你的数据库密码真的错了.所以请核对一下. onethink框架显示Access denied for user 'root'@'

解决mysql提示错误:1045 access denied for user &#39;root&#39;@&#39;localhost&#39; using password yes

少年,请看下图. 1. 开一个dos 2. 再开一个dos 3.即可.补充一个linux下的: 解决mysql提示错误:1045 access denied for user 'root'@'localhost' using password yes

连接MySQL数据库出现错误:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password:YES)

自己在重拾MySQL数据库的时候,第一次连接数据库时候出现Access denied for user 'root'@'localhost' (using password:YES)的错误.查了相关资料,发现是root帐户默认不开放远程访问权限,所以需要修改一下相关权限.可以执行如下的解决方法. 打开MySQL目录下的my.ini文件,在文件的最后添加一行"skip-grant-tables",保存并关闭文件. 重启MySQL服务. 通过命令行进入MySQL的BIN目录,输入"

Mysql:ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)

Mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) Linux: MySQL安装时默认的用户是root,这里的root是指数据库的用户,root密码一般在初始化MySQL时存放在你的日志文件中,日志文件的存放路径可以通过my.cnf文件进行自定义. 使用如下方法即可解决,已验证可行. #1.停止mysql数据库 /etc/init.d/mysqld stop #2.执行

连接mysql报错Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)解决办法

1.打开MySQL目录下的my.ini文件,在文件的最后添加一行"skip-grant-tables"(免密码登录),保存并关闭文件,重启MySQL服务. 2.通过命令行进入MySQL的BIN目录,输入"mysql -u root -p"(不输入密码),回车即可进入数据库. 3.执行"use mysql;",使用mysql数据库. 4.修改密码:执行" update MySQL.user set authentication_strin