ubuntu 下 mysql 拒绝访问问题

今天在 ubuntu 中安装 mysql 后出现 Access denied for user 'root'@'localhost' 问题,整个安装过程中也没有提示要设置用户和密码呀,咋就拒绝访问了呢,本文就解决一下这个问题!

问题分析

mysql 具有用户密码访问机制,其实 mysql 安装后默认有用户 root ,那拒绝访问,那就是没有输入正确的密码,所以我们能想到的一种解决方案就是修改密码。

问题解决

越过访问限制

连接上 mysql 后我们才能修改密码,所以有没有一种可以临时越过访问限制的方法呢?当然有,要不接下来我们还写啥!

  1. 管理员权限编辑文件 /etc/mysql/mysql.conf.d/mysqld.cnf;

  2. 找到其中的 [mysqld] 配置段,大概从 27 行开始,在 skip-external-locking (大概在39行) 下面加入一行内容 skip-grant-tables,最终如下:

    ...
    [mysqld]
    #
    # * Basic Settings
    #
    user		= mysql
    pid-file	= /var/run/mysqld/mysqld.pid
    socket		= /var/run/mysqld/mysqld.sock
    port		= 3306
    basedir		= /usr
    datadir		= /var/lib/mysql
    tmpdir		= /tmp
    lc-messages-dir	= /usr/share/mysql
    skip-external-locking
    skip-grant-tables
    ...
    
  3. 重启 mysql 服务,一般可通过以下命名完成

    sudo service mysql restart
    
  4. 此时可以通过 mysql 命令就可以连接数据库了

修改 root 用户密码

在小节越过访问限制中已经可以越过访问限制连接数据库了,下面连接数据库,由于操作命令比较多,所以先准备一个 sql 文件,最后执行文件中 sql 命令。

  1. 准备用于修改 root 密码的 setpw.sql 文件:

    use mysql;
    update mysql.user set authentication_string=password('123456') where user='root' and Host ='localhost';
    update user set plugin="mysql_native_password";
    flush privileges;
    

    上面代码第二行中的 123456 就是要修改的密码,密码修改为您想使用的密码即可

  2. 执行命令 mysql 连接数据库,然后执行 mysql 命令:

    source setpw.sql
    
  3. (CTRL+D 或者 执行命令 quit;)断开 mysql 连接;

恢复访问限制

  1. 编辑文件 /etc/mysql/mysql.conf.d/mysqld.cnf,删除上面小节中加上的 skip-grant-tables;

  2. 重启 mysql 服务

    sudo service mysql restart
    

    执行命令 mysql -uroot -p 连接数据库,输入自己的密码即可连接数据库!