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

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

现象一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5.7.31。安装完成后,发现使用任何密码都能登陆 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'

@sqlz

='select

asd

from

flkg'

EXECUTE(@sqlz)

----------

首先,mysql下动态语句不是这样写的,另外,触发器里不能允许返回结果集的.

这里我是希望他能中断更新!

---------------------

你的意思是不是要中断后面的

"

SET

amount

=@amountmm

WHERE

CODE=new.code

AND

whcode

=

new.whcode

"

这部分?

如果是的话,那这样改下:

DELIMITER

$$

USE

`eerp`$$

DROP

TRIGGER

/*!50032

IF

EXISTS

*/

`material_update`$$

CREATE

TRIGGER

`material_update`

AFTER

UPDATE

ON

`sf_material`

FOR

EACH

ROW

BEGIN

IF

new.auditing

=

'Y'

THEN

SET

@amountmm

=

(SELECT

amount-new.amount

FROM

warehouse

WHERE

CODE=new.code

AND

whcode

=

new.whcode)

IF

@amountmm

>=0

THEN

UPDATE

warehouse

SET

amount

=@amountmm

WHERE

CODE=new.code

AND

whcode

=

new.whcode

END

IF

END

IF

END

$$

DELIMITER

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

"我是要中断更新。。不是后面。。。严格说就是这个表sf_material更新和后面的那个表warehouse更新也一起中断!"

---------------------------------------------------------------

因为mysql下触发器内不支持rollback,所以,变换一个方式来处理,如下:

那触发器部分这么写(注意:一定要使表TB_error_rollback在你的库中不允许存在):

CREATE

TRIGGER

`material_update`

BEFORE

UPDATE

ON

`sf_material`

FOR

EACH

ROW

BEGIN

IF

new.auditing

=

'Y'

THEN

SET

@amountmm

=

(SELECT

amount-

new.amount

FROM

warehouse

WHERE

CODE=new.code

AND

whcode

=

new.whcode)

IF

@amountmm

update

TB_error_rollback

set

name=1

END

IF

UPDATE

warehouse

SET

amount

=@amountmm

WHERE

CODE=new.code

AND

whcode

=

new.whcode

END

IF

END

权限问题。,copy份给你!

1.首先要运行一下

比如说我的mysql安装在/opt/mysql下面

#cd

/opt/mysql

#scripts/mysql_install_db

--user=mysql

(确认你有mysql用户)

如果不行,检查你的/opt/mysql(这是我的)下面有没有data目录,正确的做法是先启动一次如果OK,再移data目录到别的地方。

两个方法解决

1.如果你没有修改过my.cnf文件,请修改,然后把添加datadir

[mysqld]

port

=

3306

socket

=

/tmp/mysql.sock

datadir

=

/data/mysql/data

这时候,你在/opt/mysql下面建一个软链接到/etc/my.cnf

#cd

/opt/mysql

#ln

-sf

/etc/my.cnf

my.cnf

2.或者你在/opt/mysql下面建一个data的软链接

#cd

/opt/mysql

#ln

-sf

/data/mysql/data

data

如果还不行,你就得查看你已经注册成服务的mysqld

#cd

/etc/init.d/

#vim

mysqld

一般的默认是安装在/usr/local下面的,所以你要修改这个目录的名称及指向。

再不行,你得查一下

/opt/mysql/data/localhost.err文件报什么错。

再按错误来解决。

我之前是少了一个libstdc++.so.5的库,从别的地方copy了一个就OK了

正确流程如下:

#cd

/opt/mysql

#scripts/mysql_install_db

--user=mysql

成功

#cd

../bin/mysqld_safe

&

//这是运行一个demo

查一下进程树

#ps

aux

|

grep

mysql

//如果有就可以运行

/opt/mysql/support-files/mysql.server

start

//修改一下mysql.server文件,这个脚本文件其实就是init.d/mysqld文件,默认路径在/usr/local下面

成功了就可以用了

/opt/mysql/bin/mysql

愿你早日解决些事。

记得权限的问题,--user=mysql来启动创建初始化table,你的data目录要有写权限。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7597047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存