目录
[一、 解决连接MySQL报错is not allowed to connect to this MySQL server](#一、 解决连接MySQL报错is not allowed to connect to this MySQL server)
1、在MySQL所在服务器上使用命令登录到MySQL数据库中
[二、1045-Access denied for user '**'@'**' (using password: YES)错误处理](#二、1045-Access denied for user ‘‘@‘‘ (using password: YES)错误处理)
[三、MySQL登录时报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost'解决办法](#三、MySQL登录时报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘解决办法)
[四:快速解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "](#四:快速解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) ")
五、mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止
一、 解决连接MySQL报错is not allowed to connect to this MySQL server
问题描述:
本机装的MySQL数据库,本机可以正常连接,其他机器访问报错,is not allowed to connect to this MySQL server,防火墙等其他策略均配置没问题 。
解决方案:
出现该问题的原因是,MySQL数据库只允许自身所在的本机器连接,不允许远程连接。
1、在MySQL所在服务器上使用命令登录到MySQL数据库中
# 终端登录mysql
mysql -u root -p

2、选择mysql数据库,并查询权限
use mysql;
select host from user where user = 'root';
可以看到,执行查询语句后得到的数据结果中 host 的值是 localhost

再执行update语句修改权限
update user set host ='%' where user = 'root';
3、刷新配置
flush privileges;

再次执行查询权限语句
select host from user where user= 'root';
可以看到,已经修改成功

改表法:可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmwaremysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
授权法:例如你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH
二、1045-Access denied for user '**'@'**' (using password: YES)错误处理
问题描述
错误提示:1045 - Access denied for user 'username'@'IP' (using password: YES)
表示拒绝用户{username} 从{IP}链接数据库
{using password: YES}:标识使用密码登录
解决方案
授权用户远程访问即可
格式:GRANT {权限} ON {库表} TO '{用户名}'@'{访问地址}' IDENTIFIED BY '{密码}'
#mysql中执行授权命令
GRANT ALL PRIVILEGES ON . TO 'USER1'@'%' IDENTIFIED BY 'PWD-2020';
#手动刷新权限
flush privileges;
**权限:**可以执行的操作权限,all privileges 所有权限,也可以是select,insert,update,delete等组合权限;
库表 : 可以操作的库和表,单库单表"db1.table1",单库全表"db1.",全库全表".*";
**用户名:**远程访问的用户名
**访问地址:**只允许用户在特定ip上链接数据库,"%"标识不限制IP。
**密码:**用户远程链接数据库的密码,默认密码规则需要包括大小写字符、特殊字符和数字。
#mysql远程访问被拒问题 1045 - Access denied for user
#首先要去授权 ,如果授权用户root给别人授权都deny的时候很可能是没有配置主机地址访问
#去到mysql 运行的 主机 ,如docker容器内部mysql实例 里 输入:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' with grant option;
Or 非root 用户时使用指定数据库
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%' IDENTIFIED BY 'password' ;
#root代表root用户
# username 代表用户
# database_name是数据库名
#*.* 代表所有库.所有表
#ALL PRIVILEGES 代表所有操作权限
#'%'代表任何网络下都可以访问,也就是允许可以远程访问
#'123456' 的用户密码
# with grant option 拥有Root 权限
#最后刷新权限
flush privileges;
三、MySQL登录时报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost'解决办法
问题描述
在云服务器使用 docker安装的Mysql5.7数据库,刚开始的时候使用正常,后面突然有一天就连接不上了,报错为: ERROR 1045 (28000): Access denied for user 'root'@'1xxx'(using password:YES), 当登录MySQL数据库出现 Error 1045 错误时,表明输入的用户名或密码错误 被拒绝访问了
原因分析
- mysql的服务器停止
- 用户的端口号或者IP导致
- mysql的配置文件错误:my.ini等文件
- root用户的密码错误
注意: MySQL服务搭建后, 默认root用户是不能进行远程访问连接的
(1).检查mysql服务是否启动
当mysql的服务器停止时,会报上面的错误,这里使用的是docker,故使用 docker ps命令查看mysql相关服务是否正常
#查看docker 相关服务
docker ps
...
#进入docker-mysql
docker exec -it docker_mysql bash
...
#进入mysql
mysql -uroot -p
#然后输入密码
...
通过上面命令可以检测mysql是否启动,
(2).修改mysql密码
MySQL服务搭建后, 默认root用户是不能进行远程访问连接的,或者root用户的密码错误,也会报上面错误,故进行mysql密码修改来排除
1).查看临时密码
首次安装的mysql是没有修改过密码的,使用下面命令查看生成的临时密码
grep "A temporary password is generated for root@localhost" /var/log/mysqld.log
2).登入
mysql -uroot -p #然后输入临时密码,进入mysql端
3).修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
localhost代表的是地址, root代表 数据库密码,root可以修改为自己的密码
执行上面代码,可能会报错:

