zoukankan      html  css  js  c++  java
  • 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,可以这样:
  • 相关阅读:
    android系统属性获取及设置
    Android Strings.xml To CSV / Excel互转
    android adb命令 抓取系统各种 log
    Android开源日志库Logger的使用
    解决git仓库从http转为ssh所要处理的问题
    PHP中var_dump
    oracle文字与格式字符串不匹配的解决
    Apache服务器和tomcat服务器有什么区别?
    【手把手教你Maven】构建过程
    Spring MVC页面重定向
  • 原文地址:https://www.cnblogs.com/IcarusYu/p/10924989.html
Copyright © 2011-2022 走看看