mysql连接数据库失败,请确定数据库用户名,密码设置正确

mysql连接数据库失败,请确定数据库用户名,密码设置正确,第1张

现象

一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5731。安装完成后,发现使用任何密码都能登陆 MySQL,修改密码也不管用,重新启动 MySQL 也不能解决。

分析

怀疑使用了 --skip-grant-tables 使用 mysqld --print-defaults 检查,没有发现。

检查登陆用户,都是 root@localhost,说明和 proxy user 没有关系。

使用 mysql --print-defaults 检查客户端是否设置默认的用户和密码,没有发现。

检查数据库中的用户和密码的相关字段:

发现一切都正常,再检查 plugin 字段,发现只有 root 用户是 auth_socket ,其它的用户都是 mysql_native_password,问题可能就出在这儿。

对 auth_socket 验证插件不了解,感觉是这个插件不安全,使用下面的命令修改后,问题解决:

update user set plugin="mysql_native_password" where user='root';

auth_socket 验证插件的使用场景

问题解决后,又仔细研究了一下 auth_socket 这个插件,发现这种验证方式有以下特点:

首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制;

只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了操作系统的安全验证;

操作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆MySQL 的 root 用户,必须用操作系统的 root用户登陆。

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用操作系统的 root 用户和 MySQL 的 root 用户。当我们在系统投产后,操作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

具体解决法如下:1排除网络或防火墙问题先看是否能ping通远程服务器,ping1921681211,如果不可以就是网络问题。然后,检查端口是否被防火墙挡住了,telnet19216812113306,如果连接失败,配置防火墙。2配置防火墙,开启3306端口vi/etc/sysconfig/iptables-AINPUT-mstate–stateNEW-mtcp-ptcp–dport3306-jACCEPT(允许3306端口通过防火墙)/etc/initd/iptablesrestart(重启防火墙使配置生效)2检查MySQL配置3如果开启了防火墙,telnet还是失败,通过netstat查看3306的端口状态:netstat-apn|grep3360tcp600127001:3306:::LISTEN13524/mysqld注意红色的地方,这说明3306被绑定到了本地。检查一下mycnf的配置,这里可以配置绑定ip地址。

一、mycnf配置文件datadir项配置错误或被启动脚本篡改

这个问题不太说讲,主要是mysql自带的启动文件(/etc/initd/mysqld)中会自动检测mysql的数据存储目录,若mysql新装,尚未初始化系统表,那么配置文件中的datadir项写不写无所谓,出现这种情况主要是在更改了mysql的数据存储目录,今天我出现的这个问题就在于此。

我的mysql安装后的配置文件中关于datadir项目的配置如下,而该配置文件存储于/etc/mycnf,今儿不知动了什么东西,查来查去都没找着原因,后来打开该配置文件才发现,其中的datadir项目被篡改成/var/mysql/data了

[mysqld] datadir=/data/mysql socket=/tmp/mysqlsock user=mysql

二、进程里已经存在mysql进程

这种情况我很少遇到,若存在mysql进程但有不提供mysql服务(表现为其他客户端连接不上mysql服务器,例如php连接mysql时提示“连接失败”),这个时候就要看看有没有存在的mysql僵尸进程了,命令如下:

ps -ef|grep mysql

若存在,该命令执行后会列出存在的僵尸进程,kill -9 `pid`掉即可。

三、mysql的数据存储目录权限不足

这种情况发生于mysql第一次安装或升级,配置文件中的datatdir目录的权限要设定好,一般来说运行mysql的用户以及组就是mysqlmysql,那么解决权限不足问题的方法如下:

chown -R mysqlmysql /data/mysql ##该命令仅为示例,其中/data/mysql就是mysql配置文件中datadir的目录 ##若为空,则默认为mysql安装目录下的data文件夹下

四、覆盖安装或升级mysql后,残余数据的影响

这种情况发生于mysql被覆盖安装或升级后,当然mysql无故宕机后也会有这种情况,可能会影响mysql启动的数据文件,一般存在于mysql的数据存储目录(这个目录依据mycnf配置文件中的datadir而异),也就是存在于mysql数据存储目录下的mysql-binindex文件,删除之即可。

五、selinux的问题,centos下最容易出现

selinux不甚了解,直接关掉。