解决办法:
查看当前密码策略
show variables like '%validate_password_policy%';
show variables like '%validate_password_length%';


修改密码策略
修改长度和弱度
set global validate_password_policy=0; #设置为弱口令
set global validate_password_length=1; #密码最小长度为1
再次修改
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
刷新
flush privileges;
退出
quit;
重新登录
mysql -uroot -p show databases;
(3).开启远程访问
use mysql; #访问mysql库
update user set host = '%' where user = 'root'; #使root能在任何的host访问
FLUSH PRIVILEGES; #刷新
在执行上面update时,也许会报错:
Duplicate entry '%-root' for key 'PRIMARY'
这是因为 有多个ROOT用户纪录在USER表中了, 最好是把除了host为'%'或者为'localhost'的其他user字段为root的用户删除掉,然后利用命令 FLUSH PRIVILEGES 刷新即可解决该问题
使用 select host from user where user = 'root';查看一下host是否已经有了 %这个值


然后 利用命令 FLUSH PRIVILEGES 刷新,这样就解决了上面的问题,再次连接数据库,看看是否成功
(4).修改mysql配置
1).方法一
在my.cnf的[ mysqlId]里面加配置
skip-grant-tables
这个配置是可以实现远程登陆,但是跳过权限直接写在配置文件里的这种做法 不建议使用
2).方法二
使用以下命令操作
grant all privileges on . to 'root'@'%' identified by '密码' with grant option;
FLUSH PRIVILEGES;
通过mysql -uroot -p 命令,并输入密码进入数据库
mysql -uroot -p
然后执行下面命令
grant all privileges on . to 'root'@'%' identified by '密码' with grant option;
刷新并退出
FLUSH PRIVILEGES;
exit;
(5).总结
通过以上排除方法就可以解决 ERROR 1045 (28000)_ Access denied for user 'root'@'localhost'报错了
注意:
如果mysql是docker部署的,当每次重启容器时,可能需要再一次跑一下 步骤(4).修改mysql配置 这个命令,这个也有解决的办法:
#配置mysql密码还有默认的身份验证插件-解决每隔一段时间就会登陆不上问题
#身份插件-mysql_native_password 本地密码 default_authentication_plugin=mysql_native_password
#密码失效时间-永不过期
default_password_lifetime=0
其他解决办法:
docker exec -it 进入mysql,执行下面命令解决:
主要是 mysql_native_password 这个参数要注意
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
flush privileges;
四:快速解决Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) "
问题描述:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
root@iZ:~# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

mysql.sock 这个文件在你的pc上的地址可能不同,不过不影响,通过提示找到相应的目录就行了,这个文件一般是会自动生成的,所以遇到这种报错一般是不能自动生成这个文件,那么解决思路就出来了
-
简单粗暴点可以直接创建一个mysql.sock文件,但我一般不建议这样,因为你不知道内容怎么写,当然你可以在其他地方copy,这我就不讲了
-
既然是不能自动创建,为了找清楚问题根源,就做了些让人也疼的无聊测试,最后发现原来是文件夹权限问题(真TM牙疼),既然这样解决起来就简单了,将mysql.sock所在目录的权限改为777就行了
sudo chmod 777 /tmp然后:sudo service mysql start
root@iZ:~/ $ sudo service mysql start [16:58:11]
- Starting MySQL database server mysqld [ OK ]
- Checking for tables which need an upgrade, are corrupt or were
not closed cleanly.
root@iZ:~/ $ mysql -uroot -p [16:58:35]
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.5.50-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
五、mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止

找到mysql文件下的data文件,打开有一个ERR文件,查看启动报错内容


mysql初始化的时候找不到对应的数据库存储目录
2025-03-12T13:53:17.458880Z 1 [ERROR] [MY-011011] [Server] Failed to find valid data directory.
2025-03-12T13:53:17.459566Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
解决方法:
1、手动删掉自己创建的data文件夹
2、然后再管理员cmd下进入 bin 目录,移除自己的mysqld服务
mysqld -remove MySQL
Service successfully removed.
3、在cmd的bin目录执行 mysqld --initialize-insecure
程序会在动MySQL文件夹下创建data文件夹以及对应的文件
4、bin目录下执行,mysqld --install ,安装mysqld服务
5、在bin目录下运行net start mysql ,启动mysql服务。