某天登录自己的mysql数据库突然报错:1045 Access denied for user 'root'@'***' (using password:YES)
分析:
1.用户密码做了修改,登录时候用的旧密码,密码错误
2.登录用户不在mysql的user表里
解决思路:
1.linux上进入mysql进入mysql的database,查看user表用户信息,看是否用户缺失
2.如果用户存在,那么更新下密码
执行:
没有密码登录mysql的方式
1、找到MySQL的配置文件my.cnf
2、在[mysqld]下增加一行skip-grant-tables
[mysqld]
datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=4000
innodb_file_per_table=1
#表名大小写不明感,敏感为
#lower_case_table_names=1
max_allowed_packet=400M
skip-grant-tables
3、重启数据库service mysqld restart
4.
登录:
方式1:
mysql -u root -p输入后跳过密码登录
方式2:navicat登录
排查:mysql空间的user表没有root账户,所以在user表加入root账户即可
方式1:linux下直接创建
1)进入mysql
2)user mysql;
3)insert into mysql.user(Host,User,Password) values(“%”,”username”,password(“1234”));
4) //刷新系统权限表
flush privileges;
方式2:navicat里user表insert一条记录再修改内容
创建root账户(在navicat操作,复制一个用户,复制为为insert语句,修改username为root,执行)
给新建root更新字段
update user set Host='%',
select_priv='y',
insert_priv='y',
update_priv='y',
Alter_priv='y',
delete_priv='y',
create_priv='y',
drop_priv='y',
reload_priv='y',
shutdown_priv='y',
Process_priv='y',
file_priv='y',
grant_priv='y',
References_priv='y',
index_priv='y',
create_user_priv='y',
show_db_priv='y',
super_priv='y',
create_tmp_table_priv='y',
Lock_tables_priv='y',
execute_priv='y',
repl_slave_priv='y',
repl_client_priv='y',
create_view_priv='y',
show_view_priv='y',
create_routine_priv='y',
alter_routine_priv='y',
create_user_priv='y'
where user='root';
commit;
linux下修改密码:update user set password=password("修改后的密码") where user="root"; //修改数据库的密码
回复数据:
1.去掉my.cnf加入的skip-grant-tables
2.重启mysql
3.尝试用新建的用户密码登录,登录成功