##方法1:永久关闭seliux ##修改 vi /etc/selinux/config #文件中设置SELINUX=disabled ,然后重启服务器 ##方法2:暂时关闭seliux setenforce 0 ##如需每次开机都铃声关闭seliux,则可以在/etc/rcd/rclocal文件中添加该命令

六、mysql运行状态下删除binary日志后重启失败

这是今天在群里的一个朋友出现的,特汇总于此;当mysql开启了二进制日志并且mysql在运行状态下用rm命令删除过mysql的binary日志文件的话,下次重启mysql你就悲剧了。

什么是binary日志?说白了就是mysql的数据目录下的mysql-bin000001、mysql-bin000002的文件,下图所示。

解决方法就是修改配置文件临时关闭binary-log,然后删除mysql数据目录下的所有类似mysql-bin000001、mysql-bin000002的文件后再次重启,mysql即可启动成功。

#mysql配置关闭二进制日志 找到如下语句 注释掉即可 #log-bin=mysql-bin #binlog_format=mixed

此步骤操作完毕之后,若还需要启用二进制日志,那么就要先停掉mysql服务,然后修改msyql的配置文件,再次重启即可。

另外再附上正确删除mysql二进制日志文件的方法(绝对不是rm -rf命令直接删这些文件):

#第一步 通过shell或cmd登录进mysql 这步没什么好说的 msyql -u root -p #第二步 在mysql下直接执行清理binary日志命令 mysql> reset master #注意:此处仅针对单台mysql而言,若有互备mysql 则执行该命令有风险

1、以系统管理员身份登录到系统;

2、如果MySQL服务器正在运行,停止它。

如果是作为Windows服务运行的服务器,进入服务管理器:开始菜单->控制面板->管理工具->服务 ,如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。

3、创建1个文本文件,并将下述命令置于单一行中:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPassword');

用任意名称保存该文件。在本例中,该文件为C:\mysql-inittxt。

4、进入DOS命令提示:开始菜单->运行-> cmd

假定你已将MySQL安装到C:\mysql。如果你将MySQL安装到了另一位置,请对下述命令进行相应的调整。

在DOS命令提示符下,执行命令:

C:\mysql\bin\>mysqld-nt --init-file=C:\mysql-inittxt

在服务器启动时,执行由“--init-file”选项(作用:在启动时从指定的文件中读取SQL命令)命名的文件的内容,更改根用户密码。当服务器成功启动后,应删除C:\mysql-inittxt。

5、如果起动MySQL服务器出错,把进程mysqld-ntexe关闭。然后重启它,OK。

6、或者停止MySQL服务器,然后在正常模式下重启它。如果以服务方式运行服务器,应从Windows服务窗口启动它。如果以手动方式启动了服务器,能够像正常情形下一样使用命令。

应能使用新密码进行连接。

3306端口吧,不是8080

<php

$host="localhost";

$db_user="root"; //用户名

$db_pass="1"; //密码

$db_name="lianxi"; //数据库名

$timezone="Asia/Shanghai";

$link=mysql_connect($host,$db_user,$db_pass);

mysql_select_db($db_name,$link);

mysql_query("SET names UTF8");

header("Content-Type: text/html; charset=utf-8");

date_default_timezone_set($timezone); //北京时间

>

安装MySQL以后应该会自动启动资料库服务。选择「开始->电脑->右键->管理」,在电脑管理窗口选择「服务与应用程序->服务」,检查MySQL服务的状态是否为「已启动」。

MySQL我用的是apt安装的,有很多问题,建议大家用二进制程序安装。

问题描述

在服务器上登录MySQL只能用本地的127001地址,用服务器本身地址会提示拒绝访问

尝试修改MySQL远程访问权限

修改后发现没有用,MySQL依然拒绝远程访问

查看3306端口

root@sfpql:~# netstat -an|grep 3306

修改MySQL服务地址:

尝试远程连接

telnet sfpql 3306

结语

MySQL远程连接不上是常见问题,一般设置好MySQL的远程访问权限就可以了。

apt安装的MySQL会自己将启动地址设置在本地,同时apt安装的MySQL的服务查看命令是 systemctl status mysql 其他安装方式的常看命令是 systemctl status mysqld

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » mysql连接数据库失败,请确定数据库用户名,密码设置正确

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情