• MySQL连接报错-->Host 'X.X.X.X' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'


    MySQL连接报错-->Host 'X.X.X.X' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

    错误信息

    fail: Microsoft.EntityFrameworkCore.Database.Connection[20004]
          An error occurred using the connection to database 'TestDb' on server 'X.X.X.X'.
    fail: Microsoft.EntityFrameworkCore.Update[10000]
          An exception occurred in the database while saving changes for context type 'Test.API.Infrastructure.TestContext'.
          MySql.Data.MySqlClient.MySqlException (0x80004005): Host 'X.X.X.X' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
             at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
             at MySql.Data.MySqlClient.NativeDriver.Open()
    

    Host 'X.X.X.X' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

    该错误的其它扩展信息

    错误说明
    意味着某一客户端尝试连接此MySQL服务器,
    但是失败次数大于配置允许失败的次数,
    则MySQL会无条件强制阻止此客户端连接

    功能与作用
    一般来说建议数据库服务器不监听来自网络的连接,
    仅仅通过sock连接,这样可以防止绝大多数针对mysql的攻击;
    如果必须要开启mysql的网络连接,则最好设置此值,以防止穷举密码的攻击手段.

    如何进入MySQL

    关键命令-->mysql -u root -p

    [root@iZ2ze77grk2a8yrd97ft1uZ ~]# mysql -u root -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    

    //经验+1
    我刚开始直接使用的是Linux服务器的用户名.{root}和密码.
    其实应该使用MySQL数据库的用户名.{MySQL_Uid}和MySQL数据库的密码.

    成功进入的一个提示↓

    [root@iZ2ze77grk2a8yrd97ft1uZ ~]# mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 27624
    Server version: 5.7.33 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2021, Oracle and/or its affiliates.
    
    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>
    
    
    

    解决方案-->1(治标不治本)(重启服务参数会再次重置为默认值)

    连接数量-->查看

    
    mysql> show global variables like '%max_connect_errors%';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | max_connect_errors | 100   |
    +--------------------+-------+
    1 row in set (0.00 sec)
    
    

    连接数量-->修改

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

    由于我在测试环境中,所以我采用的是该方法

    解决方案-->2(重启服务参数会再次重置为默认值)

    修改配置文件,这样每次服务重启,不用每次使用命令再次执行修改参数了

    
    vim /etc/my.cnf
    
    

    在节点.{mysqld}下修改参数

    [mysqld]
    max_connect_errors = 1000
    

    解决方案-->3(重置最大错误连接数)

    #MySQL版本5.6.5及以前默认值为 10
    #MySQL版本5.6.6及以后默认值为 100
    flush hosts;   
    
    #执行完flush hosts查询
    select *from performance_schema.host_cache limit 1 G;
    *************************** 1. row ***************************
                                            IP: X.X.X.X
                                          HOST: NULL
                                HOST_VALIDATED: YES
                            SUM_CONNECT_ERRORS: 0
                     COUNT_HOST_BLOCKED_ERRORS: 0
               COUNT_NAMEINFO_TRANSIENT_ERRORS: 0
               COUNT_NAMEINFO_PERMANENT_ERRORS: 1
                           COUNT_FORMAT_ERRORS: 0
               COUNT_ADDRINFO_TRANSIENT_ERRORS: 0
               COUNT_ADDRINFO_PERMANENT_ERRORS: 0
                           COUNT_FCRDNS_ERRORS: 0
                         COUNT_HOST_ACL_ERRORS: 0
                   COUNT_NO_AUTH_PLUGIN_ERRORS: 0
                      COUNT_AUTH_PLUGIN_ERRORS: 0
                        COUNT_HANDSHAKE_ERRORS: 0
                       COUNT_PROXY_USER_ERRORS: 0
                   COUNT_PROXY_USER_ACL_ERRORS: 0
                   COUNT_AUTHENTICATION_ERRORS: 0
                              COUNT_SSL_ERRORS: 0
             COUNT_MAX_USER_CONNECTIONS_ERRORS: 0
    COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS: 0
                 COUNT_DEFAULT_DATABASE_ERRORS: 0
                     COUNT_INIT_CONNECT_ERRORS: 0
                            COUNT_LOCAL_ERRORS: 0
                          COUNT_UNKNOWN_ERRORS: 0
    
    
    

    其它

    #为了避免数据太多,我们只需要查看第一条数据就行了
    select *from performance_schema.host_cache limit 1 G;
    
    
    #或者这样写↓
    use performance_schema;
    select * from host_cache limit 1 G;
    
    
    
    #输出...
    *************************** 1. row ***************************
                                            IP: X.X.X.X
                                          HOST: NULL
                                HOST_VALIDATED: YES
                            SUM_CONNECT_ERRORS: 193
                     COUNT_HOST_BLOCKED_ERRORS: 2973
               COUNT_NAMEINFO_TRANSIENT_ERRORS: 0
               COUNT_NAMEINFO_PERMANENT_ERRORS: 1
                           COUNT_FORMAT_ERRORS: 0
               COUNT_ADDRINFO_TRANSIENT_ERRORS: 0
               COUNT_ADDRINFO_PERMANENT_ERRORS: 0
                           COUNT_FCRDNS_ERRORS: 0
                         COUNT_HOST_ACL_ERRORS: 0
                   COUNT_NO_AUTH_PLUGIN_ERRORS: 0
                      COUNT_AUTH_PLUGIN_ERRORS: 0
                        COUNT_HANDSHAKE_ERRORS: 195
                                                               
    
    

    摘抄文档

    作者:linux快速入门培训
    链接:https://www.imooc.com/article/44354
    来源:慕课网

  • 相关阅读:
    apt-clone安装与使用
    利用异或求(整数数组中,有2K+1个数,其中有2k个相同,找出不相同的那个数)
    运行程序,填写结果
    throw与throws的区别
    牛客网多线程程序执行结果选择题
    一个继承了抽象类的普通类的执行顺序
    int i=0;i=i++
    HashMap浅入理解
    &&和&、||和|的区别
    System.out.println()
  • 原文地址:https://www.cnblogs.com/love-zf/p/14656269.html
Copyright © 2020-2023  润新知