1、报错与原因
今天,使用 Navicat 远程登录一台 PC 机的 mysql(linux 系统),结果报错如下:
从报错信息来看,是用户 sdt 登录 100.10.51.32 被否决了,但是使用密码是正确的,其错误原因可能有两个:
- 用户名错误
- 该 PC 机拒绝远程访问,即本地所在 IP 没有访问权限
第一个原因很快被我否决了,尝试根据第二个可能错误原因去解决。
本地所在的 ip 没有访问权限,被拒绝访问,需要我们在数据库为我们的本地 ip 添加访问权限。
2、解决方案
第一步:登录 PC 机 mysql
打开 PC 机的命令行,输入:
mysql -u root -p
然后输入密码,即可登录 mysql。
不过,输入上面命令可能会遇到如下问题。
问题一
-bash: mysql: command not found
这是由于系统默认会查找的/usr/bin 中下的命令,如果这个命令不在这个目录下,当然会找不到命令。
我们需要做的就是映射一个链接到的/usr/仓目录下,相当于建立一个链接文件,比如我的 mysql 文件在/usr/local/mysql/bin/mysql,则需要执行命令如下:
ln -s /usr/local/mysql/bin/mysql /usr/bin
注意:此时可能会遇到权限问题:ln: failed to create symbolic link ‘/usr/bin/mysql’: Permission denied
此时使用如下命令切换到 root 用户,再执行上面命令即可:
sudo su
如何找到 linux 系统上,mysql 的安装路径和可运行路径:
# mysql安装路径
whereis mysql
# mysql可运行路径
which mysql
问题二
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
错误原因可能有两个:
- mysql 登录命令输入错误
- 密码输入错误
我遇到这个问题是第一个原因,我输入的 mysql 登录命令如下:
# 错误输入命令,p前面少了-,这就略过了输入密码的步骤
mysql -u root p
第二步:修改数据库访问权限
有两种修改方案:
# 第一种:所有的ip都有资格访问该数据库
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 第二种:为指定的ip开放访问权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.12.1' IDENTIFIED BY ‘password' WITH GRANT OPTION;
注意:要将上面的 password 修改为你自己的登录密码,root 账户也可以修改
第三步:刷新权限,重启 mysql
继续 mysql 登录状态,输入如下命令:
flush privileges;
执行成功后,退出 mysql(输入 quit 或者 exit)。
重启 mysql 即可成功连接。
这里重点说一下重启 mysql 命令,这个命令会根据你的 mysql 配置不同而不同,比如我使用的重启命令为:
service mysql restart
有的 service 重启命令为:
service mysqld restart
service mysql.server restart
三者的区别在于,你在/etc/init.d/(这个目录是 service 的相关目录)目录下的配置,比如我的是:
可以看到,该目录存在 mysql.service,那我要重启 mysql,可以有下面三种方法:
# 使用service命令
service mysql restart
# 使用service命令,不过mysql用全称
service mysql.server restart
# 使用脚本命令
/etc/init.d/mysql.server restart
你也可以将 mysql.server 重名为 mysqld,那么重启命令就要将 mysql 或者 mysql.server 修改为 mysqld:
# 使用service命令
service mysqld restart
# 使用脚本命令
/etc/init.d/mysqld restart