ubuntu 下 mysql 拒绝访问问题
今天在 ubuntu 中安装 mysql 后出现 Access denied for user 'root'@'localhost'
问题,整个安装过程中也没有提示要设置用户和密码呀,咋就拒绝访问了呢,本文就解决一下这个问题!
问题分析
mysql 具有用户密码访问机制,其实 mysql 安装后默认有用户 root
,那拒绝访问,那就是没有输入正确的密码,所以我们能想到的一种解决方案就是修改密码。
问题解决
越过访问限制
连接上 mysql 后我们才能修改密码,所以有没有一种可以临时越过访问限制的方法呢?当然有,要不接下来我们还写啥!
-
管理员权限编辑文件
/etc/mysql/mysql.conf.d/mysqld.cnf
; -
找到其中的
[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 ...
-
重启 mysql 服务,一般可通过以下命名完成
sudo service mysql restart
-
此时可以通过
mysql
命令就可以连接数据库了
修改 root 用户密码
在小节越过访问限制中已经可以越过访问限制连接数据库了,下面连接数据库,由于操作命令比较多,所以先准备一个 sql
文件,最后执行文件中 sql 命令。
-
准备用于修改 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
就是要修改的密码,密码修改为您想使用的密码即可 -
执行命令
mysql
连接数据库,然后执行 mysql 命令:source setpw.sql
-
(CTRL+D 或者 执行命令 quit;)断开 mysql 连接;
恢复访问限制
-
编辑文件
/etc/mysql/mysql.conf.d/mysqld.cnf
,删除上面小节中加上的skip-grant-tables
; -
重启 mysql 服务
sudo service mysql restart
执行命令
mysql -uroot -p
连接数据库,输入自己的密码即可连接数据库!