Mysql问题小结

Mysql

这段时间一直想利用自己搭建的环境做一个简单的注入的靶场,但是在之前搭建的数据库突然连接不上,我就很郁闷,现在捋一捋这短时间在这个部分卡壳的问题。

问题清单

  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (1001)
  • 密码重置后的报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  • MySQL8.0报错:Unknown system variable ‘validate_password_policy‘

ERROR 2002(HY000)

首先是这个问题,查阅了不少问题贴、博客,发现好几个类似问题的解决思路是通过报错信息Can't connect to local MySQL server through socket '/tmp/mysql.sock 然后再根据里边提到路径去查看mysql.sock内容,然后发现该路径没有这个mysql.sock的文件(疑似一些进程干掉了该文件),所以通过全文件搜索,找到对应的mysql.sock文件,拷贝一份相同的内容,新建一个mysql.sock,这个时候,mysql系统启动就查询到了该文件,就启动了。
但是本人的情况是,该路径下的文件mysql.sock存在,但是内存大小为0,而且无权修改,这个问题导致注入靶场一直没能搭建好,所以这个问题暂时没能解决。

卸载mysql

# 删除mysql
yum remove  mysql mysql-server mysql-libs mysql-server;

    find / -name mysql // 将找到的相关东西delete掉(rm -rf /var/lib/mysql);

    rpm -qa|grep mysql // (查询出来的东东yum remove掉)

    rm /etc/my.cnf

//查看是否还有mysql软件:  
rpm -qa|grep mysql

//如果存在的话,继续删除即可。

//rpm方式安装的mysql

//查看系统中是否以rpm包安装的mysql
 rpm -qa | grep -i mysql

//删除分散mysql文件夹
whereis mysql 或者 find / -name mysql

Access denied for user 'root'@'localhost' (using password: YES)

重装数据库mysql后,用初始密码登录然后修改了密码,推出后再重登录,发现怎么也登录不上这个数据库,一直报错,该语句是拒绝root用户连接,需要密码认证。一般出现这个问题应该是密码输入错误,但是我发现我不论是用初始密码还是用修改后的密码怎么也登录不上,一直报这个错误。

解决方式:
vim /etc/my.cnf
修改该配置文件,在[mysqld]下添加一行

skip-grant-tables 

就可以以无密码的方式登录了。

Unknown system variable ‘validate_password_policy‘

卸载重装之后,通过初始密码,修改密码的时候,就报了这个错
Unknown system variable ‘validate_password_policy

在安装MySQL8.0时,修改临时密码,因密码过于简单(如:123456),不符合MySQL密码规范,会触发一个报错信息:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
解决方式:
先设置一个满足条件的密码(Root_12root),设置之后,再查看

# 设置符合条件的密码
mysql>use mysql;
mysql> alter user 'root'@'localhost' identified by 'Root_12root';
Query OK, 0 rows affected (0.01 sec)
#刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
# 这里是policy和length安全级别较高,所以自己搭建的环境所设置的密码过于简单就会报错

# 重置了密码之后就可以将安全级别降低,这样就可以设置相对简单的密码
mysql> set global validate_password_policy = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    | ON    |
| validate_password_dictionary_file    |       |
| validate_password_length             | 4     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
7 rows in set (0.00 sec)


mysql8.0修改密码需要将该字段改为空字段,之后才可以重新设置相对简单的密码;

# 将authentication_string设为空字段,清空密码
UPDATE user SET authentication_string="" WHERE User="root";

退出Mysql后,再修改配置文件 vim /etc/my.cnf,将之前的无密码登录过程注释化

[mysqld]
# skip-grant-tables  

再次登录mysql

mysql -u root -p
enter: # 空格跳过认证
mysql> alter user 'root'@'localhost' identified by 'root1234';
Query OK, 0 rows affected (0.01 sec)
# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

# 这样就可以用自定义的密码登录数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

小结

这次引发的数据库问题,首先是用了一段时间的数据库,突然就无法连接导致的后续的其他问题,主要是对于数据库的了解欠缺。记录一下本次解决这些问题的方式。方便后面再有查阅。

参考文章

ERROR 1045(28000)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
[ mysql登录报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)](https://www.cnblogs.com/zhongyehai/p/10695334.html)
Mysql安装
解决MySQL8.0报错:Unknown system variable ‘validate_password_policy‘
MySQL 重置密码
MySQL忘记密码的处理方法(MySQL重置密码)

posted @ 2022-07-03 18:03  JaydenHuan  阅读(56)  评论(0编辑  收藏  举报