2021年9月3日更新补充


真的心累,本来是个小问题,但是网上帖子都基本差不多,基本都是相同的操作,导致搜了半个多小时才解决

一、首先为什么要重新发一次呢,因为我发现上次写的这个记录是不完善甚至是错的,因为我忽略了一个操作,其次在今天再次去解决这个问题的时候,发现了一个比较正确的解决方法。下面我基本以上一次的内容为基础,因为上一次的内容仅仅完成了一部分的操作,并未解决真正的问题。也庆幸上次写的那篇随笔没有很多人去看,不然和网上的帖子一样会误导很多人,而且也成为了一篇没有用的帖子。

二、我会在每一个步骤上打上补充,避免误操作。而且希望一步步往下看,因为最后还会有一个根据这些网上普遍的操作总结出来的问题。


以下是上次文章内容,文章标题:记录"ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES/NO) ”错误


前言

前段时间MySQL莫名的挂了,导致我数据都被清了,数据库也连不上;具体原因我也没去多看,今天顺便去搜了一下解决方法,没想到重置了一下密码竟然好了,但是数据还是被清了,有时间再去看看具体原因吧。

下面是我偶然搜到的一篇文章还是第一次这么顺利的解决了。


错误描述

首先这个问题我是在我的云服务器上遇见的,以前其实也遇到过,但经常是当时解决了,并未去记录,时间一长一些操作就忘了,但个人记得这个错误不管在Linux和Windows上都出现过,但是基本上相似,此篇记录主要针对Linux上的错误,在其中我也会提一些Windows上出现的问题。


解决方式

一、先停止mysql

/etc/init.d/mysqld stop

(如果已经查看了MySQL服务进程的话可以直接 kill -9 [PID] 杀死进程!)

二、执行以下命令,可以跳过登录验证

补充点

(补充一种方式,还是按照这个新方式来吧,也可以按照我上次写的方法来都行,就是第二种方式):

可能有的人对下面的命令不理解,所以也可以采用这种方式

vim /etc/my.cnf                #输入这条命令去编辑这个文件

然后在文件中添加下面这段语句

[mysqld]
skip-grant-tables

要注意的点来了,就是所有操作完毕后,记得把这句话给注释了(尽量是删除的时候给“skip-grant-tables”这句话之前添加一个“#”最为方便,不然每次都得重新输一遍这句话),不然你以为成功了,而我就是最傻的那个,原本以为成功了,今天才发现是这句话没有注释,直接让mysql跳过了验证,成功登录了,这种方式是极其不正确的!!!

第二种方式:

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

注意:如果在window上的话,我看很多文章去说找到“my.ini”文件,但对第一次使用mysql的人来说是大可能找不见的,如果可以的话可以去网上搜一下这个文件在哪。因为我当时是使用的解压缩的方式进行的安装,直接在文件夹中新建的这个文件,然后在当中去编辑以下内容,可以参考一下我的这篇记录:MySQL巩固学习记录(一)

这是window上的安装配置文件内容:

[mysqld]
basedir=D:\Program Files\mysql-5.7\
datadir=D:\Program Files\mysql-5.7\data\
port=3306
skip-grant-tables #跳过登录验证

三、开始登录数据库(以root身份)

mysql -u root -p

四、更新root用户密码

MySQL5.7之前

UPDATE user SET Password=PASSWORD('你的密码') where USER='root';

MySQL5.7之后(包括5.7)

UPDATE user SET authentication_string=PASSWORD('你的密码') where USER='root';

五、刷新权限

FLUSH PRIVILEGES;

六、退出并重启

mysql> exit

mysql> /etc/init.d/mysqld restart

七、重新登录

mysql -uroot -p Enter password: <输入你刚才新设的密码>

八、结束

如果以上步骤如果不成功,多试一次,如果不行的话再换别的办法;至于window的话可能上面就跳过登录验证那块有点小问题,其他的话,我感觉window上解决问题比较容易一点,可以去博客园中搜搜看看,或者腾讯云社区搜搜看看,感觉这两个地方的解决方法稍微靠谱点。

本文参考于https://cloud.tencent.com/developer/article/1188636


以上就是上次原文,重点来了

问题一:

你以为这就结束了,不不不,通常第一遍是忘了注释掉文件中的“skip-grant-tables”这句话,误以为成功了。

问题二:

当再次把这句话注释掉时,问题出来了,还是会和以前一样,出现“ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES/NO)”错误,当然在这里我也不知道和我情况一样的兄弟们有多少,所以下面我说说我的情况:问题再次出现,我去网上找解决方法,偶然看到有人说应该是mysql数据库中user表中缺数据着,也就是权限不够。所以我按着这条路下去,发现问题解决了。

