Mysql 安装使用时常见问题解决记录

目录

[一、 解决连接MySQL报错is not allowed to connect to this MySQL server](#一、 解决连接MySQL报错is not allowed to connect to this MySQL server)

问题描述:

解决方案:

1、在MySQL所在服务器上使用命令登录到MySQL数据库中

2、选择mysql数据库,并查询权限

​编辑3、刷新配置

[二、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‘解决办法)

问题描述

原因分析

(1).检查mysql服务是否启动

(2).修改mysql密码

[四:快速解决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上的地址可能不同,不过不影响,通过提示找到相应的目录就行了,这个文件一般是会自动生成的,所以遇到这种报错一般是不能自动生成这个文件,那么解决思路就出来了

  1. 简单粗暴点可以直接创建一个mysql.sock文件,但我一般不建议这样,因为你不知道内容怎么写,当然你可以在其他地方copy,这我就不讲了

  2. 既然是不能自动创建,为了找清楚问题根源,就做了些让人也疼的无聊测试,最后发现原来是文件夹权限问题(真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服务。

相关推荐
PD我是你的真爱粉3 小时前
MySQL 事务与并发控制:从日志底层到 MVCC 哲学
android·mysql·adb
摸鱼的后端3 小时前
Docker容器中Kingbase数据库授权到期更换解决方案
数据库·docker·容器
极创信息3 小时前
企业信创产品认证全流程:从信创适配到信创认证的实操指南(2026版)
java·数据库·spring boot·mysql·matlab·mybatis·软件工程
onebound_noah3 小时前
【实战解析】如何高效获取京东商品详情数据(含多语言SDK接入)
java·前端·数据库
PD我是你的真爱粉3 小时前
MySQL 高性能实战与底层原理
数据库·mysql·adb
爬山算法3 小时前
MongoDB(73)如何设置用户权限?
数据库·mongodb·oracle
a8a3023 小时前
SQL中如何添加数据
数据库·sql
爬山算法3 小时前
MongoDB(74)什么是数据库级别和集合级别的访问控制?
数据库·mongodb
kc胡聪聪3 小时前
MySQL的高可用
mysql