具体解决方式如下:

一、去查看mysql数据库中user表

这是我安装的新的本地数据库中user的原始信息列之一也就是root用户



那远程服务器上的怎么看?

第一种方法:把“skip-grant-tables”这句跳过权限验证在上面我提到的那个文件中加上,然后使用sql语句去查看。

第二种方法:依旧把上面这个语句加上,只不过这次我们在远程去看,也就是像Navicat这种图形化界面去看,看看到底自己表中信息是否缺失root用户信息。

二、把用户信息添加上

这里我直接使用的是我本地新装数据库中user表中的数据,root用户密码暂且设置为123456

sql文件直接放这了:https://files.cnblogs.com/files/yuyueq/user.zip

下面是源文件内容:

/*
Navicat Premium Data Transfer Source Server : wenxin.du
Source Server Type : MySQL
Source Server Version : 50735
Source Host : localhost:3306
Source Schema : mysql Target Server Type : MySQL
Target Server Version : 50735
File Encoding : 65001 Date: 03/09/2021 14:20:18
*/ SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`Host` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Insert_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Update_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Delete_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Drop_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Reload_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Process_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`File_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Grant_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`References_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Index_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Alter_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Show_db_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Super_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Execute_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_view_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Show_view_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_user_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Event_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Trigger_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`ssl_cipher` blob NOT NULL,
`x509_issuer` blob NOT NULL,
`x509_subject` blob NOT NULL,
`max_questions` int(11) UNSIGNED NOT NULL DEFAULT 0,
`max_updates` int(11) UNSIGNED NOT NULL DEFAULT 0,
`max_connections` int(11) UNSIGNED NOT NULL DEFAULT 0,
`max_user_connections` int(11) UNSIGNED NOT NULL DEFAULT 0,
`plugin` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password',
`authentication_string` text CHARACTER SET utf8 COLLATE utf8_bin NULL,
`password_expired` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`password_last_changed` timestamp NULL DEFAULT NULL,
`password_lifetime` smallint(5) UNSIGNED NULL DEFAULT NULL,
`account_locked` enum('N','Y') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
PRIMARY KEY (`Host`, `User`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'Users and global privileges' ROW_FORMAT = Dynamic; -- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('localhost', 'root', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'N', '2021-08-30 11:57:05', NULL, 'N');
INSERT INTO `user` VALUES ('localhost', 'mysql.session', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE', 'N', '2021-08-30 11:57:05', NULL, 'Y');
INSERT INTO `user` VALUES ('localhost', 'mysql.sys', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE', 'N', '2021-08-30 11:57:05', NULL, 'Y'); SET FOREIGN_KEY_CHECKS = 1;

三、解决最终问题

运行之后还是会发现一个问题,就是当把跳过权限验证语句注释掉之后,虽然远程服务器通过ssh连接操作时,mysql可以连接上不再出现那个问题,但是当远程连接服务器上的mysql时问题出现了,它没有远程连接的权限,这是因为我们刚才的文件中也是设置了。所以解决方法我找到了一篇博文:

解决Navicat 出错:1130-host . is not allowed to connect to this MySql server,MySQL

  1. 改表法。

    可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"



    mysql -u root -p

    mysql>use mysql;

    mysql>update user set host = '%' where user = 'root';

    mysql>select host, user from user;

    注:个人觉得不太适用!
  1. 授权法。

i.你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

ii.如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON . TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

iii.如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器的dk数据库,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

我用的 i 方法,最后执行一个语句 mysql>FLUSH RIVILEGES 使修改生效.就可以了

另外一种方法,不过我没有亲自试过的,在csdn.net上找的,可以看一下.

在安装mysql的机器上运行:

1、d:/mysql/bin/>mysql -h localhost -u root //这样应该可以进入MySQL服务器

2、mysql>GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION //赋予任何主机访问数据的权限

3、mysql>FLUSH PRIVILEGES //修改生效

4、mysql>EXIT //退出MySQL服务器

这样就可以在其它任何的主机上以root身份登录啦!

四、方法总结

最简单的错误就是,数据都在,然后单纯连接不上,通过修改密码可以连接。其次就是和我一样的错误,需要先跳过验证,然后重新修改表中缺失数据,然后给远程数据库授权可以远程连接,最后注释掉那跳语句,然后以后就可以通过正常的方式连接数据库了。

最后

篇幅也不算长,都是些个人话语,其实整体步骤很简单,只不过我想说的是,粗心大意有时候就是问题的所在,因为有时候原本一个很简单的问题,由于自己的疏忽导致迟迟未解决。还有就是CSDN中的解决错误的文章真的太水了,大多都是搬运,不加以修改,都是一模一样的,很难找到有效信息,所以还是建议像Stack Overflow、思否、博客园、这些论坛上去搜索问题,相对来说稍微比CSDN靠谱点。

对于MySQL远程连接中出现的一个问题总结的更多相关文章

  1. 在Ubuntu14.04中配置mysql远程连接教程

    上一篇文章,小编带大家学会了在Ubuntu14.04中安装MySQL,没有来得及上课的小伙伴们可以戳这篇文章:如何在Ubuntu14.04中安装mysql,今天给大家分享一下,如何简单的配置MySQL ...

  2. mysql 远程连接速度慢的解决方案

    PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS ...

  3. 云服务器Apache+MySQL(远程连接)+PHP等环境安装2021.5.9号配置

    云服务器Apache+MySQL(远程连接)+PHP等环境安装2021.5.9号配置 Linux版本:centos8.2 (其他版本提供适配) 安装方式:yum 今天使用centos8系统搭建了下云主 ...

  4. MySQL远程连接、用户授权

    目录 MySQL远程连接 创建用户.授权 MySQL添加用户.删除用户.授权及撤销权限 MySQL可授予用户的执行权限 MySQL远程连接 远程连接 授权 常见权限表 相关库:mysql 相关表:us ...

  5. Navicat for mysql 远程连接 mySql数据库10061、1045错误

    原文地址:http://www.111cn.net/database/mysql/46377.htm 有朋友可能会碰到使用Navicat for mysql 远程连接 mySql数据库会提示10061 ...

  6. 阿里云服务器解决mysql远程连接失败问题

    嗯,自己买了个阿里云的学生机服务器,奈何装了mysql以后一直不能连接,也是够笨的. 记录一下自己遇到的问题. 当然了,首先需要在阿里云安全组开放3306端口,第一次玩儿云服务器差点把我搞坏了.... ...

  7. mysql远程连接缓及缺少*.dll文件解决方案

    1.mysql远程连接缓慢 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5. ...

  8. [转]MySQL远程连接ERROR 2003 (HY000):Can't connect to MySQL server on'XXXXX'(111) 的问题

    问题描述: 从一台Linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.x ...

  9. (转)Linux开启mysql远程连接的设置步骤

    Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下: 1.GRANT命令创建远程连接mysql授权用户itlogger mys ...

随机推荐

  1. Nginx负载均衡反向代理服务器

    1.第一步先在IIS中创建多个网站,分别用不同的端口号.这里创建两个网站端口号分别8084.8085,在Nginx配置中会用到.测试两个网站能正常访问. 2.配置Nginx 1)增加负载均衡请求列表 ...

  2. SSRF漏洞入门篇

    SSRF漏洞,又名服务端请求伪造漏洞. PHP中下列函数使用不当会导致SSRF: file_get_contents().fsockopen().curl_exec()函数(源码审计的时候注意点儿): ...

  3. mysql安装简书

    mysql下载地址:https://dev.mysql.com/downloads/mysql/ mysql可视化工具下载地址:https://dev.mysql.com/downloads/work ...

  4. tp phpexcel 导入后台访问方法

    public function addall(){ $Water = M('Waterrate'); $config = array( 'maxSize' => 0, 'rootPath' =& ...

  5. Hadoop (8088)未授权访问

    cd /vulhub/hadoop/unauthorized-yarn 加速下载环境 sudo vim /etc/docker/daemon.json 添加 {"registry-mirro ...

  6. jboss未授权访问

    测试 poc地址 https://github.com/joaomatosf/jexboss

  7. 总结开发中基于DevExpress的Winform界面效果

    DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...

  8. MaterialDesign Or ComboBox 联动查询

    <ComboBox Width="200" Height="30" x:Name="ComboxName" Text="{B ...

  9. SpringBoot开发十四-过滤敏感词

    项目需求-过滤敏感词 利用 Tire 树实现过滤敏感词 定义前缀树,根据敏感词初始化前缀树,编写过滤敏感词的方法 代码实现 我们首先把敏感词存到一个文件 sensitive.txt: 赌博 嫖娼 吸毒 ...

  10. Echarts 展示两条动态数据曲线

    利用Echarts 展示两条动态数据曲线,每1秒刷新一下数据,在echart官网例子基础上修改,修改了仿真数据的生成方式.生成数量,曲线数量,最总效果图如下: 详细代码如下: 遇到的主要问题点, 1, ...